diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/androidmk.go | 10 | ||||
-rwxr-xr-x | java/app.go | 2 | ||||
-rw-r--r-- | java/hiddenapi_singleton.go | 23 | ||||
-rw-r--r-- | java/java.go | 10 |
4 files changed, 37 insertions, 8 deletions
diff --git a/java/androidmk.go b/java/androidmk.go index f4e3c3481..11fea82d6 100644 --- a/java/androidmk.go +++ b/java/androidmk.go @@ -24,7 +24,7 @@ import ( func (library *Library) AndroidMkEntriesHostDex() android.AndroidMkEntries { hostDexNeeded := Bool(library.deviceProperties.Hostdex) && !library.Host() if !library.IsForPlatform() { - // If the platform variant is available, don't emit hostdex modules from the APEX variants + // Don't emit hostdex modules from the APEX variants hostDexNeeded = false } @@ -62,8 +62,14 @@ func (library *Library) AndroidMkEntries() []android.AndroidMkEntries { var entriesList []android.AndroidMkEntries mainEntries := android.AndroidMkEntries{Disabled: true} + // For a java library built for an APEX, we don't need Make module - if library.IsForPlatform() { + hideFromMake := !library.IsForPlatform() + // If not available for platform, don't emit to make. + if !library.ApexModuleBase.AvailableFor(android.AvailableToPlatform) { + hideFromMake = true + } + if !hideFromMake { mainEntries = android.AndroidMkEntries{ Class: "JAVA_LIBRARIES", OutputFile: android.OptionalPathForPath(library.outputFile), diff --git a/java/app.go b/java/app.go index 7595e36a6..9fa7179fd 100755 --- a/java/app.go +++ b/java/app.go @@ -636,7 +636,7 @@ func (a *AndroidTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { fixedConfig := android.PathForModuleOut(ctx, "test_config_fixer", "AndroidTest.xml") rule := android.NewRuleBuilder() rule.Command().BuiltTool(ctx, "test_config_fixer"). - FlagWithArg("--manifest ", a.manifestPath.String()). + FlagWithInput("--manifest ", a.manifestPath). FlagWithArg("--package-name ", *a.overridableAppProperties.Package_name). Input(a.testConfig). Output(fixedConfig) diff --git a/java/hiddenapi_singleton.go b/java/hiddenapi_singleton.go index ad84cdea2..e9e4a45b0 100644 --- a/java/hiddenapi_singleton.go +++ b/java/hiddenapi_singleton.go @@ -16,6 +16,7 @@ package java import ( "fmt" + "strings" "android/soong/android" ) @@ -152,11 +153,23 @@ 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() { + // Don't add multiple variants of the same library to bootDexJars, otherwise + // hiddenapi tool will complain about duplicated classes. Such multiple variants + // of the same library can happen when the library is included in one or more APEXes. + // TODO(b/146308764): remove this heuristic + if a, ok := module.(android.ApexModule); ok && android.InAnyApex(module.Name()) { + if a.AvailableFor("//apex_available:platform") && !a.IsForPlatform() { + // skip the apex variants if the jar is available for the platform + return + } + apexName := a.ApexName() + if strings.Contains(apexName, "test") { + // skip the if the jar is in test APEX + return + } + + if strings.Contains(apexName, "com.android.art") && apexName != "com.android.art.release" { + // skip the ART APEX variants other than com.android.art.release return } } diff --git a/java/java.go b/java/java.go index d8db5f8a4..59bfaf758 100644 --- a/java/java.go +++ b/java/java.go @@ -559,6 +559,16 @@ func (j *Module) targetSdkVersion() string { return j.sdkVersion() } +func (j *Module) AvailableFor(what string) bool { + if what == android.AvailableToPlatform && Bool(j.deviceProperties.Hostdex) { + // Exception: for hostdex: true libraries, the platform variant is created + // even if it's not marked as available to platform. In that case, the platform + // variant is used only for the hostdex and not installed to the device. + return true + } + return j.ApexModuleBase.AvailableFor(what) +} + func (j *Module) deps(ctx android.BottomUpMutatorContext) { if ctx.Device() { sdkDep := decodeSdkDep(ctx, sdkContext(j)) |