summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/androidmk.go10
-rwxr-xr-xjava/app.go2
-rw-r--r--java/hiddenapi_singleton.go23
-rw-r--r--java/java.go10
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))