aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Groover <mpgroover@google.com>2023-11-23 02:54:58 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-11-23 02:54:58 +0000
commit02aa49ee9af2ccc051f24314909d7a52f3ca583e (patch)
tree6d4a2688ae3d6bca3e0e34fce5331edaf04a4f65
parenta7287952fe793dd12aa206e69c2b77ca443eeebf (diff)
parent24e3075e68ebe17c0b529bb24bfda819db5e2f3b (diff)
downloadapksig-02aa49ee9af2ccc051f24314909d7a52f3ca583e.tar.gz
Set defaults to align native libraries to 16k am: 8b0c79d9ab am: 24e3075e68
Original change: https://android-review.googlesource.com/c/platform/tools/apksig/+/2844353 Change-Id: Id03b5684fdde12ed546a9a662658f9aef7ba763d Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--src/apksigner/java/com/android/apksigner/ApkSignerTool.java13
-rw-r--r--src/apksigner/java/com/android/apksigner/help_sign.txt10
-rw-r--r--src/main/java/com/android/apksig/ApkSigner.java49
-rw-r--r--src/main/java/com/android/apksig/Constants.java5
-rw-r--r--src/test/java/com/android/apksig/ApkSignerTest.java122
5 files changed, 151 insertions, 48 deletions
diff --git a/src/apksigner/java/com/android/apksigner/ApkSignerTool.java b/src/apksigner/java/com/android/apksigner/ApkSignerTool.java
index ff64b1c..aa20682 100644
--- a/src/apksigner/java/com/android/apksigner/ApkSignerTool.java
+++ b/src/apksigner/java/com/android/apksigner/ApkSignerTool.java
@@ -16,6 +16,8 @@
package com.android.apksigner;
+import static com.android.apksig.Constants.LIBRARY_PAGE_ALIGNMENT_BYTES;
+
import com.android.apksig.ApkSigner;
import com.android.apksig.ApkVerifier;
import com.android.apksig.SigningCertificateLineage;
@@ -150,6 +152,8 @@ public class ApkSignerTool {
boolean alignFileSize = false;
boolean verityEnabled = false;
boolean debuggableApkPermitted = true;
+ boolean alignmentPreserved = false;
+ int libPageAlignment = LIBRARY_PAGE_ALIGNMENT_BYTES;
int minSdkVersion = 1;
boolean minSdkVersionSpecified = false;
int maxSdkVersion = Integer.MAX_VALUE;
@@ -208,6 +212,11 @@ public class ApkSignerTool {
verityEnabled = optionsParser.getOptionalBooleanValue(true);
} else if ("debuggable-apk-permitted".equals(optionName)) {
debuggableApkPermitted = optionsParser.getOptionalBooleanValue(true);
+ } else if ("alignment-preserved".equals(optionName)) {
+ alignmentPreserved = optionsParser.getOptionalBooleanValue(true);
+ } else if ("lib-page-alignment".equals(optionName)) {
+ libPageAlignment = optionsParser.getRequiredIntValue(
+ "Native library page alignment size in bytes");
} else if ("next-signer".equals(optionName)) {
if (!signerParams.isEmpty()) {
signers.add(signerParams);
@@ -395,7 +404,9 @@ public class ApkSignerTool {
.setDebuggableApkPermitted(debuggableApkPermitted)
.setSigningCertificateLineage(lineage)
.setMinSdkVersionForRotation(rotationMinSdkVersion)
- .setRotationTargetsDevRelease(rotationTargetsDevRelease);
+ .setRotationTargetsDevRelease(rotationTargetsDevRelease)
+ .setAlignmentPreserved(alignmentPreserved)
+ .setLibraryPageAlignmentBytes(libPageAlignment);
if (minSdkVersionSpecified) {
apkSignerBuilder.setMinSdkVersion(minSdkVersion);
}
diff --git a/src/apksigner/java/com/android/apksigner/help_sign.txt b/src/apksigner/java/com/android/apksigner/help_sign.txt
index a116be6..6c1aa6a 100644
--- a/src/apksigner/java/com/android/apksigner/help_sign.txt
+++ b/src/apksigner/java/com/android/apksigner/help_sign.txt
@@ -92,6 +92,16 @@ certificate.
By default, signing debuggable APKs is permitted, for
backward compatibility with older apksigner versions.
+--alignment-preserved Whether the existing alignment within the APK should
+ be preserved; the default for this setting is false.
+ When this value is false, the value provided to
+ --lib-page-alignment will be used to page align native
+ library files and all other files will be aligned to 4
+ bytes in the APK.
+
+--lib-page-alignment The number of bytes to be used to page align native
+ library files in the APK; the default value is 16384.
+
--lineage Signing certificate history to use in the event that
signing certificates changed for an APK using APK
Signature Scheme v3 supported signing certificate
diff --git a/src/main/java/com/android/apksig/ApkSigner.java b/src/main/java/com/android/apksig/ApkSigner.java
index 60c18d4..49796a3 100644
--- a/src/main/java/com/android/apksig/ApkSigner.java
+++ b/src/main/java/com/android/apksig/ApkSigner.java
@@ -16,6 +16,7 @@
package com.android.apksig;
+import static com.android.apksig.Constants.LIBRARY_PAGE_ALIGNMENT_BYTES;
import static com.android.apksig.apk.ApkUtils.SOURCE_STAMP_CERTIFICATE_HASH_ZIP_ENTRY_NAME;
import static com.android.apksig.internal.apk.v3.V3SchemeConstants.MIN_SDK_WITH_V31_SUPPORT;
import static com.android.apksig.internal.apk.v3.V3SchemeConstants.MIN_SDK_WITH_V3_SUPPORT;
@@ -83,8 +84,6 @@ public class ApkSigner {
*/
private static final short ALIGNMENT_ZIP_EXTRA_DATA_FIELD_MIN_SIZE_BYTES = 6;
- private static final short ANDROID_COMMON_PAGE_ALIGNMENT_BYTES = 4096;
-
private static final short ANDROID_FILE_ALIGNMENT_BYTES = 4096;
/** Name of the Android manifest ZIP entry in APKs. */
@@ -107,6 +106,8 @@ public class ApkSigner {
private final boolean mV4ErrorReportingEnabled;
private final boolean mDebuggableApkPermitted;
private final boolean mOtherSignersSignaturesPreserved;
+ private final boolean mAlignmentPreserved;
+ private final int mLibraryPageAlignmentBytes;
private final String mCreatedBy;
private final ApkSignerEngine mSignerEngine;
@@ -140,6 +141,8 @@ public class ApkSigner {
boolean v4ErrorReportingEnabled,
boolean debuggableApkPermitted,
boolean otherSignersSignaturesPreserved,
+ boolean alignmentPreserved,
+ int libraryPageAlignmentBytes,
String createdBy,
ApkSignerEngine signerEngine,
File inputApkFile,
@@ -167,6 +170,8 @@ public class ApkSigner {
mV4ErrorReportingEnabled = v4ErrorReportingEnabled;
mDebuggableApkPermitted = debuggableApkPermitted;
mOtherSignersSignaturesPreserved = otherSignersSignaturesPreserved;
+ mAlignmentPreserved = alignmentPreserved;
+ mLibraryPageAlignmentBytes = libraryPageAlignmentBytes;
mCreatedBy = createdBy;
mSignerEngine = signerEngine;
@@ -445,7 +450,7 @@ public class ApkSigner {
// Output entry's Local File Header + data
long outputLocalFileHeaderOffset = outputOffset;
OutputSizeAndDataOffset outputLfrResult =
- outputInputJarEntryLfhRecordPreservingDataAlignment(
+ outputInputJarEntryLfhRecord(
inputApkLfhSection,
inputLocalFileRecord,
outputApkOut,
@@ -744,14 +749,14 @@ public class ApkSigner {
}
}
- private static OutputSizeAndDataOffset outputInputJarEntryLfhRecordPreservingDataAlignment(
+ private OutputSizeAndDataOffset outputInputJarEntryLfhRecord(
DataSource inputLfhSection,
LocalFileRecord inputRecord,
DataSink outputLfhSection,
long outputOffset)
throws IOException {
long inputOffset = inputRecord.getStartOffsetInArchive();
- if (inputOffset == outputOffset) {
+ if (inputOffset == outputOffset && mAlignmentPreserved) {
// This record's data will be aligned same as in the input APK.
return new OutputSizeAndDataOffset(
inputRecord.outputRecord(inputLfhSection, outputLfhSection),
@@ -759,8 +764,8 @@ public class ApkSigner {
}
int dataAlignmentMultiple = getInputJarEntryDataAlignmentMultiple(inputRecord);
if ((dataAlignmentMultiple <= 1)
- || ((inputOffset % dataAlignmentMultiple)
- == (outputOffset % dataAlignmentMultiple))) {
+ || ((inputOffset % dataAlignmentMultiple) == (outputOffset % dataAlignmentMultiple)
+ && mAlignmentPreserved)) {
// This record's data will be aligned same as in the input APK.
return new OutputSizeAndDataOffset(
inputRecord.outputRecord(inputLfhSection, outputLfhSection),
@@ -768,7 +773,7 @@ public class ApkSigner {
}
long inputDataStartOffset = inputOffset + inputRecord.getDataStartOffsetInRecord();
- if ((inputDataStartOffset % dataAlignmentMultiple) != 0) {
+ if ((inputDataStartOffset % dataAlignmentMultiple) != 0 && mAlignmentPreserved) {
// This record's data is not aligned in the input APK. No need to align it in the
// output.
return new OutputSizeAndDataOffset(
@@ -793,7 +798,7 @@ public class ApkSigner {
dataOffset);
}
- private static int getInputJarEntryDataAlignmentMultiple(LocalFileRecord entry) {
+ private int getInputJarEntryDataAlignmentMultiple(LocalFileRecord entry) {
if (entry.isDataCompressed()) {
// Compressed entries don't need to be aligned
return 1;
@@ -833,7 +838,7 @@ public class ApkSigner {
}
// Fall back to filename-based defaults
- return (entry.getName().endsWith(".so")) ? ANDROID_COMMON_PAGE_ALIGNMENT_BYTES : 4;
+ return (entry.getName().endsWith(".so")) ? mLibraryPageAlignmentBytes : 4;
}
private static ByteBuffer createExtraFieldToAlignData(
@@ -1221,6 +1226,8 @@ public class ApkSigner {
private boolean mV4ErrorReportingEnabled = false;
private boolean mDebuggableApkPermitted = true;
private boolean mOtherSignersSignaturesPreserved;
+ private boolean mAlignmentPreserved = false;
+ private int mLibraryPageAlignmentBytes = LIBRARY_PAGE_ALIGNMENT_BYTES;
private String mCreatedBy;
private Integer mMinSdkVersion;
private int mRotationMinSdkVersion = V3SchemeConstants.DEFAULT_ROTATION_MIN_SDK_VERSION;
@@ -1708,6 +1715,26 @@ public class ApkSigner {
}
/**
+ * Sets whether the existing alignment within the APK should be preserved; the
+ * default for this setting is false. When this value is false, the value provided to
+ * {@link #setLibraryPageAlignmentBytes(int)} will be used to page align native library
+ * files and 4 bytes will be used to align all other uncompressed files.
+ */
+ public Builder setAlignmentPreserved(boolean alignmentPreserved) {
+ mAlignmentPreserved = alignmentPreserved;
+ return this;
+ }
+
+ /**
+ * Sets the number of bytes to be used to page align native library files in the APK; the
+ * default for this setting is {@link Constants#LIBRARY_PAGE_ALIGNMENT_BYTES}.
+ */
+ public Builder setLibraryPageAlignmentBytes(int libraryPageAlignmentBytes) {
+ mLibraryPageAlignmentBytes = libraryPageAlignmentBytes;
+ return this;
+ }
+
+ /**
* Returns a new {@code ApkSigner} instance initialized according to the configuration of
* this builder.
*/
@@ -1758,6 +1785,8 @@ public class ApkSigner {
mV4ErrorReportingEnabled,
mDebuggableApkPermitted,
mOtherSignersSignaturesPreserved,
+ mAlignmentPreserved,
+ mLibraryPageAlignmentBytes,
mCreatedBy,
mSignerEngine,
mInputApkFile,
diff --git a/src/main/java/com/android/apksig/Constants.java b/src/main/java/com/android/apksig/Constants.java
index aedb352..dd33028 100644
--- a/src/main/java/com/android/apksig/Constants.java
+++ b/src/main/java/com/android/apksig/Constants.java
@@ -40,6 +40,11 @@ public class Constants {
*/
public static final int MAX_APK_SIGNERS = 10;
+ /**
+ * The default page alignment for native library files in bytes.
+ */
+ public static final short LIBRARY_PAGE_ALIGNMENT_BYTES = 16384;
+
public static final String MANIFEST_ENTRY_NAME = V1SchemeConstants.MANIFEST_ENTRY_NAME;
public static final int APK_SIGNATURE_SCHEME_V2_BLOCK_ID =
diff --git a/src/test/java/com/android/apksig/ApkSignerTest.java b/src/test/java/com/android/apksig/ApkSignerTest.java
index ecf177b..0b6702a 100644
--- a/src/test/java/com/android/apksig/ApkSignerTest.java
+++ b/src/test/java/com/android/apksig/ApkSignerTest.java
@@ -468,7 +468,8 @@ public class ApkSignerTest {
assertGolden(
"golden-unaligned-in.apk",
"golden-unaligned-out.apk",
- new ApkSigner.Builder(rsa2048SignerConfig));
+ new ApkSigner.Builder(rsa2048SignerConfig)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-unaligned-in.apk",
"golden-unaligned-v1-out.apk",
@@ -476,21 +477,24 @@ public class ApkSignerTest {
.setV1SigningEnabled(true)
.setV2SigningEnabled(false)
.setV3SigningEnabled(false)
- .setV4SigningEnabled(false));
+ .setV4SigningEnabled(false)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-unaligned-in.apk",
"golden-unaligned-v2-out.apk",
new ApkSigner.Builder(rsa2048SignerConfig)
.setV1SigningEnabled(false)
.setV2SigningEnabled(true)
- .setV3SigningEnabled(false));
+ .setV3SigningEnabled(false)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-unaligned-in.apk",
"golden-unaligned-v3-out.apk",
new ApkSigner.Builder(rsa2048SignerConfig)
.setV1SigningEnabled(false)
.setV2SigningEnabled(false)
- .setV3SigningEnabled(true));
+ .setV3SigningEnabled(true)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-unaligned-in.apk",
"golden-unaligned-v3-lineage-out.apk",
@@ -499,21 +503,24 @@ public class ApkSignerTest {
.setV2SigningEnabled(false)
.setV3SigningEnabled(true)
.setMinSdkVersionForRotation(AndroidSdkVersion.P)
- .setSigningCertificateLineage(lineage));
+ .setSigningCertificateLineage(lineage)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-unaligned-in.apk",
"golden-unaligned-v1v2-out.apk",
new ApkSigner.Builder(rsa2048SignerConfig)
.setV1SigningEnabled(true)
.setV2SigningEnabled(true)
- .setV3SigningEnabled(false));
+ .setV3SigningEnabled(false)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-unaligned-in.apk",
"golden-unaligned-v2v3-out.apk",
new ApkSigner.Builder(rsa2048SignerConfig)
.setV1SigningEnabled(false)
.setV2SigningEnabled(true)
- .setV3SigningEnabled(true));
+ .setV3SigningEnabled(true)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-unaligned-in.apk",
"golden-unaligned-v2v3-lineage-out.apk",
@@ -522,14 +529,16 @@ public class ApkSignerTest {
.setV2SigningEnabled(true)
.setV3SigningEnabled(true)
.setMinSdkVersionForRotation(AndroidSdkVersion.P)
- .setSigningCertificateLineage(lineage));
+ .setSigningCertificateLineage(lineage)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-unaligned-in.apk",
"golden-unaligned-v1v2v3-out.apk",
new ApkSigner.Builder(rsa2048SignerConfig)
.setV1SigningEnabled(true)
.setV2SigningEnabled(true)
- .setV3SigningEnabled(true));
+ .setV3SigningEnabled(true)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-unaligned-in.apk",
"golden-unaligned-v1v2v3-lineage-out.apk",
@@ -538,7 +547,8 @@ public class ApkSignerTest {
.setV2SigningEnabled(true)
.setV3SigningEnabled(true)
.setMinSdkVersionForRotation(AndroidSdkVersion.P)
- .setSigningCertificateLineage(lineage));
+ .setSigningCertificateLineage(lineage)
+ .setAlignmentPreserved(true));
// Uncompressed entries in this input file are aligned by zero-padding the "extra" field, as
// performed by zipalign at the time of writing. This padding technique produces ZIP
@@ -547,7 +557,9 @@ public class ApkSignerTest {
assertGolden(
"golden-legacy-aligned-in.apk",
"golden-legacy-aligned-out.apk",
- new ApkSigner.Builder(rsa2048SignerConfig));
+ new ApkSigner.Builder(rsa2048SignerConfig)
+ .setLibraryPageAlignmentBytes(4096)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-legacy-aligned-in.apk",
"golden-legacy-aligned-v1-out.apk",
@@ -555,21 +567,27 @@ public class ApkSignerTest {
.setV1SigningEnabled(true)
.setV2SigningEnabled(false)
.setV3SigningEnabled(false)
- .setV4SigningEnabled(false));
+ .setV4SigningEnabled(false)
+ .setLibraryPageAlignmentBytes(4096)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-legacy-aligned-in.apk",
"golden-legacy-aligned-v2-out.apk",
new ApkSigner.Builder(rsa2048SignerConfig)
.setV1SigningEnabled(false)
.setV2SigningEnabled(true)
- .setV3SigningEnabled(false));
+ .setV3SigningEnabled(false)
+ .setLibraryPageAlignmentBytes(4096)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-legacy-aligned-in.apk",
"golden-legacy-aligned-v3-out.apk",
new ApkSigner.Builder(rsa2048SignerConfig)
.setV1SigningEnabled(false)
.setV2SigningEnabled(false)
- .setV3SigningEnabled(true));
+ .setV3SigningEnabled(true)
+ .setLibraryPageAlignmentBytes(4096)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-legacy-aligned-in.apk",
"golden-legacy-aligned-v3-lineage-out.apk",
@@ -578,21 +596,27 @@ public class ApkSignerTest {
.setV2SigningEnabled(false)
.setV3SigningEnabled(true)
.setMinSdkVersionForRotation(AndroidSdkVersion.P)
- .setSigningCertificateLineage(lineage));
+ .setSigningCertificateLineage(lineage)
+ .setLibraryPageAlignmentBytes(4096)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-legacy-aligned-in.apk",
"golden-legacy-aligned-v1v2-out.apk",
new ApkSigner.Builder(rsa2048SignerConfig)
.setV1SigningEnabled(true)
.setV2SigningEnabled(true)
- .setV3SigningEnabled(false));
+ .setV3SigningEnabled(false)
+ .setLibraryPageAlignmentBytes(4096)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-legacy-aligned-in.apk",
"golden-legacy-aligned-v2v3-out.apk",
new ApkSigner.Builder(rsa2048SignerConfig)
.setV1SigningEnabled(false)
.setV2SigningEnabled(true)
- .setV3SigningEnabled(true));
+ .setV3SigningEnabled(true)
+ .setLibraryPageAlignmentBytes(4096)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-legacy-aligned-in.apk",
"golden-legacy-aligned-v2v3-lineage-out.apk",
@@ -601,14 +625,18 @@ public class ApkSignerTest {
.setV2SigningEnabled(true)
.setV3SigningEnabled(true)
.setMinSdkVersionForRotation(AndroidSdkVersion.P)
- .setSigningCertificateLineage(lineage));
+ .setSigningCertificateLineage(lineage)
+ .setLibraryPageAlignmentBytes(4096)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-legacy-aligned-in.apk",
"golden-legacy-aligned-v1v2v3-out.apk",
new ApkSigner.Builder(rsa2048SignerConfig)
.setV1SigningEnabled(true)
.setV2SigningEnabled(true)
- .setV3SigningEnabled(true));
+ .setV3SigningEnabled(true)
+ .setLibraryPageAlignmentBytes(4096)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-legacy-aligned-in.apk",
"golden-legacy-aligned-v1v2v3-lineage-out.apk",
@@ -617,7 +645,9 @@ public class ApkSignerTest {
.setV2SigningEnabled(true)
.setV3SigningEnabled(true)
.setMinSdkVersionForRotation(AndroidSdkVersion.P)
- .setSigningCertificateLineage(lineage));
+ .setSigningCertificateLineage(lineage)
+ .setLibraryPageAlignmentBytes(4096)
+ .setAlignmentPreserved(true));
// Uncompressed entries in this input file are aligned by padding the "extra" field, as
// generated by signapk and apksigner. This padding technique produces "extra" fields which
@@ -625,7 +655,8 @@ public class ApkSignerTest {
assertGolden(
"golden-aligned-in.apk",
"golden-aligned-out.apk",
- new ApkSigner.Builder(rsa2048SignerConfig));
+ new ApkSigner.Builder(rsa2048SignerConfig)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-aligned-in.apk",
"golden-aligned-v1-out.apk",
@@ -633,21 +664,24 @@ public class ApkSignerTest {
.setV1SigningEnabled(true)
.setV2SigningEnabled(false)
.setV3SigningEnabled(false)
- .setV4SigningEnabled(false));
+ .setV4SigningEnabled(false)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-aligned-in.apk",
"golden-aligned-v2-out.apk",
new ApkSigner.Builder(rsa2048SignerConfig)
.setV1SigningEnabled(false)
.setV2SigningEnabled(true)
- .setV3SigningEnabled(false));
+ .setV3SigningEnabled(false)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-aligned-in.apk",
"golden-aligned-v3-out.apk",
new ApkSigner.Builder(rsa2048SignerConfig)
.setV1SigningEnabled(false)
.setV2SigningEnabled(false)
- .setV3SigningEnabled(true));
+ .setV3SigningEnabled(true)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-aligned-in.apk",
"golden-aligned-v3-lineage-out.apk",
@@ -656,21 +690,24 @@ public class ApkSignerTest {
.setV2SigningEnabled(false)
.setV3SigningEnabled(true)
.setMinSdkVersionForRotation(AndroidSdkVersion.P)
- .setSigningCertificateLineage(lineage));
+ .setSigningCertificateLineage(lineage)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-aligned-in.apk",
"golden-aligned-v1v2-out.apk",
new ApkSigner.Builder(rsa2048SignerConfig)
.setV1SigningEnabled(true)
.setV2SigningEnabled(true)
- .setV3SigningEnabled(false));
+ .setV3SigningEnabled(false)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-aligned-in.apk",
"golden-aligned-v2v3-out.apk",
new ApkSigner.Builder(rsa2048SignerConfig)
.setV1SigningEnabled(false)
.setV2SigningEnabled(true)
- .setV3SigningEnabled(true));
+ .setV3SigningEnabled(true)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-aligned-in.apk",
"golden-aligned-v2v3-lineage-out.apk",
@@ -679,14 +716,16 @@ public class ApkSignerTest {
.setV2SigningEnabled(true)
.setV3SigningEnabled(true)
.setMinSdkVersionForRotation(AndroidSdkVersion.P)
- .setSigningCertificateLineage(lineage));
+ .setSigningCertificateLineage(lineage)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-aligned-in.apk",
"golden-aligned-v1v2v3-out.apk",
new ApkSigner.Builder(rsa2048SignerConfig)
.setV1SigningEnabled(true)
.setV2SigningEnabled(true)
- .setV3SigningEnabled(true));
+ .setV3SigningEnabled(true)
+ .setAlignmentPreserved(true));
assertGolden(
"golden-aligned-in.apk",
"golden-aligned-v1v2v3-lineage-out.apk",
@@ -695,7 +734,8 @@ public class ApkSignerTest {
.setV2SigningEnabled(true)
.setV3SigningEnabled(true)
.setMinSdkVersionForRotation(AndroidSdkVersion.P)
- .setSigningCertificateLineage(lineage));
+ .setSigningCertificateLineage(lineage)
+ .setAlignmentPreserved(true));
}
@Test
@@ -706,19 +746,23 @@ public class ApkSignerTest {
List<ApkSigner.SignerConfig> rsaSignerConfig =
Collections.singletonList(
getDefaultSignerConfigFromResources(FIRST_RSA_2048_SIGNER_RESOURCE_NAME));
- assertGolden("original.apk", "golden-rsa-out.apk", new ApkSigner.Builder(rsaSignerConfig));
+ assertGolden("original.apk", "golden-rsa-out.apk",
+ new ApkSigner.Builder(rsaSignerConfig).setAlignmentPreserved(true));
assertGolden(
"original.apk",
"golden-rsa-minSdkVersion-1-out.apk",
- new ApkSigner.Builder(rsaSignerConfig).setMinSdkVersion(1));
+ new ApkSigner.Builder(rsaSignerConfig).setMinSdkVersion(1)
+ .setAlignmentPreserved(true));
assertGolden(
"original.apk",
"golden-rsa-minSdkVersion-18-out.apk",
- new ApkSigner.Builder(rsaSignerConfig).setMinSdkVersion(18));
+ new ApkSigner.Builder(rsaSignerConfig).setMinSdkVersion(18)
+ .setAlignmentPreserved(true));
assertGolden(
"original.apk",
"golden-rsa-minSdkVersion-24-out.apk",
- new ApkSigner.Builder(rsaSignerConfig).setMinSdkVersion(24));
+ new ApkSigner.Builder(rsaSignerConfig).setMinSdkVersion(24)
+ .setAlignmentPreserved(true));
// TODO: Add tests for DSA and ECDSA. This is non-trivial because the default
// implementations of these signature algorithms are non-deterministic which means output
@@ -738,7 +782,8 @@ public class ApkSignerTest {
.setV1SigningEnabled(true)
.setV2SigningEnabled(true)
.setV3SigningEnabled(true)
- .setVerityEnabled(true));
+ .setVerityEnabled(true)
+ .setAlignmentPreserved(true));
}
@Test
@@ -750,7 +795,9 @@ public class ApkSignerTest {
assertGolden(
"original.apk",
goldenOutput,
- new ApkSigner.Builder(rsaSignerConfig).setAlignFileSize(true));
+ new ApkSigner.Builder(rsaSignerConfig)
+ .setAlignFileSize(true)
+ .setAlignmentPreserved(true));
assertTrue(Resources.toByteArray(getClass(), goldenOutput).length % 4096 == 0);
}
@@ -1491,7 +1538,8 @@ public class ApkSignerTest {
.setV1SigningEnabled(true)
.setV2SigningEnabled(true)
.setV3SigningEnabled(true)
- .setVerityEnabled(true));
+ .setVerityEnabled(true)
+ .setAlignmentPreserved(true));
assertTrue("pinlist.meta file must be in the signed APK.",
resourceZipFileContains("golden-pinsapp-signed.apk", "pinlist.meta"));
}