The Curious Engineer

All blogs / Java / JVM

Jake Wharton

jakewharton.com

Blog posts, presentations, GitHub, and more.

Java / JVMMobile / iOS / AndroidDev tools / editors / IDEsEngineering blogs

Posts
105 from 1 Dec 2011 to 10 Sep 2026
Posting
monthly (9 in the last year)
Kind
personal blog
Feed
https://jakewharton.com/atom.xml

2026 6

  1. Podcasts
  2. Compose & kotlinx.html
  3. Live coding with dir stepper
  4. The lysine contingency
  5. Presentations
  6. An update on Android KTX

2025 7

  1. Let's defuse the Compose BOM
  2. You should use AndroidX betas
  3. Custom short-link redirector
  4. Fan-in to a single required GitHub Action
  5. Compile-time validation of JNI signatures
  6. Deprecating idling resource libraries
  7. Using Renovate to update build JDK

2024 5

  1. Nonsensical Maven is still a Gradle problem
  2. Gradle toolchains are rarely a good idea
  3. Kotlin's JDK release compatibility flag
  4. Perils of duplicate finding
  5. Intermediate collection avoidance

2023 4

  1. A stable, multiplatform Molecule 1.0
  2. Native UI and multiplatform Compose with Redwood
  3. Flow testing with Turbine
  4. Using jlink to cross-compile minimal JREs

2022 3

  1. Report card: Java 19 and the end of Kotlin
  2. Build on latest Java, test through lowest Java
  3. Slope-intercept library design

2021 8

  1. The state of managing state (with Compose)
  2. Multiplatform Compose and Gradle module metadata abuse
  3. Gradle dependency license validation
  4. Case-insensitive filesystems considered harmful (to me)
  5. Cross-compiling static Rust binaries in Docker for Raspberry Pi
  6. Migrating from Burst to TestParameterInjector
  7. Integration verbosity and good layering
  8. AssistedInject is dead, long live AssistedInject!

2020 15

  1. A Jetpack Compose by any other name
  2. Treating Dockerfiles as shell scripts
  3. Peeking at command-line ANSI escape sequences
  4. Smaller APKs with resource optimization
  5. Shrinking a Kotlin binary by 99.2%
  6. Wire Support For Swift, Part 1
  7. Sixteen corners
  8. R8 Optimization: Lambda Groups
  9. Which is better on Android: divide by 2 or shift by 1?
  10. Simple Multiplatform RPC with Kotlin Serialization
  11. Litmus-Testing Kotlin's Many Memory Models
  12. D8 Optimization: Assertions
  13. Removing Google as a Single Point of Failure Part 2: Gmail
  14. Removing Google as a Single Point of Failure
  15. Extracting 100% of Data From a Stubborn, Dying ZFS Pool

2019 16

  1. D8 Library Desugaring
  2. Public API challenges in Kotlin
  3. D8 Optimizations
  4. R8 Optimization: Enum Switch Maps
  5. R8 Optimization: Enum Ordinals and Names
  6. R8 Optimization: Class Reflection and Forced Inlining
  7. Calculating the true impact of zip file entries
  8. Exceptions and proxies and coroutines, oh my!
  9. R8 Optimization: Method Outlining
  10. Optimizing Bytecode by Manipulating Source Code
  11. The Economics of Generated Code
  12. R8 Optimization: Class Constant Operations
  13. R8 Optimization: String Constant Operations
  14. R8 Optimization: Value Assumption
  15. R8 Optimization: Null Data Flow Analysis (Part 2)
  16. Inline Classes Make Great Database IDs

2018 8

  1. R8 Optimization: Null Data Flow Analysis (Part 1)
  2. R8 Optimization: Staticization
  3. Avoiding Vendor- and Version-Specific VM Bugs
  4. Android's Java 9, 10, 11, and 12 Support
  5. Android's Java 8 Support
  6. Increased accuracy of aapt2 "keep" rules
  7. Tracing Gradle task execution
  8. Introducing Android KTX: Even Sweeter Kotlin Development for Android

2017 4

  1. Surfacing Hidden Change to Pull Requests
  2. Generating Kotlin code with KotinPoet
  3. An Optional's place in Kotlin
  4. Square Open Source ♥s Kotlin

2016 3

  1. Web Sockets now shipping in OkHttp 3.5!
  2. Forcing bytes downward in Okio
  3. Just Say mNo to Hungarian Notation

2015 2

  1. Java Interoperability Policy for Major Version Updates
  2. SQLBrite: A reactive Database Foundation

2014 7

  1. Better Parameterized Tests with Burst
  2. The Conference Speaker Investment
  3. Coercing Picasso To Play With Palette
  4. Play Services 5.0 Is A Monolith Abomination
  5. Android Needs A Simulator, Not An Emulator
  6. Hello Picasso 2.3
  7. Dynamic Images with Thumbor

2013 5

  1. Enhance Your Application Using Picasso
  2. Easy HTTP Requests with Retrofit
  3. MimeCraft, JavaWriter, and ProtoParser
  4. Seven Days of Open Source
  5. The Resurrection of Testing for Android

2012 8

  1. Deprecated From Inception
  2. The Android Build System Is Broken
  3. Decoupling Android App Communication with Otto
  4. Using ActionBarSherlock As A Base
  5. Announcing ActionBarSherlock Version 4.0
  6. Advanced Pre-Honeycomb Animation with NineOldAndroids
  7. Something Beta This Way Comes!
  8. ActionBarSherlock - A Love Story (Part 3)

2011 2

  1. ActionBarSherlock - A Love Story (Part 2)
  2. ActionBarSherlock - A Love Story (Part 1)

Undated 2

  1. Mastodon
  2. Résumé