summaryrefslogtreecommitdiff
path: root/java/java.go
diff options
context:
space:
mode:
author Spandan Das <spandandas@google.com> 2023-03-22 04:27:05 +0000
committer Spandan Das <spandandas@google.com> 2023-03-23 20:41:22 +0000
commitcb368ea88adb2b7c9b196e5e5d2c57e7b8a0f421 (patch)
tree5bc647b3cb166490644f3cc71679c8eb6b851bfe /java/java.go
parentef5b7e4e36dec796a886fc700e6eee4fb2337894 (diff)
Compile stubs to .dex
Although stubs are not installable on device, we need to compile .dex to support hiddenapi metadata generation. Bug: 271443071 Test: Built out/soong/hiddenapi/hiddenapi-stub-flags.txt with aosp/2487266 (There is still some delta due to missing signatures in child classes) (Will address them in a followup CL) Change-Id: Iac1330c449934085a479c487a1489aa1695a75ee Change-Id: I1baa9c0f45eb8fc93f5c3177389ea5a2b7ca0a0b
Diffstat (limited to 'java/java.go')
-rw-r--r--java/java.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/java/java.go b/java/java.go
index 0841dad5e..d15163d22 100644
--- a/java/java.go
+++ b/java/java.go
@@ -1613,10 +1613,15 @@ type ApiLibrary struct {
android.ModuleBase
android.DefaultableModuleBase
+ hiddenAPI
+ dexer
+
properties JavaApiLibraryProperties
stubsSrcJar android.WritablePath
stubsJar android.WritablePath
+ // .dex of stubs, used for hiddenapi processing
+ dexJarFile OptionalDexJarPath
}
type JavaApiLibraryProperties struct {
@@ -1794,6 +1799,20 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
Inputs(staticLibs)
builder.Build("merge_zips", "merge jar files")
+ // compile stubs to .dex for hiddenapi processing
+ dexParams := &compileDexParams{
+ flags: javaBuilderFlags{},
+ sdkVersion: al.SdkVersion(ctx),
+ minSdkVersion: al.MinSdkVersion(ctx),
+ classesJar: al.stubsJar,
+ jarName: ctx.ModuleName() + ".jar",
+ }
+ dexOutputFile := al.dexer.compileDex(ctx, dexParams)
+ uncompressed := true
+ al.initHiddenAPI(ctx, makeDexJarPathFromPath(dexOutputFile), al.stubsJar, &uncompressed)
+ dexOutputFile = al.hiddenAPIEncodeDex(ctx, dexOutputFile)
+ al.dexJarFile = makeDexJarPathFromPath(dexOutputFile)
+
ctx.Phony(ctx.ModuleName(), al.stubsJar)
ctx.SetProvider(JavaInfoProvider, JavaInfo{
@@ -1801,6 +1820,32 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
})
}
+func (al *ApiLibrary) DexJarBuildPath() OptionalDexJarPath {
+ return al.dexJarFile
+}
+
+func (al *ApiLibrary) DexJarInstallPath() android.Path {
+ return al.dexJarFile.Path()
+}
+
+func (al *ApiLibrary) ClassLoaderContexts() dexpreopt.ClassLoaderContextMap {
+ return nil
+}
+
+// java_api_library constitutes the sdk, and does not build against one
+func (al *ApiLibrary) SdkVersion(ctx android.EarlyModuleContext) android.SdkSpec {
+ return android.SdkSpecNone
+}
+
+// java_api_library is always at "current". Return FutureApiLevel
+func (al *ApiLibrary) MinSdkVersion(ctx android.EarlyModuleContext) android.ApiLevel {
+ return android.FutureApiLevel
+}
+
+// implement the following interfaces for hiddenapi processing
+var _ hiddenAPIModule = (*ApiLibrary)(nil)
+var _ UsesLibraryDependency = (*ApiLibrary)(nil)
+
//
// Java prebuilts
//