Merge "Keep signatures of presigned prebuilt test apps."

This commit is contained in:
Jaewoong Jung 2020-01-15 23:17:02 +00:00 committed by Gerrit Code Review
commit 275eb69d0a
2 changed files with 50 additions and 0 deletions

View File

@ -926,6 +926,16 @@ func (a *AndroidAppImport) DepsMutator(ctx android.BottomUpMutatorContext) {
func (a *AndroidAppImport) uncompressEmbeddedJniLibs( func (a *AndroidAppImport) uncompressEmbeddedJniLibs(
ctx android.ModuleContext, inputPath android.Path, outputPath android.OutputPath) { 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 := android.NewRuleBuilder()
rule.Command(). rule.Command().
Textf(`if (zipinfo %s 'lib/*.so' 2>/dev/null | grep -v ' stor ' >/dev/null) ; then`, inputPath). Textf(`if (zipinfo %s 'lib/*.so' 2>/dev/null | grep -v ' stor ' >/dev/null) ; then`, inputPath).
@ -1003,6 +1013,8 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext
var installDir android.InstallPath var installDir android.InstallPath
if Bool(a.properties.Privileged) { if Bool(a.properties.Privileged) {
installDir = android.PathForModuleInstall(ctx, "priv-app", a.BaseModuleName()) installDir = android.PathForModuleInstall(ctx, "priv-app", a.BaseModuleName())
} else if ctx.InstallInTestcases() {
installDir = android.PathForModuleInstall(ctx, a.BaseModuleName(), ctx.DeviceConfig().DeviceArch())
} else { } else {
installDir = android.PathForModuleInstall(ctx, "app", a.BaseModuleName()) installDir = android.PathForModuleInstall(ctx, "app", a.BaseModuleName())
} }
@ -1159,6 +1171,10 @@ func (a *AndroidTestImport) GenerateAndroidBuildActions(ctx android.ModuleContex
a.data = android.PathsForModuleSrc(ctx, a.testProperties.Data) 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 // 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. // module. DPI or arch variant configurations can be made as with android_app_import.
func AndroidTestImportFactory() android.Module { func AndroidTestImportFactory() android.Module {

View File

@ -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) { func TestStl(t *testing.T) {
ctx, _ := testJava(t, cc.GatherRequiredDepsForTest(android.Android)+` ctx, _ := testJava(t, cc.GatherRequiredDepsForTest(android.Android)+`
cc_library { cc_library {