Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 90647618 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Relax preprocessed apk check for non-privileged apps" into main

parents 340591c7 93b89b41
Loading
Loading
Loading
Loading
+37 −12
Original line number Diff line number Diff line
@@ -51,9 +51,9 @@ var (
		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
		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;" +
			"exit 1; " +
			"else " +
@@ -61,6 +61,17 @@ var (
			"fi",
		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) {
@@ -384,26 +395,40 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext
}

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")
	ctx.Build(pctx, android.BuildParams{
		Rule:   checkZipAlignment,
		Input:  srcApk,
		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{
		Rule:   checkJniAndDexLibsAreUncompressedRule,
		Rule:   checkJniLibsAreUncompressedRule,
		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{
		Rule:        android.Cp,
		Input:       srcApk,
		Output:      dstApk,
		Validations: []android.Path{
			alignmentStamp,
			compressionStamp,
		},
		Validations: validations,
	})
}