3.3 KiB
3.3 KiB
KMP AGP 9.0 Migration Verification Checklist
Use this checklist after migration to verify everything is configured correctly.
Plugin Configuration
com.android.kotlin.multiplatform.libraryplugin declared for KMP library modules- No
com.android.libraryorcom.android.applicationin KMP modules' build.gradle.kts org.jetbrains.kotlin.androidremoved from all build files and version catalog (built-in Kotlin replaces it)- No
org.jetbrains.kotlin.kaptplugin — migrated to KSP orcom.android.legacy-kapt android.kotlinOptions {}migrated tokotlin { compilerOptions {} }(non-KMP modules)kotlin.sourceSetsmigrated toandroid.sourceSetswith.kotlinaccessor (non-KMP modules)- No
android.builtInKotlin=falseunless required by incompatible plugin (documented as temporary) - Third-party plugins verified compatible
KMP Library Modules
- Source sets renamed:
androidMain,androidHostTest,androidDeviceTest - No
android {}top-level block — useandroidLibrary {}insidekotlin {}instead androidResources { enable = true }present if module uses Android or Compose Multiplatform resourceswithJava()present if module has .java source files- Tests configured:
withHostTest {},withDeviceTest {} - No
debugImplementationor analogs in library modules- use
androidRuntimeClasspathfor tooling deps - app modules can still use
debugImplementation
- use
- Unique
namespacefor each library module (different from app module;android.uniquePackageNames=trueis default in AGP 9.0)
Gradle Properties & DSL
- No removed properties in
gradle.propertiesthat cause errors:android.enableLegacyVariantApiandroid.r8.integratedResourceShrinkingandroid.enableNewResourceShrinker.preciseShrinking
- Any opt-out flags (
android.newDsl=false,android.builtInKotlin=false) documented with reason targetSdkexplicitly set in all app modules (defaults tocompileSdknow, wasminSdk)
Build Logic / Convention Plugins
- No references to
BaseExtension,AppExtension,LibraryExtension(removed in AGP 9.0) - Using
CommonExtensionor specific new DSL types - No use of removed APIs:
applicationVariants,libraryVariants,variantFilter
ProGuard / R8
- Consumer ProGuard rules migrated to
consumerProguardFiles.add(file(...))in new DSL - Using
proguard-android-optimize.txt(notproguard-android.txt) - No global options (
-dontobfuscate,-dontoptimize) in library consumer rules - Keep rules updated for R8 strict full mode (explicit default constructor rules if needed)
Build & Test Verification
./gradlew buildsucceeds./gradlew :androidApp:assembleDebugsucceeds (if app module exists)xcodebuild -project iosApp/*.xcodeproj -scheme <scheme> -sdk iphonesimulator buildsucceeds (if iOS app exists)- Desktop app compiles:
./gradlew :desktopApp:runor equivalent (if desktop target exists) - Web/Wasm target compiles:
./gradlew :wasmJsApp:wasmJsBrowserDistributionor equivalent (if web target exists) ./gradlew :shared:allTestssucceeds (or equivalent for KMP test tasks)./gradlew :androidApp:testDebugUnitTestsucceeds (if app module exists)- No deprecation warnings about variant API or DSL