Keep signatures of presigned prebuilt test apps.
Skip the JNI uncompress step for presigned prebuilt test apps. They don't need it, and they can invalidate the signature. Also, fix the install partition of prebuilt test apps. Fixes: 143472191 Test: app_test.go Test: Converted CtsShimPrivUpgradePrebuilt to bp and checked the final output apk signature. Change-Id: Ied7d3576b5db4de40a9ca9e388336229d07212f5
This commit is contained in:
parent
5ce6dfbd36
commit
7c5bd835d0
2 changed files with 50 additions and 0 deletions
16
java/app.go
16
java/app.go
|
@ -925,6 +925,16 @@ func (a *AndroidAppImport) DepsMutator(ctx android.BottomUpMutatorContext) {
|
|||
|
||||
func (a *AndroidAppImport) uncompressEmbeddedJniLibs(
|
||||
ctx android.ModuleContext, inputPath android.Path, outputPath android.OutputPath) {
|
||||
// Test apps don't need their JNI libraries stored uncompressed. As a matter of fact, messing
|
||||
// with them may invalidate pre-existing signature data.
|
||||
if ctx.InstallInTestcases() && Bool(a.properties.Presigned) {
|
||||
ctx.Build(pctx, android.BuildParams{
|
||||
Rule: android.Cp,
|
||||
Output: outputPath,
|
||||
Input: inputPath,
|
||||
})
|
||||
return
|
||||
}
|
||||
rule := android.NewRuleBuilder()
|
||||
rule.Command().
|
||||
Textf(`if (zipinfo %s 'lib/*.so' 2>/dev/null | grep -v ' stor ' >/dev/null) ; then`, inputPath).
|
||||
|
@ -1002,6 +1012,8 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext
|
|||
var installDir android.InstallPath
|
||||
if Bool(a.properties.Privileged) {
|
||||
installDir = android.PathForModuleInstall(ctx, "priv-app", a.BaseModuleName())
|
||||
} else if ctx.InstallInTestcases() {
|
||||
installDir = android.PathForModuleInstall(ctx, a.BaseModuleName(), ctx.DeviceConfig().DeviceArch())
|
||||
} else {
|
||||
installDir = android.PathForModuleInstall(ctx, "app", a.BaseModuleName())
|
||||
}
|
||||
|
@ -1158,6 +1170,10 @@ func (a *AndroidTestImport) GenerateAndroidBuildActions(ctx android.ModuleContex
|
|||
a.data = android.PathsForModuleSrc(ctx, a.testProperties.Data)
|
||||
}
|
||||
|
||||
func (a *AndroidTestImport) InstallInTestcases() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// android_test_import imports a prebuilt test apk with additional processing specified in the
|
||||
// module. DPI or arch variant configurations can be made as with android_app_import.
|
||||
func AndroidTestImportFactory() android.Module {
|
||||
|
|
|
@ -1628,6 +1628,40 @@ func TestAndroidTestImport(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestAndroidTestImport_NoJinUncompressForPresigned(t *testing.T) {
|
||||
ctx, _ := testJava(t, `
|
||||
android_test_import {
|
||||
name: "foo",
|
||||
apk: "prebuilts/apk/app.apk",
|
||||
certificate: "cert/new_cert",
|
||||
data: [
|
||||
"testdata/data",
|
||||
],
|
||||
}
|
||||
|
||||
android_test_import {
|
||||
name: "foo_presigned",
|
||||
apk: "prebuilts/apk/app.apk",
|
||||
presigned: true,
|
||||
data: [
|
||||
"testdata/data",
|
||||
],
|
||||
}
|
||||
`)
|
||||
|
||||
variant := ctx.ModuleForTests("foo", "android_common")
|
||||
jniRule := variant.Output("jnis-uncompressed/foo.apk").RuleParams.Command
|
||||
if !strings.HasPrefix(jniRule, "if (zipinfo") {
|
||||
t.Errorf("Unexpected JNI uncompress rule command: " + jniRule)
|
||||
}
|
||||
|
||||
variant = ctx.ModuleForTests("foo_presigned", "android_common")
|
||||
jniRule = variant.Output("jnis-uncompressed/foo_presigned.apk").BuildParams.Rule.String()
|
||||
if jniRule != android.Cp.String() {
|
||||
t.Errorf("Unexpected JNI uncompress rule: " + jniRule)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStl(t *testing.T) {
|
||||
ctx, _ := testJava(t, cc.GatherRequiredDepsForTest(android.Android)+`
|
||||
cc_library {
|
||||
|
|
Loading…
Reference in a new issue