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
This commit is contained in:
parent
dd22225b3a
commit
39ee119de2
12
apex/apex.go
12
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)
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
17
java/app.go
17
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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue