Merge "Refactor special handling of hidden API encoding for master-art" am: fdd9743609 am: 1b5e8cdbee
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707569
Change-Id: I49f3ee3a7bb0eb9f26440a278c5f1ec56a6037bf
diff --git a/apex/apex_test.go b/apex/apex_test.go
index afc395d..68182a7 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -4542,7 +4542,12 @@
}
func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
- preparer := java.FixtureConfigureBootJars("myapex:libfoo", "myapex:libbar")
+ preparer := android.GroupFixturePreparers(
+ java.FixtureConfigureBootJars("myapex:libfoo", "myapex:libbar"),
+ // Make sure that the frameworks/base/Android.bp file exists as otherwise hidden API encoding
+ // is disabled.
+ android.FixtureAddTextFile("frameworks/base/Android.bp", ""),
+ )
checkBootDexJarPath := func(t *testing.T, ctx *android.TestContext, stem string, bootDexJarPath string) {
t.Helper()
diff --git a/java/hiddenapi.go b/java/hiddenapi.go
index 2c0655f..829c473 100644
--- a/java/hiddenapi.go
+++ b/java/hiddenapi.go
@@ -92,6 +92,12 @@
h.configurationName = configurationName
+ // If the frameworks/base directories does not exist and no prebuilt hidden API flag files have
+ // been configured then it is not possible to do hidden API encoding.
+ if !ctx.Config().FrameworksBaseDirExists(ctx) && ctx.Config().PrebuiltHiddenApiDir(ctx) == "" {
+ return
+ }
+
// It is important that hiddenapi information is only gathered for/from modules that are actually
// on the boot jars list because the runtime only enforces access to the hidden API for the
// bootclassloader. If information is gathered for modules not on the list then that will cause
@@ -303,11 +309,7 @@
}
enforceHiddenApiFlagsToAllMembers := true
- // If frameworks/base doesn't exist we must be building with the 'master-art' manifest.
- // Disable assertion that all methods/fields have hidden API flags assigned.
- if !ctx.Config().FrameworksBaseDirExists(ctx) {
- enforceHiddenApiFlagsToAllMembers = false
- }
+
// b/149353192: when a module is instrumented, jacoco adds synthetic members
// $jacocoData and $jacocoInit. Since they don't exist when building the hidden API flags,
// don't complain when we don't find hidden API flags for the synthetic members.
diff --git a/java/hiddenapi_singleton.go b/java/hiddenapi_singleton.go
index 676a0e7..848aa59 100644
--- a/java/hiddenapi_singleton.go
+++ b/java/hiddenapi_singleton.go
@@ -117,7 +117,6 @@
}
type hiddenAPISingleton struct {
- flags android.Path
}
// hiddenAPI singleton rules
@@ -136,17 +135,10 @@
// consistency.
if ctx.Config().PrebuiltHiddenApiDir(ctx) != "" {
- h.flags = prebuiltFlagsRule(ctx)
+ prebuiltFlagsRule(ctx)
prebuiltIndexRule(ctx)
return
}
-
- // These rules depend on files located in frameworks/base, skip them if running in a tree that doesn't have them.
- if ctx.Config().FrameworksBaseDirExists(ctx) {
- h.flags = flagsRule(ctx)
- } else {
- h.flags = emptyFlagsRule(ctx)
- }
}
// Checks to see whether the supplied module variant is in the list of boot jars.
@@ -187,7 +179,7 @@
return true
}
-func prebuiltFlagsRule(ctx android.SingletonContext) android.Path {
+func prebuiltFlagsRule(ctx android.SingletonContext) {
outputPath := hiddenAPISingletonPaths(ctx).flags
inputPath := android.PathForSource(ctx, ctx.Config().PrebuiltHiddenApiDir(ctx), "hiddenapi-flags.csv")
@@ -196,8 +188,6 @@
Output: outputPath,
Input: inputPath,
})
-
- return outputPath
}
func prebuiltIndexRule(ctx android.SingletonContext) {
@@ -211,28 +201,6 @@
})
}
-// flagsRule is a placeholder that simply returns the location of the file, the generation of the
-// ninja rules is done in generateHiddenAPIBuildActions.
-func flagsRule(ctx android.SingletonContext) android.Path {
- outputPath := hiddenAPISingletonPaths(ctx).flags
- return outputPath
-}
-
-// emptyFlagsRule creates a rule to build an empty hiddenapi-flags.csv, which is needed by master-art-host builds that
-// have a partial manifest without frameworks/base but still need to build a boot image.
-func emptyFlagsRule(ctx android.SingletonContext) android.Path {
- rule := android.NewRuleBuilder(pctx, ctx)
-
- outputPath := hiddenAPISingletonPaths(ctx).flags
-
- rule.Command().Text("rm").Flag("-f").Output(outputPath)
- rule.Command().Text("touch").Output(outputPath)
-
- rule.Build("emptyHiddenAPIFlagsFile", "empty hiddenapi flags")
-
- return outputPath
-}
-
// tempPathForRestat creates a path of the same type as the supplied type but with a name of
// <path>.tmp.
//
diff --git a/java/hiddenapi_singleton_test.go b/java/hiddenapi_singleton_test.go
index 3ab2277..e6b45ac 100644
--- a/java/hiddenapi_singleton_test.go
+++ b/java/hiddenapi_singleton_test.go
@@ -60,10 +60,7 @@
}
func TestHiddenAPISingletonWithSourceAndPrebuiltPreferredButNoDex(t *testing.T) {
- expectedErrorMessage :=
- "hiddenapi has determined that the source module \"foo\" should be ignored as it has been" +
- " replaced by the prebuilt module \"prebuilt_foo\" but unfortunately it does not provide a" +
- " suitable boot dex jar"
+ expectedErrorMessage := "module prebuilt_foo{os:android,arch:common} does not provide a dex jar"
android.GroupFixturePreparers(
hiddenApiFixtureFactory,