Add ability to set --rotation-min-sdk-version for signapk.
Bug: 197787352
Test: m signapk
Change-Id: I3b5e9bb3985c2ae83381499a44b339a7b1deb05c
diff --git a/core/app_prebuilt_internal.mk b/core/app_prebuilt_internal.mk
index 79639a8..f5d213e 100644
--- a/core/app_prebuilt_internal.mk
+++ b/core/app_prebuilt_internal.mk
@@ -142,6 +142,9 @@
$(built_module): $(LOCAL_CERTIFICATE_LINEAGE)
$(built_module): PRIVATE_CERTIFICATE_LINEAGE := $(LOCAL_CERTIFICATE_LINEAGE)
+
+ $(built_module): $(LOCAL_ROTATION_MIN_SDK_VERSION)
+ $(built_module): PRIVATE_ROTATION_MIN_SDK_VERSION := $(LOCAL_ROTATION_MIN_SDK_VERSION)
endif
ifneq ($(LOCAL_MODULE_STEM),)
diff --git a/core/clear_vars.mk b/core/clear_vars.mk
index a67cca6..2ed7b85 100644
--- a/core/clear_vars.mk
+++ b/core/clear_vars.mk
@@ -263,6 +263,7 @@
LOCAL_RESOURCE_DIR:=
LOCAL_RLIB_LIBRARIES:=
LOCAL_RMTYPEDEFS:=
+LOCAL_ROTATION_MIN_SDK_VERSION:=
LOCAL_RRO_THEME:=
LOCAL_RTTI_FLAG:=
LOCAL_SANITIZE:=
diff --git a/core/definitions.mk b/core/definitions.mk
index c7172ca..00bd336 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -2351,6 +2351,7 @@
$(hide) mv $(1) $(1).unsigned
$(hide) $(JAVA) -Djava.library.path=$$(dirname $(SIGNAPK_JNI_LIBRARY_PATH)) -jar $(SIGNAPK_JAR) \
$(if $(strip $(PRIVATE_CERTIFICATE_LINEAGE)), --lineage $(PRIVATE_CERTIFICATE_LINEAGE)) \
+ $(if $(strip $(PRIVATE_ROTATION_MIN_SDK_VERSION)), --rotation-min-sdk-version $(PRIVATE_ROTATION_MIN_SDK_VERSION)) \
$(PRIVATE_CERTIFICATE) $(PRIVATE_PRIVATE_KEY) \
$(PRIVATE_ADDITIONAL_CERTIFICATES) $(1).unsigned $(1).signed
$(hide) mv $(1).signed $(1)
diff --git a/core/package_internal.mk b/core/package_internal.mk
index 9f5a599..730395c 100644
--- a/core/package_internal.mk
+++ b/core/package_internal.mk
@@ -469,6 +469,9 @@
$(LOCAL_BUILT_MODULE): $(LOCAL_CERTIFICATE_LINEAGE)
$(LOCAL_BUILT_MODULE): PRIVATE_CERTIFICATE_LINEAGE := $(LOCAL_CERTIFICATE_LINEAGE)
+$(LOCAL_BUILT_MODULE): $(LOCAL_ROTATION_MIN_SDK_VERSION)
+$(LOCAL_BUILT_MODULE): PRIVATE_ROTATION_MIN_SDK_VERSION := $(LOCAL_ROTATION_MIN_SDK_VERSION)
+
# Set a actual_partition_tag (calculated in base_rules.mk) for the package.
PACKAGES.$(LOCAL_PACKAGE_NAME).PARTITION := $(actual_partition_tag)
diff --git a/tools/signapk/src/com/android/signapk/SignApk.java b/tools/signapk/src/com/android/signapk/SignApk.java
index 8bf1005..ec55a2c 100644
--- a/tools/signapk/src/com/android/signapk/SignApk.java
+++ b/tools/signapk/src/com/android/signapk/SignApk.java
@@ -1050,6 +1050,7 @@
boolean signUsingApkSignatureSchemeV2 = true;
boolean signUsingApkSignatureSchemeV4 = false;
SigningCertificateLineage certLineage = null;
+ Integer rotationMinSdkVersion = null;
int argstart = 0;
while (argstart < args.length && args[argstart].startsWith("-")) {
@@ -1092,6 +1093,15 @@
"Error reading lineage file: " + e.getMessage());
}
++argstart;
+ } else if ("--rotation-min-sdk-version".equals(args[argstart])) {
+ String rotationMinSdkVersionString = args[++argstart];
+ try {
+ rotationMinSdkVersion = Integer.parseInt(rotationMinSdkVersionString);
+ } catch (NumberFormatException e) {
+ throw new IllegalArgumentException(
+ "--rotation-min-sdk-version must be a decimal number: " + rotationMinSdkVersionString);
+ }
+ ++argstart;
} else {
usage();
}
@@ -1175,15 +1185,22 @@
}
}
- try (ApkSignerEngine apkSigner =
- new DefaultApkSignerEngine.Builder(
- createSignerConfigs(privateKey, publicKey), minSdkVersion)
- .setV1SigningEnabled(true)
- .setV2SigningEnabled(signUsingApkSignatureSchemeV2)
- .setOtherSignersSignaturesPreserved(false)
- .setCreatedBy("1.0 (Android SignApk)")
- .setSigningCertificateLineage(certLineage)
- .build()) {
+ DefaultApkSignerEngine.Builder builder = new DefaultApkSignerEngine.Builder(
+ createSignerConfigs(privateKey, publicKey), minSdkVersion)
+ .setV1SigningEnabled(true)
+ .setV2SigningEnabled(signUsingApkSignatureSchemeV2)
+ .setOtherSignersSignaturesPreserved(false)
+ .setCreatedBy("1.0 (Android SignApk)");
+
+ if (certLineage != null) {
+ builder = builder.setSigningCertificateLineage(certLineage);
+ }
+
+ if (rotationMinSdkVersion != null) {
+ builder = builder.setMinSdkVersionForRotation(rotationMinSdkVersion);
+ }
+
+ try (ApkSignerEngine apkSigner = builder.build()) {
// We don't preserve the input APK's APK Signing Block (which contains v2
// signatures)
apkSigner.inputApkSigningBlock(null);