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:
@@ -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,
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user