From 39ee119de2a246f5de07670c225094a8b4efd563 Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Mon, 23 Mar 2020 20:21:11 +0900 Subject: [PATCH] apex: respect filename property for apk-in-apex android_app_import supports filename: property, which overrides .apk filename. Now, apex packaging rule respects it too. (Previously, apex packaging ignored it) Bug: 152163837 Test: m (soong tests amended) Change-Id: I72e2f1c923f4d01c42a87bf2232a025adca4c918 --- apex/apex.go | 12 ++++++------ apex/apex_test.go | 45 +++++++++++++++++++++++++++++++++++++++++++-- java/app.go | 17 +++++++++++++---- 3 files changed, 62 insertions(+), 12 deletions(-) diff --git a/apex/apex.go b/apex/apex.go index 04ed269dd..f0eb1dec9 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1736,15 +1736,16 @@ func apexFileForCompatConfig(ctx android.BaseModuleContext, config java.Platform func apexFileForAndroidApp(ctx android.BaseModuleContext, aapp interface { android.Module Privileged() bool + InstallApkName() string OutputFile() android.Path JacocoReportClassesFile() android.Path Certificate() java.Certificate -}, pkgName string) apexFile { +}) apexFile { appDir := "app" if aapp.Privileged() { appDir = "priv-app" } - dirInApex := filepath.Join(appDir, pkgName) + dirInApex := filepath.Join(appDir, aapp.InstallApkName()) fileToCopy := aapp.OutputFile() af := newApexFile(ctx, fileToCopy, aapp.Name(), dirInApex, app, aapp) af.jacocoReportClassesFile = aapp.JacocoReportClassesFile() @@ -2003,14 +2004,13 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { ctx.PropertyErrorf("java_libs", "%q of type %q is not supported", depName, ctx.OtherModuleType(child)) } case androidAppTag: - pkgName := ctx.DeviceConfig().OverridePackageNameFor(depName) if ap, ok := child.(*java.AndroidApp); ok { - filesInfo = append(filesInfo, apexFileForAndroidApp(ctx, ap, pkgName)) + filesInfo = append(filesInfo, apexFileForAndroidApp(ctx, ap)) return true // track transitive dependencies } else if ap, ok := child.(*java.AndroidAppImport); ok { - filesInfo = append(filesInfo, apexFileForAndroidApp(ctx, ap, pkgName)) + filesInfo = append(filesInfo, apexFileForAndroidApp(ctx, ap)) } else if ap, ok := child.(*java.AndroidTestHelperApp); ok { - filesInfo = append(filesInfo, apexFileForAndroidApp(ctx, ap, pkgName)) + filesInfo = append(filesInfo, apexFileForAndroidApp(ctx, ap)) } else { ctx.PropertyErrorf("apps", "%q is not an android_app module", depName) } diff --git a/apex/apex_test.go b/apex/apex_test.go index b97e38d1d..c5edc3b67 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -3426,6 +3426,7 @@ func TestApexWithAppImports(t *testing.T) { dex_preopt: { enabled: false, }, + filename: "AwesomePrebuiltAppFooPriv.apk", } `) @@ -3434,7 +3435,47 @@ func TestApexWithAppImports(t *testing.T) { copyCmds := apexRule.Args["copy_commands"] ensureContains(t, copyCmds, "image.apex/app/AppFooPrebuilt/AppFooPrebuilt.apk") - ensureContains(t, copyCmds, "image.apex/priv-app/AppFooPrivPrebuilt/AppFooPrivPrebuilt.apk") + ensureContains(t, copyCmds, "image.apex/priv-app/AppFooPrivPrebuilt/AwesomePrebuiltAppFooPriv.apk") +} + +func TestApexWithAppImportsPrefer(t *testing.T) { + ctx, _ := testApex(t, ` + apex { + name: "myapex", + key: "myapex.key", + apps: [ + "AppFoo", + ], + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + android_app { + name: "AppFoo", + srcs: ["foo/bar/MyClass.java"], + sdk_version: "none", + system_modules: "none", + apex_available: [ "myapex" ], + } + + android_app_import { + name: "AppFoo", + apk: "AppFooPrebuilt.apk", + filename: "AppFooPrebuilt.apk", + presigned: true, + prefer: true, + } + `, withFiles(map[string][]byte{ + "AppFooPrebuilt.apk": nil, + })) + + ensureExactContents(t, ctx, "myapex", "android_common_myapex_image", []string{ + "app/AppFoo/AppFooPrebuilt.apk", + }) } func TestApexWithTestHelperApp(t *testing.T) { @@ -3767,7 +3808,7 @@ func TestOverrideApex(t *testing.T) { copyCmds := apexRule.Args["copy_commands"] ensureNotContains(t, copyCmds, "image.apex/app/app/app.apk") - ensureContains(t, copyCmds, "image.apex/app/app/override_app.apk") + ensureContains(t, copyCmds, "image.apex/app/override_app/override_app.apk") apexBundle := module.Module().(*apexBundle) name := apexBundle.Name() diff --git a/java/app.go b/java/app.go index 0a4d9e4ea..449558033 100755 --- a/java/app.go +++ b/java/app.go @@ -479,6 +479,10 @@ func processMainCert(m android.ModuleBase, certPropValue string, certificates [] return certificates } +func (a *AndroidApp) InstallApkName() string { + return a.installApkName +} + func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) { var apkDeps android.Paths @@ -1102,6 +1106,10 @@ func (a *AndroidAppImport) GenerateAndroidBuildActions(ctx android.ModuleContext a.generateAndroidBuildActions(ctx) } +func (a *AndroidAppImport) InstallApkName() string { + return a.BaseModuleName() +} + func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext) { numCertPropsSet := 0 if String(a.properties.Certificate) != "" { @@ -1159,6 +1167,8 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext dexOutput = dexUncompressed } + apkFilename := proptools.StringDefault(a.properties.Filename, a.BaseModuleName()+".apk") + // Sign or align the package // TODO: Handle EXTERNAL if !Bool(a.properties.Presigned) { @@ -1169,11 +1179,11 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext ctx.ModuleErrorf("Unexpected number of certificates were extracted: %q", certificates) } a.certificate = certificates[0] - signed := android.PathForModuleOut(ctx, "signed", ctx.ModuleName()+".apk") + signed := android.PathForModuleOut(ctx, "signed", apkFilename) SignAppPackage(ctx, signed, dexOutput, certificates, nil) a.outputFile = signed } else { - alignedApk := android.PathForModuleOut(ctx, "zip-aligned", ctx.ModuleName()+".apk") + alignedApk := android.PathForModuleOut(ctx, "zip-aligned", apkFilename) TransformZipAlign(ctx, alignedApk, dexOutput) a.outputFile = alignedApk a.certificate = presignedCertificate @@ -1181,8 +1191,7 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext // TODO: Optionally compress the output apk. - a.installPath = ctx.InstallFile(installDir, - proptools.StringDefault(a.properties.Filename, a.BaseModuleName()+".apk"), a.outputFile) + a.installPath = ctx.InstallFile(installDir, apkFilename, a.outputFile) // TODO: androidmk converter jni libs }