Merge "Split Java libraries per apex"
This commit is contained in:
commit
8f7a3fc633
4 changed files with 63 additions and 3 deletions
|
@ -91,6 +91,8 @@ func testApexContext(t *testing.T, bp string) (*android.TestContext, android.Con
|
||||||
ctx.RegisterModuleType("sh_binary", android.ModuleFactoryAdaptor(android.ShBinaryFactory))
|
ctx.RegisterModuleType("sh_binary", android.ModuleFactoryAdaptor(android.ShBinaryFactory))
|
||||||
ctx.RegisterModuleType("android_app_certificate", android.ModuleFactoryAdaptor(java.AndroidAppCertificateFactory))
|
ctx.RegisterModuleType("android_app_certificate", android.ModuleFactoryAdaptor(java.AndroidAppCertificateFactory))
|
||||||
ctx.RegisterModuleType("filegroup", android.ModuleFactoryAdaptor(android.FileGroupFactory))
|
ctx.RegisterModuleType("filegroup", android.ModuleFactoryAdaptor(android.FileGroupFactory))
|
||||||
|
ctx.RegisterModuleType("java_library", android.ModuleFactoryAdaptor(java.LibraryFactory))
|
||||||
|
|
||||||
ctx.PreArchMutators(func(ctx android.RegisterMutatorsContext) {
|
ctx.PreArchMutators(func(ctx android.RegisterMutatorsContext) {
|
||||||
ctx.BottomUp("prebuilts", android.PrebuiltMutator).Parallel()
|
ctx.BottomUp("prebuilts", android.PrebuiltMutator).Parallel()
|
||||||
})
|
})
|
||||||
|
@ -205,6 +207,7 @@ func testApexContext(t *testing.T, bp string) (*android.TestContext, android.Con
|
||||||
"mytest3.cpp": nil,
|
"mytest3.cpp": nil,
|
||||||
"myprebuilt": nil,
|
"myprebuilt": nil,
|
||||||
"my_include": nil,
|
"my_include": nil,
|
||||||
|
"foo/bar/MyClass.java": nil,
|
||||||
"vendor/foo/devkeys/test.x509.pem": nil,
|
"vendor/foo/devkeys/test.x509.pem": nil,
|
||||||
"vendor/foo/devkeys/test.pk8": nil,
|
"vendor/foo/devkeys/test.pk8": nil,
|
||||||
"testkey.x509.pem": nil,
|
"testkey.x509.pem": nil,
|
||||||
|
@ -280,7 +283,8 @@ func TestBasicApex(t *testing.T) {
|
||||||
both: {
|
both: {
|
||||||
binaries: ["foo",],
|
binaries: ["foo",],
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
java_libs: ["myjar"],
|
||||||
}
|
}
|
||||||
|
|
||||||
apex {
|
apex {
|
||||||
|
@ -338,6 +342,23 @@ func TestBasicApex(t *testing.T) {
|
||||||
stl: "none",
|
stl: "none",
|
||||||
notice: "custom_notice",
|
notice: "custom_notice",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
java_library {
|
||||||
|
name: "myjar",
|
||||||
|
srcs: ["foo/bar/MyClass.java"],
|
||||||
|
sdk_version: "none",
|
||||||
|
system_modules: "none",
|
||||||
|
compile_dex: true,
|
||||||
|
static_libs: ["myotherjar"],
|
||||||
|
}
|
||||||
|
|
||||||
|
java_library {
|
||||||
|
name: "myotherjar",
|
||||||
|
srcs: ["foo/bar/MyClass.java"],
|
||||||
|
sdk_version: "none",
|
||||||
|
system_modules: "none",
|
||||||
|
compile_dex: true,
|
||||||
|
}
|
||||||
`)
|
`)
|
||||||
|
|
||||||
apexRule := ctx.ModuleForTests("myapex", "android_common_myapex").Rule("apexRule")
|
apexRule := ctx.ModuleForTests("myapex", "android_common_myapex").Rule("apexRule")
|
||||||
|
@ -354,17 +375,24 @@ func TestBasicApex(t *testing.T) {
|
||||||
|
|
||||||
// Ensure that apex variant is created for the direct dep
|
// Ensure that apex variant is created for the direct dep
|
||||||
ensureListContains(t, ctx.ModuleVariantsForTests("mylib"), "android_arm64_armv8-a_core_shared_myapex")
|
ensureListContains(t, ctx.ModuleVariantsForTests("mylib"), "android_arm64_armv8-a_core_shared_myapex")
|
||||||
|
ensureListContains(t, ctx.ModuleVariantsForTests("myjar"), "android_common_myapex")
|
||||||
|
|
||||||
// Ensure that apex variant is created for the indirect dep
|
// Ensure that apex variant is created for the indirect dep
|
||||||
ensureListContains(t, ctx.ModuleVariantsForTests("mylib2"), "android_arm64_armv8-a_core_shared_myapex")
|
ensureListContains(t, ctx.ModuleVariantsForTests("mylib2"), "android_arm64_armv8-a_core_shared_myapex")
|
||||||
|
ensureListContains(t, ctx.ModuleVariantsForTests("myotherjar"), "android_common_myapex")
|
||||||
|
|
||||||
// Ensure that both direct and indirect deps are copied into apex
|
// Ensure that both direct and indirect deps are copied into apex
|
||||||
ensureContains(t, copyCmds, "image.apex/lib64/mylib.so")
|
ensureContains(t, copyCmds, "image.apex/lib64/mylib.so")
|
||||||
ensureContains(t, copyCmds, "image.apex/lib64/mylib2.so")
|
ensureContains(t, copyCmds, "image.apex/lib64/mylib2.so")
|
||||||
|
ensureContains(t, copyCmds, "image.apex/javalib/myjar.jar")
|
||||||
|
// .. but not for java libs
|
||||||
|
ensureNotContains(t, copyCmds, "image.apex/javalib/myotherjar.jar")
|
||||||
|
|
||||||
// Ensure that the platform variant ends with _core_shared
|
// Ensure that the platform variant ends with _core_shared or _common
|
||||||
ensureListContains(t, ctx.ModuleVariantsForTests("mylib"), "android_arm64_armv8-a_core_shared")
|
ensureListContains(t, ctx.ModuleVariantsForTests("mylib"), "android_arm64_armv8-a_core_shared")
|
||||||
ensureListContains(t, ctx.ModuleVariantsForTests("mylib2"), "android_arm64_armv8-a_core_shared")
|
ensureListContains(t, ctx.ModuleVariantsForTests("mylib2"), "android_arm64_armv8-a_core_shared")
|
||||||
|
ensureListContains(t, ctx.ModuleVariantsForTests("myjar"), "android_common")
|
||||||
|
ensureListContains(t, ctx.ModuleVariantsForTests("myotherjar"), "android_common")
|
||||||
|
|
||||||
// Ensure that all symlinks are present.
|
// Ensure that all symlinks are present.
|
||||||
found_foo_link_64 := false
|
found_foo_link_64 := false
|
||||||
|
|
|
@ -55,6 +55,11 @@ func (library *Library) AndroidMkHostDex(w io.Writer, name string, data android.
|
||||||
}
|
}
|
||||||
|
|
||||||
func (library *Library) AndroidMk() android.AndroidMkData {
|
func (library *Library) AndroidMk() android.AndroidMkData {
|
||||||
|
if !library.IsForPlatform() {
|
||||||
|
return android.AndroidMkData{
|
||||||
|
Disabled: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
return android.AndroidMkData{
|
return android.AndroidMkData{
|
||||||
Class: "JAVA_LIBRARIES",
|
Class: "JAVA_LIBRARIES",
|
||||||
OutputFile: android.OptionalPathForPath(library.outputFile),
|
OutputFile: android.OptionalPathForPath(library.outputFile),
|
||||||
|
@ -141,6 +146,11 @@ func (j *TestHelperLibrary) AndroidMk() android.AndroidMkData {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (prebuilt *Import) AndroidMk() android.AndroidMkData {
|
func (prebuilt *Import) AndroidMk() android.AndroidMkData {
|
||||||
|
if !prebuilt.IsForPlatform() {
|
||||||
|
return android.AndroidMkData{
|
||||||
|
Disabled: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
return android.AndroidMkData{
|
return android.AndroidMkData{
|
||||||
Class: "JAVA_LIBRARIES",
|
Class: "JAVA_LIBRARIES",
|
||||||
OutputFile: android.OptionalPathForPath(prebuilt.combinedClasspathFile),
|
OutputFile: android.OptionalPathForPath(prebuilt.combinedClasspathFile),
|
||||||
|
@ -157,6 +167,11 @@ func (prebuilt *Import) AndroidMk() android.AndroidMkData {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (prebuilt *DexImport) AndroidMk() android.AndroidMkData {
|
func (prebuilt *DexImport) AndroidMk() android.AndroidMkData {
|
||||||
|
if !prebuilt.IsForPlatform() {
|
||||||
|
return android.AndroidMkData{
|
||||||
|
Disabled: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
return android.AndroidMkData{
|
return android.AndroidMkData{
|
||||||
Class: "JAVA_LIBRARIES",
|
Class: "JAVA_LIBRARIES",
|
||||||
OutputFile: android.OptionalPathForPath(prebuilt.maybeStrippedDexJarFile),
|
OutputFile: android.OptionalPathForPath(prebuilt.maybeStrippedDexJarFile),
|
||||||
|
|
|
@ -152,6 +152,14 @@ func stubFlagsRule(ctx android.SingletonContext) {
|
||||||
// Collect dex jar paths for modules that had hiddenapi encode called on them.
|
// Collect dex jar paths for modules that had hiddenapi encode called on them.
|
||||||
if h, ok := module.(hiddenAPIIntf); ok {
|
if h, ok := module.(hiddenAPIIntf); ok {
|
||||||
if jar := h.bootDexJar(); jar != nil {
|
if jar := h.bootDexJar(); jar != nil {
|
||||||
|
// For a java lib included in an APEX, only take the one built for
|
||||||
|
// the platform variant, and skip the variants for APEXes.
|
||||||
|
// Otherwise, the hiddenapi tool will complain about duplicated classes
|
||||||
|
if a, ok := module.(android.ApexModule); ok {
|
||||||
|
if android.InAnyApex(module.Name()) && !a.IsForPlatform() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
bootDexJars = append(bootDexJars, jar)
|
bootDexJars = append(bootDexJars, jar)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
11
java/java.go
11
java/java.go
|
@ -267,6 +267,7 @@ func (me *CompilerDeviceProperties) EffectiveOptimizeEnabled() bool {
|
||||||
type Module struct {
|
type Module struct {
|
||||||
android.ModuleBase
|
android.ModuleBase
|
||||||
android.DefaultableModuleBase
|
android.DefaultableModuleBase
|
||||||
|
android.ApexModuleBase
|
||||||
|
|
||||||
properties CompilerProperties
|
properties CompilerProperties
|
||||||
protoProperties android.ProtoProperties
|
protoProperties android.ProtoProperties
|
||||||
|
@ -1581,6 +1582,7 @@ func LibraryFactory() android.Module {
|
||||||
&module.Module.protoProperties)
|
&module.Module.protoProperties)
|
||||||
|
|
||||||
InitJavaModule(module, android.HostAndDeviceSupported)
|
InitJavaModule(module, android.HostAndDeviceSupported)
|
||||||
|
android.InitApexModule(module)
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1603,6 +1605,7 @@ func LibraryHostFactory() android.Module {
|
||||||
module.Module.properties.Installable = proptools.BoolPtr(true)
|
module.Module.properties.Installable = proptools.BoolPtr(true)
|
||||||
|
|
||||||
InitJavaModule(module, android.HostSupported)
|
InitJavaModule(module, android.HostSupported)
|
||||||
|
android.InitApexModule(module)
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1858,6 +1861,7 @@ type ImportProperties struct {
|
||||||
type Import struct {
|
type Import struct {
|
||||||
android.ModuleBase
|
android.ModuleBase
|
||||||
android.DefaultableModuleBase
|
android.DefaultableModuleBase
|
||||||
|
android.ApexModuleBase
|
||||||
prebuilt android.Prebuilt
|
prebuilt android.Prebuilt
|
||||||
|
|
||||||
properties ImportProperties
|
properties ImportProperties
|
||||||
|
@ -2014,6 +2018,7 @@ func ImportFactory() android.Module {
|
||||||
|
|
||||||
android.InitPrebuiltModule(module, &module.properties.Jars)
|
android.InitPrebuiltModule(module, &module.properties.Jars)
|
||||||
InitJavaModule(module, android.HostAndDeviceSupported)
|
InitJavaModule(module, android.HostAndDeviceSupported)
|
||||||
|
android.InitApexModule(module)
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2029,6 +2034,7 @@ func ImportFactoryHost() android.Module {
|
||||||
|
|
||||||
android.InitPrebuiltModule(module, &module.properties.Jars)
|
android.InitPrebuiltModule(module, &module.properties.Jars)
|
||||||
InitJavaModule(module, android.HostSupported)
|
InitJavaModule(module, android.HostSupported)
|
||||||
|
android.InitApexModule(module)
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2041,6 +2047,7 @@ type DexImportProperties struct {
|
||||||
type DexImport struct {
|
type DexImport struct {
|
||||||
android.ModuleBase
|
android.ModuleBase
|
||||||
android.DefaultableModuleBase
|
android.DefaultableModuleBase
|
||||||
|
android.ApexModuleBase
|
||||||
prebuilt android.Prebuilt
|
prebuilt android.Prebuilt
|
||||||
|
|
||||||
properties DexImportProperties
|
properties DexImportProperties
|
||||||
|
@ -2132,6 +2139,7 @@ func DexImportFactory() android.Module {
|
||||||
|
|
||||||
android.InitPrebuiltModule(module, &module.properties.Jars)
|
android.InitPrebuiltModule(module, &module.properties.Jars)
|
||||||
InitJavaModule(module, android.DeviceSupported)
|
InitJavaModule(module, android.DeviceSupported)
|
||||||
|
android.InitApexModule(module)
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2141,6 +2149,7 @@ func DexImportFactory() android.Module {
|
||||||
type Defaults struct {
|
type Defaults struct {
|
||||||
android.ModuleBase
|
android.ModuleBase
|
||||||
android.DefaultsModuleBase
|
android.DefaultsModuleBase
|
||||||
|
android.ApexModuleBase
|
||||||
}
|
}
|
||||||
|
|
||||||
// java_defaults provides a set of properties that can be inherited by other java or android modules.
|
// java_defaults provides a set of properties that can be inherited by other java or android modules.
|
||||||
|
@ -2199,7 +2208,7 @@ func DefaultsFactory(props ...interface{}) android.Module {
|
||||||
)
|
)
|
||||||
|
|
||||||
android.InitDefaultsModule(module)
|
android.InitDefaultsModule(module)
|
||||||
|
android.InitApexModule(module)
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue