Skip to content

Commit

Permalink
Make #456 more relevant by hacking AGP 8.1 due to removed internal APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
TWiStErRob committed Apr 12, 2023
1 parent 2ae742e commit 917026e
Showing 1 changed file with 29 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.android.build.gradle.AppExtension
import com.android.build.gradle.AppPlugin
import com.android.build.gradle.BaseExtension
import com.android.build.gradle.internal.dsl.DefaultConfig
import net.twisterrob.gradle.common.AGPVersions
import net.twisterrob.gradle.common.BasePlugin
import net.twisterrob.gradle.ext.zip
import net.twisterrob.gradle.internal.android.unwrapCast
Expand Down Expand Up @@ -208,7 +209,7 @@ class AndroidVersionPlugin : BasePlugin() {
}

private fun renameAPK(variant: ApplicationVariant) {
// TODO replace with new Variant API transformation.
// TODO replace with new Variant API transformation. https://github.com/TWiStErRob/net.twisterrob.gradle/issues/456
val variantOutput = variant.outputs.filterIsInstance<VariantOutputImpl>().single()
@Suppress("UNCHECKED_CAST")
val versionCode = variantOutput.versionCode.orElse(-1) as Provider<Int>
Expand All @@ -221,10 +222,33 @@ class AndroidVersionPlugin : BasePlugin() {

variant.androidTestCompat?.let { androidTest ->
val androidTestImpl = androidTest.unwrapCast<AndroidTest, AndroidTestImpl>()
val androidTestOutput = androidTestImpl.outputs.filterIsInstance<VariantOutputImpl>().single()
androidTestOutput.outputFileName.set(
androidTest.replacementApkNameProvider(versionCode, versionName)
)
when {
AGPVersions.v81x <= AGPVersions.CLASSPATH -> {
project.afterEvaluate {
val handler = androidTestImpl.taskContainer
.packageAndroidTask!!
.get()
.outputsHandler
.get()
handler::class.java
.getDeclaredField("singleOutputFileName")
.apply { isAccessible = true }
.set(handler, androidTest.replacementApkNameProvider(versionCode, versionName))
}
}
AGPVersions.v70x <= AGPVersions.CLASSPATH -> {
val androidTestOutput = com.android.build.api.component.impl.ComponentImpl::class.java
.getDeclaredMethod("getOutputs")
.invoke(androidTestImpl)
.let { @Suppress("UNCHECKED_CAST") (it as List<VariantOutputImpl>) }
.single()
androidTestOutput.outputFileName.set(
androidTest.replacementApkNameProvider(versionCode, versionName)
)
}
else -> AGPVersions.olderThan7NotSupported(AGPVersions.CLASSPATH)

}
}
}

Expand Down

0 comments on commit 917026e

Please sign in to comment.