Merge "java_import can be included in apex"

This commit is contained in:
Treehugger Robot 2019-08-13 04:18:29 +00:00 committed by Gerrit Code Review
commit f02f30952d
3 changed files with 37 additions and 5 deletions

View file

@ -71,6 +71,7 @@ type BaseModuleContext interface {
OtherModuleErrorf(m blueprint.Module, fmt string, args ...interface{}) OtherModuleErrorf(m blueprint.Module, fmt string, args ...interface{})
OtherModuleDependencyTag(m blueprint.Module) blueprint.DependencyTag OtherModuleDependencyTag(m blueprint.Module) blueprint.DependencyTag
OtherModuleExists(name string) bool OtherModuleExists(name string) bool
OtherModuleType(m blueprint.Module) string
GetDirectDepsWithTag(tag blueprint.DependencyTag) []Module GetDirectDepsWithTag(tag blueprint.DependencyTag) []Module
GetDirectDepWithTag(name string, tag blueprint.DependencyTag) blueprint.Module GetDirectDepWithTag(name string, tag blueprint.DependencyTag) blueprint.Module

View file

@ -740,6 +740,18 @@ func getCopyManifestForJavaLibrary(java *java.Library) (fileToCopy android.Path,
return return
} }
func getCopyManifestForPrebuiltJavaLibrary(java *java.Import) (fileToCopy android.Path, dirInApex string) {
dirInApex = "javalib"
// The output is only one, but for some reason, ImplementationJars returns Paths, not Path
implJars := java.ImplementationJars()
if len(implJars) != 1 {
panic(fmt.Errorf("java.ImplementationJars() must return single Path, but got: %s",
strings.Join(implJars.Strings(), ", ")))
}
fileToCopy = implJars[0]
return
}
func getCopyManifestForPrebuiltEtc(prebuilt *android.PrebuiltEtc) (fileToCopy android.Path, dirInApex string) { func getCopyManifestForPrebuiltEtc(prebuilt *android.PrebuiltEtc) (fileToCopy android.Path, dirInApex string) {
dirInApex = filepath.Join("etc", prebuilt.SubDir()) dirInApex = filepath.Join("etc", prebuilt.SubDir())
fileToCopy = prebuilt.OutputFile() fileToCopy = prebuilt.OutputFile()
@ -833,16 +845,24 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
ctx.PropertyErrorf("binaries", "%q is neither cc_binary, (embedded) py_binary, (host) blueprint_go_binary, (host) bootstrap_go_binary, nor sh_binary", depName) ctx.PropertyErrorf("binaries", "%q is neither cc_binary, (embedded) py_binary, (host) blueprint_go_binary, (host) bootstrap_go_binary, nor sh_binary", depName)
} }
case javaLibTag: case javaLibTag:
if java, ok := child.(*java.Library); ok { if javaLib, ok := child.(*java.Library); ok {
fileToCopy, dirInApex := getCopyManifestForJavaLibrary(java) fileToCopy, dirInApex := getCopyManifestForJavaLibrary(javaLib)
if fileToCopy == nil { if fileToCopy == nil {
ctx.PropertyErrorf("java_libs", "%q is not configured to be compiled into dex", depName) ctx.PropertyErrorf("java_libs", "%q is not configured to be compiled into dex", depName)
} else { } else {
filesInfo = append(filesInfo, apexFile{fileToCopy, depName, dirInApex, javaSharedLib, java, nil}) filesInfo = append(filesInfo, apexFile{fileToCopy, depName, dirInApex, javaSharedLib, javaLib, nil})
}
return true
} else if javaLib, ok := child.(*java.Import); ok {
fileToCopy, dirInApex := getCopyManifestForPrebuiltJavaLibrary(javaLib)
if fileToCopy == nil {
ctx.PropertyErrorf("java_libs", "%q does not have a jar output", depName)
} else {
filesInfo = append(filesInfo, apexFile{fileToCopy, depName, dirInApex, javaSharedLib, javaLib, nil})
} }
return true return true
} else { } else {
ctx.PropertyErrorf("java_libs", "%q is not a java_library module", depName) ctx.PropertyErrorf("java_libs", "%q of type %q is not supported", depName, ctx.OtherModuleType(child))
} }
case prebuiltTag: case prebuiltTag:
if prebuilt, ok := child.(*android.PrebuiltEtc); ok { if prebuilt, ok := child.(*android.PrebuiltEtc); ok {

View file

@ -102,6 +102,7 @@ func testApexContext(t *testing.T, bp string) (*android.TestContext, android.Con
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.RegisterModuleType("java_library", android.ModuleFactoryAdaptor(java.LibraryFactory))
ctx.RegisterModuleType("java_import", android.ModuleFactoryAdaptor(java.ImportFactory))
ctx.PreArchMutators(func(ctx android.RegisterMutatorsContext) { ctx.PreArchMutators(func(ctx android.RegisterMutatorsContext) {
ctx.BottomUp("prebuilts", android.PrebuiltMutator).Parallel() ctx.BottomUp("prebuilts", android.PrebuiltMutator).Parallel()
@ -218,6 +219,7 @@ func testApexContext(t *testing.T, bp string) (*android.TestContext, android.Con
"myprebuilt": nil, "myprebuilt": nil,
"my_include": nil, "my_include": nil,
"foo/bar/MyClass.java": nil, "foo/bar/MyClass.java": nil,
"prebuilt.jar": 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,
@ -301,7 +303,7 @@ func TestBasicApex(t *testing.T) {
binaries: ["foo",], binaries: ["foo",],
} }
}, },
java_libs: ["myjar"], java_libs: ["myjar", "myprebuiltjar"],
} }
apex { apex {
@ -376,6 +378,12 @@ func TestBasicApex(t *testing.T) {
system_modules: "none", system_modules: "none",
compile_dex: true, compile_dex: true,
} }
java_import {
name: "myprebuiltjar",
jars: ["prebuilt.jar"],
installable: true,
}
`) `)
apexRule := ctx.ModuleForTests("myapex", "android_common_myapex").Rule("apexRule") apexRule := ctx.ModuleForTests("myapex", "android_common_myapex").Rule("apexRule")
@ -393,6 +401,7 @@ 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") ensureListContains(t, ctx.ModuleVariantsForTests("myjar"), "android_common_myapex")
ensureListContains(t, ctx.ModuleVariantsForTests("myprebuiltjar"), "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")
@ -402,6 +411,7 @@ func TestBasicApex(t *testing.T) {
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") ensureContains(t, copyCmds, "image.apex/javalib/myjar.jar")
ensureContains(t, copyCmds, "image.apex/javalib/myprebuiltjar.jar")
// .. but not for java libs // .. but not for java libs
ensureNotContains(t, copyCmds, "image.apex/javalib/myotherjar.jar") ensureNotContains(t, copyCmds, "image.apex/javalib/myotherjar.jar")
@ -410,6 +420,7 @@ func TestBasicApex(t *testing.T) {
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("myjar"), "android_common")
ensureListContains(t, ctx.ModuleVariantsForTests("myotherjar"), "android_common") ensureListContains(t, ctx.ModuleVariantsForTests("myotherjar"), "android_common")
ensureListContains(t, ctx.ModuleVariantsForTests("myprebuiltjar"), "android_common")
// Ensure that all symlinks are present. // Ensure that all symlinks are present.
found_foo_link_64 := false found_foo_link_64 := false