Migrate to the Android Gradle Plugin's new variant APIs
AGP 4+ contains new APIs for accessing build variants (and the APKs produced for each of them), and the existing APIs have been deprecated.
The main differences appear to be:
com.android.build.gradle.api.TestVarianthas been replaced bycom.android.build.api.variant.AndroidTest.- Instead of using
com.android.build.gradle.AppExtensionandcom.android.build.gradle.TestedExtensionto access build variants, one needs to usecom.android.build.api.variant.ApplicationAndroidComponentsExtensionto accesscom.android.build.api.variant.ApplicationVariant, which has aandroidTest: AndroidTest?property for the corresponding instrumentation test variant. (Andcom.android.build.api.variant.LibraryAndroidComponentsExtensionto accesscom.android.build.api.variant.LibraryVariant.) ApplicationVariant,LibraryVariant, andAndroidTestexpose their outputs ascom.android.build.api.variant.VariantOutputs, but there's no longer a way to get the path to each APK output via that API. Instead, one has to use thecom.android.build.api.artifact.ArtifactsAPI to access aDirectoryPropertyfor the folder the APKs are placed in, and useBuiltArtifactsLoaderto access the outputs within a task action.- There's an example here: https://github.com/android/gradle-recipes/blob/agp-7.0/Kotlin/getApksTest/app/build.gradle.kts
I've taken a stab at the update here, but the BuiltArtifactsLoader change is a bit tricky: https://github.com/runningcode/fladle/compare/master...jschear:js/agp_7
Thanks for filing. This is a good idea. 👍 I'll try to take a look at your solution soon.
👋🏾 @runningcode Curious if there is an ETA on this migration? If you are super swamped @jschear and I might look into making this one happen. Let us know whenever you get a chance 😃
Hey, sorry there's no ETA on this. Sorry I haven't got a chance to look at it. October is a busy month for me but perhaps later I will be able to take a look at it. Feel free to contribute or pick up the PR.
Sounds good -- thanks for the update. We've been looking at making some other changes (in short: our app uses ABI splits, which fladle/fulladle doesn't handle right now), and were having trouble deciding between implementing them using the old AGP APIs, or upgrading to the new APIs first.