Loading apex/apex.go +6 −6 Original line number Diff line number Diff line Loading @@ -1741,15 +1741,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() Loading Loading @@ -2040,14 +2041,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) } Loading apex/apex_test.go +43 −2 Original line number Diff line number Diff line Loading @@ -3438,6 +3438,7 @@ func TestApexWithAppImports(t *testing.T) { dex_preopt: { enabled: false, }, filename: "AwesomePrebuiltAppFooPriv.apk", } `) Loading @@ -3446,7 +3447,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) { Loading Loading @@ -3779,7 +3820,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() Loading java/app.go +13 −4 Original line number Diff line number Diff line Loading @@ -511,6 +511,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 Loading Loading @@ -1134,6 +1138,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) != "" { Loading Loading @@ -1191,6 +1199,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) { Loading @@ -1201,11 +1211,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 Loading @@ -1213,8 +1223,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 Loading
apex/apex.go +6 −6 Original line number Diff line number Diff line Loading @@ -1741,15 +1741,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() Loading Loading @@ -2040,14 +2041,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) } Loading
apex/apex_test.go +43 −2 Original line number Diff line number Diff line Loading @@ -3438,6 +3438,7 @@ func TestApexWithAppImports(t *testing.T) { dex_preopt: { enabled: false, }, filename: "AwesomePrebuiltAppFooPriv.apk", } `) Loading @@ -3446,7 +3447,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) { Loading Loading @@ -3779,7 +3820,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() Loading
java/app.go +13 −4 Original line number Diff line number Diff line Loading @@ -511,6 +511,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 Loading Loading @@ -1134,6 +1138,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) != "" { Loading Loading @@ -1191,6 +1199,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) { Loading @@ -1201,11 +1211,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 Loading @@ -1213,8 +1223,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