Support including apk inside an apex
New property "apps" is added to APEX soong module. This property
configure a list of APKs to package inside APEX payload. For each
android_app module package it's APK into /app/$(android_app module Name)
directory.
Bug: 139906763
Test: m -j
Change-Id: Ic6655f211951af08097c76e157a07ebc52425718
diff --git a/apex/apex.go b/apex/apex.go
index f8eca8e..13e9cb9 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -142,6 +142,7 @@
keyTag = dependencyTag{name: "key"}
certificateTag = dependencyTag{name: "certificate"}
usesTag = dependencyTag{name: "uses"}
+ androidAppTag = dependencyTag{name: "androidApp"}
)
var (
@@ -333,6 +334,9 @@
// A txt file containing list of files that are whitelisted to be included in this APEX.
Whitelisted_files *string
+
+ // List of APKs to package inside APEX
+ Apps []string
}
type apexTargetBundleProperties struct {
@@ -367,6 +371,7 @@
goBinary
javaSharedLib
nativeTest
+ app
)
type apexPackaging int
@@ -431,6 +436,8 @@
return "JAVA_LIBRARIES"
case nativeTest:
return "NATIVE_TESTS"
+ case app:
+ return "APPS"
default:
panic(fmt.Errorf("unknown class %d", class))
}
@@ -633,6 +640,10 @@
{Mutator: "arch", Variation: "android_common"},
}, javaLibTag, a.properties.Java_libs...)
+ ctx.AddFarVariationDependencies([]blueprint.Variation{
+ {Mutator: "arch", Variation: "android_common"},
+ }, androidAppTag, a.properties.Apps...)
+
if String(a.properties.Key) == "" {
ctx.ModuleErrorf("key is missing")
return
@@ -813,6 +824,12 @@
return
}
+func getCopyManifestForAndroidApp(app *java.AndroidApp, pkgName string) (fileToCopy android.Path, dirInApex string) {
+ dirInApex = filepath.Join("app", pkgName)
+ fileToCopy = app.OutputFile()
+ return
+}
+
// Context "decorator", overriding the InstallBypassMake method to always reply `true`.
type flattenedApexContext struct {
android.ModuleContext
@@ -977,6 +994,14 @@
if prebuilt, ok := child.(*Prebuilt); ok && prebuilt.isForceDisabled() {
a.prebuiltFileToDelete = prebuilt.InstallFilename()
}
+ case androidAppTag:
+ if ap, ok := child.(*java.AndroidApp); ok {
+ fileToCopy, dirInApex := getCopyManifestForAndroidApp(ap, ctx.DeviceConfig().OverridePackageNameFor(depName))
+ filesInfo = append(filesInfo, apexFile{fileToCopy, depName, dirInApex, app, ap, nil})
+ return true
+ } else {
+ ctx.PropertyErrorf("apps", "%q is not an android_app module", depName)
+ }
}
} else {
// indirect dependencies