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("android_app_certificate", android.ModuleFactoryAdaptor(java.AndroidAppCertificateFactory))
|
||||
ctx.RegisterModuleType("filegroup", android.ModuleFactoryAdaptor(android.FileGroupFactory))
|
||||
ctx.RegisterModuleType("java_library", android.ModuleFactoryAdaptor(java.LibraryFactory))
|
||||
|
||||
ctx.PreArchMutators(func(ctx android.RegisterMutatorsContext) {
|
||||
ctx.BottomUp("prebuilts", android.PrebuiltMutator).Parallel()
|
||||
})
|
||||
|
@ -205,6 +207,7 @@ func testApexContext(t *testing.T, bp string) (*android.TestContext, android.Con
|
|||
"mytest3.cpp": nil,
|
||||
"myprebuilt": nil,
|
||||
"my_include": nil,
|
||||
"foo/bar/MyClass.java": nil,
|
||||
"vendor/foo/devkeys/test.x509.pem": nil,
|
||||
"vendor/foo/devkeys/test.pk8": nil,
|
||||
"testkey.x509.pem": nil,
|
||||
|
@ -280,7 +283,8 @@ func TestBasicApex(t *testing.T) {
|
|||
both: {
|
||||
binaries: ["foo",],
|
||||
}
|
||||
}
|
||||
},
|
||||
java_libs: ["myjar"],
|
||||
}
|
||||
|
||||
apex {
|
||||
|
@ -338,6 +342,23 @@ func TestBasicApex(t *testing.T) {
|
|||
stl: "none",
|
||||
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")
|
||||
|
@ -354,17 +375,24 @@ func TestBasicApex(t *testing.T) {
|
|||
|
||||
// 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("myjar"), "android_common_myapex")
|
||||
|
||||
// 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("myotherjar"), "android_common_myapex")
|
||||
|
||||
// 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/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("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.
|
||||
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 {
|
||||
if !library.IsForPlatform() {
|
||||
return android.AndroidMkData{
|
||||
Disabled: true,
|
||||
}
|
||||
}
|
||||
return android.AndroidMkData{
|
||||
Class: "JAVA_LIBRARIES",
|
||||
OutputFile: android.OptionalPathForPath(library.outputFile),
|
||||
|
@ -141,6 +146,11 @@ func (j *TestHelperLibrary) AndroidMk() android.AndroidMkData {
|
|||
}
|
||||
|
||||
func (prebuilt *Import) AndroidMk() android.AndroidMkData {
|
||||
if !prebuilt.IsForPlatform() {
|
||||
return android.AndroidMkData{
|
||||
Disabled: true,
|
||||
}
|
||||
}
|
||||
return android.AndroidMkData{
|
||||
Class: "JAVA_LIBRARIES",
|
||||
OutputFile: android.OptionalPathForPath(prebuilt.combinedClasspathFile),
|
||||
|
@ -157,6 +167,11 @@ func (prebuilt *Import) AndroidMk() android.AndroidMkData {
|
|||
}
|
||||
|
||||
func (prebuilt *DexImport) AndroidMk() android.AndroidMkData {
|
||||
if !prebuilt.IsForPlatform() {
|
||||
return android.AndroidMkData{
|
||||
Disabled: true,
|
||||
}
|
||||
}
|
||||
return android.AndroidMkData{
|
||||
Class: "JAVA_LIBRARIES",
|
||||
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.
|
||||
if h, ok := module.(hiddenAPIIntf); ok {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
|
11
java/java.go
11
java/java.go
|
@ -267,6 +267,7 @@ func (me *CompilerDeviceProperties) EffectiveOptimizeEnabled() bool {
|
|||
type Module struct {
|
||||
android.ModuleBase
|
||||
android.DefaultableModuleBase
|
||||
android.ApexModuleBase
|
||||
|
||||
properties CompilerProperties
|
||||
protoProperties android.ProtoProperties
|
||||
|
@ -1581,6 +1582,7 @@ func LibraryFactory() android.Module {
|
|||
&module.Module.protoProperties)
|
||||
|
||||
InitJavaModule(module, android.HostAndDeviceSupported)
|
||||
android.InitApexModule(module)
|
||||
return module
|
||||
}
|
||||
|
||||
|
@ -1603,6 +1605,7 @@ func LibraryHostFactory() android.Module {
|
|||
module.Module.properties.Installable = proptools.BoolPtr(true)
|
||||
|
||||
InitJavaModule(module, android.HostSupported)
|
||||
android.InitApexModule(module)
|
||||
return module
|
||||
}
|
||||
|
||||
|
@ -1858,6 +1861,7 @@ type ImportProperties struct {
|
|||
type Import struct {
|
||||
android.ModuleBase
|
||||
android.DefaultableModuleBase
|
||||
android.ApexModuleBase
|
||||
prebuilt android.Prebuilt
|
||||
|
||||
properties ImportProperties
|
||||
|
@ -2014,6 +2018,7 @@ func ImportFactory() android.Module {
|
|||
|
||||
android.InitPrebuiltModule(module, &module.properties.Jars)
|
||||
InitJavaModule(module, android.HostAndDeviceSupported)
|
||||
android.InitApexModule(module)
|
||||
return module
|
||||
}
|
||||
|
||||
|
@ -2029,6 +2034,7 @@ func ImportFactoryHost() android.Module {
|
|||
|
||||
android.InitPrebuiltModule(module, &module.properties.Jars)
|
||||
InitJavaModule(module, android.HostSupported)
|
||||
android.InitApexModule(module)
|
||||
return module
|
||||
}
|
||||
|
||||
|
@ -2041,6 +2047,7 @@ type DexImportProperties struct {
|
|||
type DexImport struct {
|
||||
android.ModuleBase
|
||||
android.DefaultableModuleBase
|
||||
android.ApexModuleBase
|
||||
prebuilt android.Prebuilt
|
||||
|
||||
properties DexImportProperties
|
||||
|
@ -2132,6 +2139,7 @@ func DexImportFactory() android.Module {
|
|||
|
||||
android.InitPrebuiltModule(module, &module.properties.Jars)
|
||||
InitJavaModule(module, android.DeviceSupported)
|
||||
android.InitApexModule(module)
|
||||
return module
|
||||
}
|
||||
|
||||
|
@ -2141,6 +2149,7 @@ func DexImportFactory() android.Module {
|
|||
type Defaults struct {
|
||||
android.ModuleBase
|
||||
android.DefaultsModuleBase
|
||||
android.ApexModuleBase
|
||||
}
|
||||
|
||||
// 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.InitApexModule(module)
|
||||
return module
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue