diff options
author | Luke Edgar <lukeedgar@google.com> | 2022-06-20 17:06:06 +0100 |
---|---|---|
committer | Luke Edgar <lukeedgar@google.com> | 2022-08-12 15:49:44 +0000 |
commit | 85fd94b00a0683d918639857264fd71e94243ce7 (patch) | |
tree | eb70c154ebef90a8451bd0119e48c54b20fc7943 | |
parent | c1f35dfa2477e7004b600b7471b68e25184e0376 (diff) | |
download | base-85fd94b00a0683d918639857264fd71e94243ce7.tar.gz |
Add -Pandroid.experimental.enableDefaultDebugSigningConfig
Adds new BooleanOption for controling automaticly assigning a debug
signing config for build types without a signing config.
Test: ProfilingMode
Bug: 236351248
Change-Id: Ic66bb8abc0549f74a039abb429cbf880e7b80d4e
4 files changed, 23 insertions, 9 deletions
diff --git a/build-system/gradle-core/src/main/java/com/android/build/gradle/internal/core/VariantDslInfoImpl.kt b/build-system/gradle-core/src/main/java/com/android/build/gradle/internal/core/VariantDslInfoImpl.kt index 742cd5567f..76645719ba 100644 --- a/build-system/gradle-core/src/main/java/com/android/build/gradle/internal/core/VariantDslInfoImpl.kt +++ b/build-system/gradle-core/src/main/java/com/android/build/gradle/internal/core/VariantDslInfoImpl.kt @@ -56,6 +56,7 @@ import com.android.build.gradle.internal.publishing.VariantPublishingInfo import com.android.build.gradle.internal.services.DslServices import com.android.build.gradle.internal.services.VariantServices import com.android.build.gradle.internal.testFixtures.testFixturesFeatureName +import com.android.build.gradle.options.BooleanOption import com.android.build.gradle.options.IntegerOption import com.android.build.gradle.options.StringOption import com.android.build.gradle.options.Version @@ -713,7 +714,8 @@ open class VariantDslInfoImpl internal constructor( it.enableV4Signing = dslSigningConfig?.enableV4Signing return it } - if (dslSigningConfig == null && (isProfileable || isDebuggable)) { + if (services.projectOptions[BooleanOption.ENABLE_DEFAULT_DEBUG_SIGNING_CONFIG] && + dslSigningConfig == null && (isProfileable || isDebuggable)) { return extension.signingConfigs.findByName(BuilderConstants.DEBUG) as SigningConfig? } return dslSigningConfig as SigningConfig? diff --git a/build-system/gradle-core/src/main/java/com/android/build/gradle/options/BooleanOption.kt b/build-system/gradle-core/src/main/java/com/android/build/gradle/options/BooleanOption.kt index 1928fa5864..ae4c72e334 100644 --- a/build-system/gradle-core/src/main/java/com/android/build/gradle/options/BooleanOption.kt +++ b/build-system/gradle-core/src/main/java/com/android/build/gradle/options/BooleanOption.kt @@ -117,6 +117,7 @@ enum class BooleanOption( */ BUILD_FEATURE_MLMODELBINDING("android.defaults.buildfeatures.mlmodelbinding", false, ApiStage.Experimental), + ENABLE_DEFAULT_DEBUG_SIGNING_CONFIG("android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes", false, ApiStage.Experimental), ENABLE_PROFILE_JSON("android.enableProfileJson", false, FeatureStage.Experimental), DISALLOW_DEPENDENCY_RESOLUTION_AT_CONFIGURATION("android.dependencyResolutionAtConfigurationTime.disallow", false, FeatureStage.Experimental), ENABLE_TEST_SHARDING("android.androidTest.shardBetweenDevices", false, FeatureStage.Experimental), diff --git a/build-system/integration-test/application/src/test/java/com/android/build/gradle/integration/application/NoCruncherTest.java b/build-system/integration-test/application/src/test/java/com/android/build/gradle/integration/application/NoCruncherTest.java index df401c3cf5..deaaee215a 100644 --- a/build-system/integration-test/application/src/test/java/com/android/build/gradle/integration/application/NoCruncherTest.java +++ b/build-system/integration-test/application/src/test/java/com/android/build/gradle/integration/application/NoCruncherTest.java @@ -20,7 +20,6 @@ import static com.android.testutils.truth.PathSubject.assertThat; import static com.google.common.truth.Truth.assertThat; import com.android.annotations.NonNull; -import com.android.build.gradle.integration.common.fixture.BaseGradleExecutor; import com.android.build.gradle.integration.common.fixture.GradleTestProject; import com.android.build.gradle.integration.common.fixture.GradleTestProject.ApkType; import com.android.build.gradle.integration.common.fixture.TemporaryProjectModification; @@ -79,7 +78,7 @@ public class NoCruncherTest { checkResource(ApkType.RELEASE, "drawable/icon.png", true); } // QA is debuggable, but inits from release, so the cruncher is default enabled. - checkResource(ApkType.of("qa", true), "drawable/icon.png", true); + checkResource(ApkType.of("qa", false), "drawable/icon.png", true); }); } @@ -95,7 +94,7 @@ public class NoCruncherTest { projectModification.replaceInFile( "build.gradle", "// crunchPngs false", "crunchPngs false"); noPngCrunch.executor().run("assembleQa"); - checkResource(ApkType.of("qa", true), "drawable/icon.png", false); + checkResource(ApkType.of("qa", false), "drawable/icon.png", false); }); } diff --git a/build-system/integration-test/application/src/test/java/com/android/build/gradle/integration/application/ProfileableTest.kt b/build-system/integration-test/application/src/test/java/com/android/build/gradle/integration/application/ProfileableTest.kt index 808f50e32c..30489aa17c 100644 --- a/build-system/integration-test/application/src/test/java/com/android/build/gradle/integration/application/ProfileableTest.kt +++ b/build-system/integration-test/application/src/test/java/com/android/build/gradle/integration/application/ProfileableTest.kt @@ -16,6 +16,7 @@ package com.android.build.gradle.integration.application +import com.android.apksig.ApkVerifier import com.android.build.gradle.integration.common.fixture.DEFAULT_COMPILE_SDK_VERSION import com.android.build.gradle.integration.common.fixture.GradleTestProject import com.android.build.gradle.integration.common.fixture.app.MinimalSubProject @@ -25,6 +26,7 @@ import com.android.build.gradle.integration.common.truth.ScannerSubject import com.android.build.gradle.integration.common.truth.TruthHelper.assertThat import com.android.build.gradle.integration.common.utils.SigningHelper import com.android.build.gradle.integration.common.utils.TestFileUtils +import com.android.build.gradle.options.BooleanOption import com.android.build.gradle.options.StringOption import org.junit.Rule import org.junit.Test @@ -50,14 +52,16 @@ class ProfileableTest { fun `test dsl setting the release build type to be profileable`() { val app = project.getSubproject(":app") app.buildFile.appendText("android.buildTypes.release.profileable true") - project.executor().run("assembleRelease") - val apkType = GradleTestProject.ApkType.RELEASE_SIGNED - val apk = project.getSubproject("app").getApk(apkType) - val verificationResult = SigningHelper.assertApkSignaturesVerify(apk, 30) + project.executor() + .with(BooleanOption.ENABLE_DEFAULT_DEBUG_SIGNING_CONFIG, true) + .run("assembleRelease") + val apkSigned = + project.getSubproject("app").getApk(GradleTestProject.ApkType.RELEASE_SIGNED) + val verificationResult = SigningHelper.assertApkSignaturesVerify(apkSigned, 30) assertThat( verificationResult.signerCertificates.first().subjectX500Principal.name ).isEqualTo("C=US,O=Android,CN=Android Debug") - val manifest = ApkSubject.getManifestContent(apk.file.toAbsolutePath()) + val manifest = ApkSubject.getManifestContent(apkSigned.file.toAbsolutePath()) assertThat(manifest).containsAtLeastElementsIn( arrayListOf( " E: application (line=11)", @@ -66,6 +70,13 @@ class ProfileableTest { " A: http://schemas.android.com/apk/res/android:shell(0x01010594)=true" ) ) + + // Test no signing config configured, if the automatic signing config assignment is disabled. + project.executor().with(BooleanOption.ENABLE_DEFAULT_DEBUG_SIGNING_CONFIG, false) + .run("clean", "assembleRelease") + val apkUnsigned = + project.getSubproject("app").getApk(GradleTestProject.ApkType.RELEASE) + ApkSubject.assertThat(apkUnsigned).doesNotContainApkSigningBlock() } @Test @@ -108,6 +119,7 @@ class ProfileableTest { val app = project.getSubproject(":app") project.executor() .with(StringOption.PROFILING_MODE, "profileable") + .with(BooleanOption.ENABLE_DEFAULT_DEBUG_SIGNING_CONFIG, true) .run("assembleRelease") checkProjectContainsProfileableInManifest(app, GradleTestProject.ApkType.RELEASE_SIGNED) } |