Merge "Support including apk inside an apex"
This commit is contained in:
commit
5afe2d6869
25
apex/apex.go
25
apex/apex.go
|
@ -142,6 +142,7 @@ var (
|
||||||
keyTag = dependencyTag{name: "key"}
|
keyTag = dependencyTag{name: "key"}
|
||||||
certificateTag = dependencyTag{name: "certificate"}
|
certificateTag = dependencyTag{name: "certificate"}
|
||||||
usesTag = dependencyTag{name: "uses"}
|
usesTag = dependencyTag{name: "uses"}
|
||||||
|
androidAppTag = dependencyTag{name: "androidApp"}
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -333,6 +334,9 @@ type apexBundleProperties struct {
|
||||||
|
|
||||||
// A txt file containing list of files that are whitelisted to be included in this APEX.
|
// A txt file containing list of files that are whitelisted to be included in this APEX.
|
||||||
Whitelisted_files *string
|
Whitelisted_files *string
|
||||||
|
|
||||||
|
// List of APKs to package inside APEX
|
||||||
|
Apps []string
|
||||||
}
|
}
|
||||||
|
|
||||||
type apexTargetBundleProperties struct {
|
type apexTargetBundleProperties struct {
|
||||||
|
@ -367,6 +371,7 @@ const (
|
||||||
goBinary
|
goBinary
|
||||||
javaSharedLib
|
javaSharedLib
|
||||||
nativeTest
|
nativeTest
|
||||||
|
app
|
||||||
)
|
)
|
||||||
|
|
||||||
type apexPackaging int
|
type apexPackaging int
|
||||||
|
@ -431,6 +436,8 @@ func (class apexFileClass) NameInMake() string {
|
||||||
return "JAVA_LIBRARIES"
|
return "JAVA_LIBRARIES"
|
||||||
case nativeTest:
|
case nativeTest:
|
||||||
return "NATIVE_TESTS"
|
return "NATIVE_TESTS"
|
||||||
|
case app:
|
||||||
|
return "APPS"
|
||||||
default:
|
default:
|
||||||
panic(fmt.Errorf("unknown class %d", class))
|
panic(fmt.Errorf("unknown class %d", class))
|
||||||
}
|
}
|
||||||
|
@ -633,6 +640,10 @@ func (a *apexBundle) DepsMutator(ctx android.BottomUpMutatorContext) {
|
||||||
{Mutator: "arch", Variation: "android_common"},
|
{Mutator: "arch", Variation: "android_common"},
|
||||||
}, javaLibTag, a.properties.Java_libs...)
|
}, javaLibTag, a.properties.Java_libs...)
|
||||||
|
|
||||||
|
ctx.AddFarVariationDependencies([]blueprint.Variation{
|
||||||
|
{Mutator: "arch", Variation: "android_common"},
|
||||||
|
}, androidAppTag, a.properties.Apps...)
|
||||||
|
|
||||||
if String(a.properties.Key) == "" {
|
if String(a.properties.Key) == "" {
|
||||||
ctx.ModuleErrorf("key is missing")
|
ctx.ModuleErrorf("key is missing")
|
||||||
return
|
return
|
||||||
|
@ -813,6 +824,12 @@ func getCopyManifestForPrebuiltEtc(prebuilt *android.PrebuiltEtc) (fileToCopy an
|
||||||
return
|
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`.
|
// Context "decorator", overriding the InstallBypassMake method to always reply `true`.
|
||||||
type flattenedApexContext struct {
|
type flattenedApexContext struct {
|
||||||
android.ModuleContext
|
android.ModuleContext
|
||||||
|
@ -977,6 +994,14 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
if prebuilt, ok := child.(*Prebuilt); ok && prebuilt.isForceDisabled() {
|
if prebuilt, ok := child.(*Prebuilt); ok && prebuilt.isForceDisabled() {
|
||||||
a.prebuiltFileToDelete = prebuilt.InstallFilename()
|
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 {
|
} else {
|
||||||
// indirect dependencies
|
// indirect dependencies
|
||||||
|
|
|
@ -103,6 +103,7 @@ func testApexContext(t *testing.T, bp string) (*android.TestContext, android.Con
|
||||||
ctx.RegisterModuleType("filegroup", android.ModuleFactoryAdaptor(android.FileGroupFactory))
|
ctx.RegisterModuleType("filegroup", android.ModuleFactoryAdaptor(android.FileGroupFactory))
|
||||||
ctx.RegisterModuleType("java_library", android.ModuleFactoryAdaptor(java.LibraryFactory))
|
ctx.RegisterModuleType("java_library", android.ModuleFactoryAdaptor(java.LibraryFactory))
|
||||||
ctx.RegisterModuleType("java_import", android.ModuleFactoryAdaptor(java.ImportFactory))
|
ctx.RegisterModuleType("java_import", android.ModuleFactoryAdaptor(java.ImportFactory))
|
||||||
|
ctx.RegisterModuleType("android_app", android.ModuleFactoryAdaptor(java.AndroidAppFactory))
|
||||||
|
|
||||||
ctx.PreArchMutators(func(ctx android.RegisterMutatorsContext) {
|
ctx.PreArchMutators(func(ctx android.RegisterMutatorsContext) {
|
||||||
ctx.BottomUp("prebuilts", android.PrebuiltMutator).Parallel()
|
ctx.BottomUp("prebuilts", android.PrebuiltMutator).Parallel()
|
||||||
|
@ -235,6 +236,8 @@ func testApexContext(t *testing.T, bp string) (*android.TestContext, android.Con
|
||||||
"myapex-arm64.apex": nil,
|
"myapex-arm64.apex": nil,
|
||||||
"myapex-arm.apex": nil,
|
"myapex-arm.apex": nil,
|
||||||
"frameworks/base/api/current.txt": nil,
|
"frameworks/base/api/current.txt": nil,
|
||||||
|
"build/make/core/proguard.flags": nil,
|
||||||
|
"build/make/core/proguard_basic_keeps.flags": nil,
|
||||||
})
|
})
|
||||||
|
|
||||||
return ctx, config
|
return ctx, config
|
||||||
|
@ -1977,6 +1980,38 @@ func TestErrorsIfDepsAreNotEnabled(t *testing.T) {
|
||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestApexWithApps(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",
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
|
module := ctx.ModuleForTests("myapex", "android_common_myapex")
|
||||||
|
apexRule := module.Rule("apexRule")
|
||||||
|
copyCmds := apexRule.Args["copy_commands"]
|
||||||
|
|
||||||
|
ensureContains(t, copyCmds, "image.apex/app/AppFoo/AppFoo.apk")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
run := func() int {
|
run := func() int {
|
||||||
setUp()
|
setUp()
|
||||||
|
|
|
@ -139,6 +139,10 @@ func (a *AndroidApp) ExportedStaticPackages() android.Paths {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *AndroidApp) OutputFile() android.Path {
|
||||||
|
return a.outputFile
|
||||||
|
}
|
||||||
|
|
||||||
var _ AndroidLibraryDependency = (*AndroidApp)(nil)
|
var _ AndroidLibraryDependency = (*AndroidApp)(nil)
|
||||||
|
|
||||||
type Certificate struct {
|
type Certificate struct {
|
||||||
|
|
Loading…
Reference in New Issue