summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Edgar <lukeedgar@google.com>2022-06-20 17:06:06 +0100
committerLuke Edgar <lukeedgar@google.com>2022-08-12 15:49:44 +0000
commit85fd94b00a0683d918639857264fd71e94243ce7 (patch)
treeeb70c154ebef90a8451bd0119e48c54b20fc7943
parentc1f35dfa2477e7004b600b7471b68e25184e0376 (diff)
downloadbase-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
-rw-r--r--build-system/gradle-core/src/main/java/com/android/build/gradle/internal/core/VariantDslInfoImpl.kt4
-rw-r--r--build-system/gradle-core/src/main/java/com/android/build/gradle/options/BooleanOption.kt1
-rw-r--r--build-system/integration-test/application/src/test/java/com/android/build/gradle/integration/application/NoCruncherTest.java5
-rw-r--r--build-system/integration-test/application/src/test/java/com/android/build/gradle/integration/application/ProfileableTest.kt22
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)
}