Posts

Showing posts from May, 2026

Fat AAR: Bundling Transitive Dependencies for Zero-Config Android SDK Consumers

Image
  Your SDK has 12 transitive dependencies. Your consumer’s build.gradle shouldn’t know about any of them. Why This Problem Is Uniquely Hard in KMP If you’re building a Kotlin Multiplatform SDK, you’re already dealing with complexity that traditional Android libraries never face. Your commonMain code compiles to both JVM bytecode (Android) and native binaries (iOS). On iOS, the XCFramework is self-contained - all Kotlin/Native dependencies compile into a single static binary. There's no "dependency resolution" on the Swift side. But on Android? You’re back in Gradle-land. Your KMP module produces a standard .aar , and every api() or implementation() dependency in your build.gradle.kts becomes a transitive edge in the consumer's dependency graph. The irony: the platform with the better tooling has the worse distribution story. This asymmetry is what makes Fat AAR essential for KMP SDK teams. iOS gets zero-config by default (static XCFramework). Android needs us to b...