Support java_sdk_library as java_libs of apex
When a java_sdk_library module is added, both impl jar and permission
xml files are packaged together.
For example, when a java_sdk_library "foo" is listed, following two
entries will be in an APEX package.
/javalibs/foo.jar
/etc/permissions/foo.xml
Bug: 145474221
Test: m com.android.cronet
deapexer list com.android.cronet.apex
Change-Id: If5883c02255e9309f20810b1532d3fbe73bf4e95
diff --git a/apex/apex.go b/apex/apex.go
index 8a336ba..f6997bf 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -872,10 +872,16 @@
return af
}
-func apexFileForJavaLibrary(ctx android.BaseModuleContext, java *java.Library) apexFile {
+// TODO(b/146586360): replace javaLibrary(in apex/apex.go) with java.Dependency
+type javaLibrary interface {
+ android.Module
+ java.Dependency
+}
+
+func apexFileForJavaLibrary(ctx android.BaseModuleContext, lib javaLibrary) apexFile {
dirInApex := "javalib"
- fileToCopy := java.DexJarFile()
- return newApexFile(ctx, fileToCopy, java.Name(), dirInApex, javaSharedLib, java)
+ fileToCopy := lib.DexJar()
+ return newApexFile(ctx, fileToCopy, lib.Name(), dirInApex, javaSharedLib, lib)
}
func apexFileForPrebuiltJavaLibrary(ctx android.BaseModuleContext, java *java.Import) apexFile {
@@ -1022,6 +1028,21 @@
filesInfo = append(filesInfo, af)
return true // track transitive dependencies
}
+ } else if sdkLib, ok := child.(*java.SdkLibrary); ok {
+ af := apexFileForJavaLibrary(ctx, sdkLib)
+ if !af.Ok() {
+ ctx.PropertyErrorf("java_libs", "%q is not configured to be compiled into dex", depName)
+ return false
+ }
+ filesInfo = append(filesInfo, af)
+
+ pf := sdkLib.PermissionFile()
+ if pf == nil {
+ ctx.PropertyErrorf("java_libs", "%q failed to generate permission XML", depName)
+ return false
+ }
+ filesInfo = append(filesInfo, newApexFile(ctx, pf, pf.Base(), "etc/permissions", etc, nil))
+ return true // track transitive dependencies
} else if javaLib, ok := child.(*java.Import); ok {
af := apexFileForPrebuiltJavaLibrary(ctx, javaLib)
if !af.Ok() {