diff --git a/apex/apex_test.go b/apex/apex_test.go index afc395d21..68182a712 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -4542,7 +4542,12 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) { } 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 2c0655f93..829c47383 100644 --- a/java/hiddenapi.go +++ b/java/hiddenapi.go @@ -92,6 +92,12 @@ func (h *hiddenAPI) initHiddenAPI(ctx android.BaseModuleContext, configurationNa 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 @@ func hiddenAPIEncodeDex(ctx android.ModuleContext, output android.WritablePath, } 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 676a0e722..848aa59bc 100644 --- a/java/hiddenapi_singleton.go +++ b/java/hiddenapi_singleton.go @@ -117,7 +117,6 @@ func hiddenAPISingletonFactory() android.Singleton { } type hiddenAPISingleton struct { - flags android.Path } // hiddenAPI singleton rules @@ -136,17 +135,10 @@ func (h *hiddenAPISingleton) GenerateBuildActions(ctx android.SingletonContext) // 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 @@ func isModuleInConfiguredList(ctx android.BaseModuleContext, module android.Modu 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 @@ func prebuiltFlagsRule(ctx android.SingletonContext) android.Path { Output: outputPath, Input: inputPath, }) - - return outputPath } func prebuiltIndexRule(ctx android.SingletonContext) { @@ -211,28 +201,6 @@ func prebuiltIndexRule(ctx android.SingletonContext) { }) } -// 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 // .tmp. // diff --git a/java/hiddenapi_singleton_test.go b/java/hiddenapi_singleton_test.go index 3ab22772a..e6b45ac20 100644 --- a/java/hiddenapi_singleton_test.go +++ b/java/hiddenapi_singleton_test.go @@ -60,10 +60,7 @@ func TestHiddenAPISingleton(t *testing.T) { } 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,