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
This commit is contained in:
@@ -22,7 +22,6 @@ import (
|
||||
|
||||
"android/soong/android"
|
||||
"android/soong/cc"
|
||||
"android/soong/java"
|
||||
|
||||
"github.com/google/blueprint/proptools"
|
||||
)
|
||||
@@ -119,7 +118,7 @@ func (a *apexBundle) androidMkForFiles(w io.Writer, apexName, moduleDir string)
|
||||
}
|
||||
}
|
||||
if fi.class == javaSharedLib {
|
||||
javaModule := fi.module.(*java.Library)
|
||||
javaModule := fi.module.(javaLibrary)
|
||||
// soong_java_prebuilt.mk sets LOCAL_MODULE_SUFFIX := .jar Therefore
|
||||
// we need to remove the suffix from LOCAL_MODULE_STEM, otherwise
|
||||
// we will have foo.jar.jar
|
||||
|
||||
27
apex/apex.go
27
apex/apex.go
@@ -872,10 +872,16 @@ func apexFileForShBinary(ctx android.BaseModuleContext, sh *android.ShBinary) ap
|
||||
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 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
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() {
|
||||
|
||||
@@ -306,6 +306,7 @@ func testApexContext(t *testing.T, bp string, handlers ...testCustomizer) (*andr
|
||||
java.RegisterJavaBuildComponents(ctx)
|
||||
java.RegisterSystemModulesBuildComponents(ctx)
|
||||
java.RegisterAppBuildComponents(ctx)
|
||||
ctx.RegisterModuleType("java_sdk_library", java.SdkLibraryFactory)
|
||||
|
||||
ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
|
||||
ctx.PreArchMutators(func(ctx android.RegisterMutatorsContext) {
|
||||
@@ -3252,6 +3253,44 @@ func TestLegacyAndroid10Support(t *testing.T) {
|
||||
ensureContains(t, args["opt_flags"], "--manifest_json "+module.Output("apex_manifest.json").Output.String())
|
||||
}
|
||||
|
||||
func TestJavaSDKLibrary(t *testing.T) {
|
||||
ctx, _ := testApex(t, `
|
||||
apex {
|
||||
name: "myapex",
|
||||
key: "myapex.key",
|
||||
java_libs: ["foo"],
|
||||
}
|
||||
|
||||
apex_key {
|
||||
name: "myapex.key",
|
||||
public_key: "testkey.avbpubkey",
|
||||
private_key: "testkey.pem",
|
||||
}
|
||||
|
||||
java_sdk_library {
|
||||
name: "foo",
|
||||
srcs: ["a.java"],
|
||||
api_packages: ["foo"],
|
||||
}
|
||||
`, withFiles(map[string][]byte{
|
||||
"api/current.txt": nil,
|
||||
"api/removed.txt": nil,
|
||||
"api/system-current.txt": nil,
|
||||
"api/system-removed.txt": nil,
|
||||
"api/test-current.txt": nil,
|
||||
"api/test-removed.txt": nil,
|
||||
}))
|
||||
|
||||
// java_sdk_library installs both impl jar and permission XML
|
||||
ensureExactContents(t, ctx, "myapex", []string{
|
||||
"javalib/foo.jar",
|
||||
"etc/permissions/foo.xml",
|
||||
})
|
||||
// Permission XML should point to the activated path of impl jar of java_sdk_library
|
||||
genXMLCommand := ctx.ModuleForTests("foo", "android_common_myapex").Output("foo.xml").RuleParams.Command
|
||||
ensureContains(t, genXMLCommand, `<library name="foo" file="/apex/myapex/javalib/foo.jar"`)
|
||||
}
|
||||
|
||||
func TestRejectNonInstallableJavaLibrary(t *testing.T) {
|
||||
testApexError(t, `"myjar" is not configured to be compiled into dex`, `
|
||||
apex {
|
||||
|
||||
Reference in New Issue
Block a user