Merge "Relax preprocessed apk check for non-privileged apps" into main am: 9064761816 am: ea7d85fc37 am: 66dca00513

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2670157

Change-Id: I6a761d2cf3c213c5b1e30c43056455d6fb105098
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2023-07-21 05:57:10 +00:00
committed by Automerger Merge Worker

View File

@@ -51,9 +51,9 @@ var (
Description: "Uncompress dex files", Description: "Uncompress dex files",
}) })
checkJniAndDexLibsAreUncompressedRule = pctx.AndroidStaticRule("check-jni-and-dex-libs-are-uncompressed", blueprint.RuleParams{ checkDexLibsAreUncompressedRule = pctx.AndroidStaticRule("check-dex-libs-are-uncompressed", blueprint.RuleParams{
// grep -v ' stor ' will search for lines that don't have ' stor '. stor means the file is stored uncompressed // grep -v ' stor ' will search for lines that don't have ' stor '. stor means the file is stored uncompressed
Command: "if (zipinfo $in 'lib/*.so' '*.dex' 2>/dev/null | grep -v ' stor ' >/dev/null) ; then " + Command: "if (zipinfo $in '*.dex' 2>/dev/null | grep -v ' stor ' >/dev/null) ; then " +
"echo $in: Contains compressed JNI libraries and/or dex files >&2;" + "echo $in: Contains compressed JNI libraries and/or dex files >&2;" +
"exit 1; " + "exit 1; " +
"else " + "else " +
@@ -61,6 +61,17 @@ var (
"fi", "fi",
Description: "Check for compressed JNI libs or dex files", Description: "Check for compressed JNI libs or dex files",
}) })
checkJniLibsAreUncompressedRule = pctx.AndroidStaticRule("check-jni-libs-are-uncompressed", blueprint.RuleParams{
// grep -v ' stor ' will search for lines that don't have ' stor '. stor means the file is stored uncompressed
Command: "if (zipinfo $in 'lib/*.so' 2>/dev/null | grep -v ' stor ' >/dev/null) ; then " +
"echo $in: Contains compressed JNI libraries >&2;" +
"exit 1; " +
"else " +
"touch $out; " +
"fi",
Description: "Check for compressed JNI libs or dex files",
})
) )
func RegisterAppImportBuildComponents(ctx android.RegistrationContext) { func RegisterAppImportBuildComponents(ctx android.RegistrationContext) {
@@ -384,26 +395,40 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext
} }
func (a *AndroidAppImport) validatePreprocessedApk(ctx android.ModuleContext, srcApk android.Path, dstApk android.WritablePath) { func (a *AndroidAppImport) validatePreprocessedApk(ctx android.ModuleContext, srcApk android.Path, dstApk android.WritablePath) {
var validations android.Paths
alignmentStamp := android.PathForModuleOut(ctx, "validated-prebuilt", "alignment.stamp") alignmentStamp := android.PathForModuleOut(ctx, "validated-prebuilt", "alignment.stamp")
ctx.Build(pctx, android.BuildParams{ ctx.Build(pctx, android.BuildParams{
Rule: checkZipAlignment, Rule: checkZipAlignment,
Input: srcApk, Input: srcApk,
Output: alignmentStamp, Output: alignmentStamp,
}) })
compressionStamp := android.PathForModuleOut(ctx, "validated-prebuilt", "compression.stamp")
validations = append(validations, alignmentStamp)
jniCompressionStamp := android.PathForModuleOut(ctx, "validated-prebuilt", "jni_compression.stamp")
ctx.Build(pctx, android.BuildParams{ ctx.Build(pctx, android.BuildParams{
Rule: checkJniAndDexLibsAreUncompressedRule, Rule: checkJniLibsAreUncompressedRule,
Input: srcApk, Input: srcApk,
Output: compressionStamp, Output: jniCompressionStamp,
}) })
validations = append(validations, jniCompressionStamp)
if a.Privileged() {
// It's ok for non-privileged apps to have compressed dex files, see go/gms-uncompressed-jni-slides
dexCompressionStamp := android.PathForModuleOut(ctx, "validated-prebuilt", "dex_compression.stamp")
ctx.Build(pctx, android.BuildParams{
Rule: checkDexLibsAreUncompressedRule,
Input: srcApk,
Output: dexCompressionStamp,
})
validations = append(validations, dexCompressionStamp)
}
ctx.Build(pctx, android.BuildParams{ ctx.Build(pctx, android.BuildParams{
Rule: android.Cp, Rule: android.Cp,
Input: srcApk, Input: srcApk,
Output: dstApk, Output: dstApk,
Validations: []android.Path{ Validations: validations,
alignmentStamp,
compressionStamp,
},
}) })
} }