Loading apex/apex_test.go +24 −1 Original line number Diff line number Diff line Loading @@ -4495,6 +4495,12 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { } } checkHiddenAPIIndexInputs := func(t *testing.T, ctx *android.TestContext, expectedInputs string) { hiddenAPIIndex := ctx.SingletonForTests("hiddenapi_index") indexRule := hiddenAPIIndex.Rule("singleton-merged-hiddenapi-index") java.CheckHiddenAPIRuleInputs(t, expectedInputs, indexRule) } t.Run("prebuilt only", func(t *testing.T) { bp := ` prebuilt_apex { Loading @@ -4519,6 +4525,10 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { ctx := testDexpreoptWithApexes(t, bp, "", transform) checkBootDexJarPath(t, ctx, ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar") // Make sure that the dex file from the prebuilt_apex does NOT contribute to the hiddenapi index // file. checkHiddenAPIIndexInputs(t, ctx, ``) }) t.Run("prebuilt with source library preferred", func(t *testing.T) { Loading Loading @@ -4588,6 +4598,10 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { ctx := testDexpreoptWithApexes(t, bp, "", transform) checkBootDexJarPath(t, ctx, ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar") // Make sure that the dex file from the prebuilt_apex does NOT contribute to the hiddenapi index // file. checkHiddenAPIIndexInputs(t, ctx, ``) }) t.Run("prebuilt with source apex preferred", func(t *testing.T) { Loading Loading @@ -4632,6 +4646,11 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { ctx := testDexpreoptWithApexes(t, bp, "", transform) checkBootDexJarPath(t, ctx, ".intermediates/libfoo/android_common_apex10000/hiddenapi/libfoo.jar") // Make sure that the dex file from the prebuilt_apex contributes to the hiddenapi index file. checkHiddenAPIIndexInputs(t, ctx, ` .intermediates/libfoo/android_common_apex10000/hiddenapi/index.csv `) }) t.Run("prebuilt preferred with source apex disabled", func(t *testing.T) { Loading Loading @@ -4678,6 +4697,10 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { ctx := testDexpreoptWithApexes(t, bp, "", transform) checkBootDexJarPath(t, ctx, ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar") // Make sure that the dex file from the prebuilt_apex does NOT contribute to the hiddenapi index // file. checkHiddenAPIIndexInputs(t, ctx, ``) }) } Loading Loading @@ -6317,7 +6340,7 @@ func testDexpreoptWithApexes(t *testing.T, bp, errmsg string, transformDexpreopt dexpreopt.SetTestGlobalConfig(config, dexpreoptConfig) // Make sure that any changes to these dexpreopt properties are mirrored in the corresponding // product variables that are used by hiddenapi. // product variables. config.TestProductVariables.BootJars = dexpreoptConfig.BootJars config.TestProductVariables.UpdatableBootJars = dexpreoptConfig.UpdatableBootJars Loading java/hiddenapi.go +16 −11 Original line number Diff line number Diff line Loading @@ -123,19 +123,21 @@ func (h *hiddenAPI) initHiddenAPI(ctx android.BaseModuleContext, name string) { h.annotationsOnly = strings.HasSuffix(name, "-hiddenapi") } // hiddenAPI is called by any module that could contribute to the hiddenapi processing. // hiddenAPIExtractAndEncode is called by any module that could contribute to the hiddenapi // processing. // // It ignores any module that has not had initHiddenApi() called on it and which is not in the boot // jar list. // // Otherwise, it generates ninja rules to do the following: // 1. Generates CSV files needed for hiddenapi processing. // 1. Extract information needed for hiddenapi processing from the module and output it into CSV // files. // 2. Conditionally adds the supplied dex file to the list of files used to generate the // hiddenAPISingletonPathsStruct.stubsFlag file. // 3. Conditionally creates a copy of the supplied dex file into which it has encoded the hiddenapi // flags and returns this instead of the supplied dex jar, otherwise simply returns the supplied // dex jar. func (h *hiddenAPI) hiddenAPI(ctx android.ModuleContext, name string, primary bool, dexJar android.OutputPath, func (h *hiddenAPI) hiddenAPIExtractAndEncode(ctx android.ModuleContext, name string, primary bool, dexJar android.OutputPath, implementationJar android.Path, uncompressDex bool) android.OutputPath { if !h.active { Loading @@ -146,13 +148,7 @@ func (h *hiddenAPI) hiddenAPI(ctx android.ModuleContext, name string, primary bo // used as a source of information for hidden API processing otherwise it will result in // duplicate entries in the files. if primary { // Create ninja rules to generate various CSV files needed by hiddenapi and store the paths // in the hiddenAPI structure. h.hiddenAPIGenerateCSV(ctx, implementationJar) // Save the unencoded dex jar so it can be used when generating the // hiddenAPISingletonPathsStruct.stubFlags file. h.bootDexJarPath = dexJar h.hiddenAPIExtractInformation(ctx, dexJar, implementationJar) } if !h.annotationsOnly { Loading @@ -168,7 +164,12 @@ func (h *hiddenAPI) hiddenAPI(ctx android.ModuleContext, name string, primary bo return dexJar } func (h *hiddenAPI) hiddenAPIGenerateCSV(ctx android.ModuleContext, classesJar android.Path) { // hiddenAPIExtractInformation generates ninja rules to extract the information from the classes // jar, and outputs it to the appropriate module specific CSV file. // // It also makes the dex jar available for use when generating the // hiddenAPISingletonPathsStruct.stubFlags. func (h *hiddenAPI) hiddenAPIExtractInformation(ctx android.ModuleContext, dexJar, classesJar android.Path) { stubFlagsCSV := hiddenAPISingletonPaths(ctx).stubFlags flagsCSV := android.PathForModuleOut(ctx, "hiddenapi", "flags.csv") Loading Loading @@ -207,6 +208,10 @@ func (h *hiddenAPI) hiddenAPIGenerateCSV(ctx android.ModuleContext, classesJar a FlagWithOutput("--output=", indexCSV) rule.Build("merged-hiddenapi-index", "Merged Hidden API index") h.indexCSVPath = indexCSV // Save the unencoded dex jar so it can be used when generating the // hiddenAPISingletonPathsStruct.stubFlags file. h.bootDexJarPath = dexJar } var hiddenAPIEncodeDexRule = pctx.AndroidStaticRule("hiddenAPIEncodeDex", blueprint.RuleParams{ Loading java/hiddenapi_singleton_test.go +1 −9 Original line number Diff line number Diff line Loading @@ -76,14 +76,6 @@ func TestHiddenAPISingleton(t *testing.T) { } } func checkRuleInputs(t *testing.T, expected string, hiddenAPIRule android.TestingBuildParams) { actual := strings.TrimSpace(strings.Join(android.NormalizePathsForTesting(hiddenAPIRule.Implicits), "\n")) expected = strings.TrimSpace(expected) if actual != expected { t.Errorf("Expected hiddenapi rule inputs:\n%s\nactual inputs:\n%s", expected, actual) } } func TestHiddenAPIIndexSingleton(t *testing.T) { ctx, _ := testHiddenAPIBootJars(t, ` java_library { Loading @@ -108,7 +100,7 @@ func TestHiddenAPIIndexSingleton(t *testing.T) { hiddenAPIIndex := ctx.SingletonForTests("hiddenapi_index") indexRule := hiddenAPIIndex.Rule("singleton-merged-hiddenapi-index") checkRuleInputs(t, ` CheckHiddenAPIRuleInputs(t, ` .intermediates/bar/android_common/hiddenapi/index.csv .intermediates/foo/android_common/hiddenapi/index.csv `, Loading java/java.go +2 −2 Original line number Diff line number Diff line Loading @@ -1805,7 +1805,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) { primary = primary && !j.IsReplacedByPrebuilt() // Hidden API CSV generation and dex encoding dexOutputFile = j.hiddenAPI.hiddenAPI(ctx, configurationName, primary, dexOutputFile, j.implementationJarFile, dexOutputFile = j.hiddenAPIExtractAndEncode(ctx, configurationName, primary, dexOutputFile, j.implementationJarFile, proptools.Bool(j.dexProperties.Uncompress_dex)) // merge dex jar with resources if necessary Loading Loading @@ -2965,7 +2965,7 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) { primary := j.Prebuilt().UsePrebuilt() // Hidden API CSV generation and dex encoding dexOutputFile = j.hiddenAPI.hiddenAPI(ctx, configurationName, primary, dexOutputFile, outputFile, dexOutputFile = j.hiddenAPIExtractAndEncode(ctx, configurationName, primary, dexOutputFile, outputFile, proptools.Bool(j.dexProperties.Uncompress_dex)) j.dexJarFile = dexOutputFile Loading java/testing.go +9 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ import ( "fmt" "reflect" "sort" "strings" "testing" "android/soong/android" Loading Loading @@ -237,3 +238,11 @@ func CheckModuleDependencies(t *testing.T, ctx *android.TestContext, name, varia t.Errorf("expected %#q, found %#q", expected, actual) } } func CheckHiddenAPIRuleInputs(t *testing.T, expected string, hiddenAPIRule android.TestingBuildParams) { actual := strings.TrimSpace(strings.Join(android.NormalizePathsForTesting(hiddenAPIRule.Implicits), "\n")) expected = strings.TrimSpace(expected) if actual != expected { t.Errorf("Expected hiddenapi rule inputs:\n%s\nactual inputs:\n%s", expected, actual) } } Loading
apex/apex_test.go +24 −1 Original line number Diff line number Diff line Loading @@ -4495,6 +4495,12 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { } } checkHiddenAPIIndexInputs := func(t *testing.T, ctx *android.TestContext, expectedInputs string) { hiddenAPIIndex := ctx.SingletonForTests("hiddenapi_index") indexRule := hiddenAPIIndex.Rule("singleton-merged-hiddenapi-index") java.CheckHiddenAPIRuleInputs(t, expectedInputs, indexRule) } t.Run("prebuilt only", func(t *testing.T) { bp := ` prebuilt_apex { Loading @@ -4519,6 +4525,10 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { ctx := testDexpreoptWithApexes(t, bp, "", transform) checkBootDexJarPath(t, ctx, ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar") // Make sure that the dex file from the prebuilt_apex does NOT contribute to the hiddenapi index // file. checkHiddenAPIIndexInputs(t, ctx, ``) }) t.Run("prebuilt with source library preferred", func(t *testing.T) { Loading Loading @@ -4588,6 +4598,10 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { ctx := testDexpreoptWithApexes(t, bp, "", transform) checkBootDexJarPath(t, ctx, ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar") // Make sure that the dex file from the prebuilt_apex does NOT contribute to the hiddenapi index // file. checkHiddenAPIIndexInputs(t, ctx, ``) }) t.Run("prebuilt with source apex preferred", func(t *testing.T) { Loading Loading @@ -4632,6 +4646,11 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { ctx := testDexpreoptWithApexes(t, bp, "", transform) checkBootDexJarPath(t, ctx, ".intermediates/libfoo/android_common_apex10000/hiddenapi/libfoo.jar") // Make sure that the dex file from the prebuilt_apex contributes to the hiddenapi index file. checkHiddenAPIIndexInputs(t, ctx, ` .intermediates/libfoo/android_common_apex10000/hiddenapi/index.csv `) }) t.Run("prebuilt preferred with source apex disabled", func(t *testing.T) { Loading Loading @@ -4678,6 +4697,10 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { ctx := testDexpreoptWithApexes(t, bp, "", transform) checkBootDexJarPath(t, ctx, ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar") // Make sure that the dex file from the prebuilt_apex does NOT contribute to the hiddenapi index // file. checkHiddenAPIIndexInputs(t, ctx, ``) }) } Loading Loading @@ -6317,7 +6340,7 @@ func testDexpreoptWithApexes(t *testing.T, bp, errmsg string, transformDexpreopt dexpreopt.SetTestGlobalConfig(config, dexpreoptConfig) // Make sure that any changes to these dexpreopt properties are mirrored in the corresponding // product variables that are used by hiddenapi. // product variables. config.TestProductVariables.BootJars = dexpreoptConfig.BootJars config.TestProductVariables.UpdatableBootJars = dexpreoptConfig.UpdatableBootJars Loading
java/hiddenapi.go +16 −11 Original line number Diff line number Diff line Loading @@ -123,19 +123,21 @@ func (h *hiddenAPI) initHiddenAPI(ctx android.BaseModuleContext, name string) { h.annotationsOnly = strings.HasSuffix(name, "-hiddenapi") } // hiddenAPI is called by any module that could contribute to the hiddenapi processing. // hiddenAPIExtractAndEncode is called by any module that could contribute to the hiddenapi // processing. // // It ignores any module that has not had initHiddenApi() called on it and which is not in the boot // jar list. // // Otherwise, it generates ninja rules to do the following: // 1. Generates CSV files needed for hiddenapi processing. // 1. Extract information needed for hiddenapi processing from the module and output it into CSV // files. // 2. Conditionally adds the supplied dex file to the list of files used to generate the // hiddenAPISingletonPathsStruct.stubsFlag file. // 3. Conditionally creates a copy of the supplied dex file into which it has encoded the hiddenapi // flags and returns this instead of the supplied dex jar, otherwise simply returns the supplied // dex jar. func (h *hiddenAPI) hiddenAPI(ctx android.ModuleContext, name string, primary bool, dexJar android.OutputPath, func (h *hiddenAPI) hiddenAPIExtractAndEncode(ctx android.ModuleContext, name string, primary bool, dexJar android.OutputPath, implementationJar android.Path, uncompressDex bool) android.OutputPath { if !h.active { Loading @@ -146,13 +148,7 @@ func (h *hiddenAPI) hiddenAPI(ctx android.ModuleContext, name string, primary bo // used as a source of information for hidden API processing otherwise it will result in // duplicate entries in the files. if primary { // Create ninja rules to generate various CSV files needed by hiddenapi and store the paths // in the hiddenAPI structure. h.hiddenAPIGenerateCSV(ctx, implementationJar) // Save the unencoded dex jar so it can be used when generating the // hiddenAPISingletonPathsStruct.stubFlags file. h.bootDexJarPath = dexJar h.hiddenAPIExtractInformation(ctx, dexJar, implementationJar) } if !h.annotationsOnly { Loading @@ -168,7 +164,12 @@ func (h *hiddenAPI) hiddenAPI(ctx android.ModuleContext, name string, primary bo return dexJar } func (h *hiddenAPI) hiddenAPIGenerateCSV(ctx android.ModuleContext, classesJar android.Path) { // hiddenAPIExtractInformation generates ninja rules to extract the information from the classes // jar, and outputs it to the appropriate module specific CSV file. // // It also makes the dex jar available for use when generating the // hiddenAPISingletonPathsStruct.stubFlags. func (h *hiddenAPI) hiddenAPIExtractInformation(ctx android.ModuleContext, dexJar, classesJar android.Path) { stubFlagsCSV := hiddenAPISingletonPaths(ctx).stubFlags flagsCSV := android.PathForModuleOut(ctx, "hiddenapi", "flags.csv") Loading Loading @@ -207,6 +208,10 @@ func (h *hiddenAPI) hiddenAPIGenerateCSV(ctx android.ModuleContext, classesJar a FlagWithOutput("--output=", indexCSV) rule.Build("merged-hiddenapi-index", "Merged Hidden API index") h.indexCSVPath = indexCSV // Save the unencoded dex jar so it can be used when generating the // hiddenAPISingletonPathsStruct.stubFlags file. h.bootDexJarPath = dexJar } var hiddenAPIEncodeDexRule = pctx.AndroidStaticRule("hiddenAPIEncodeDex", blueprint.RuleParams{ Loading
java/hiddenapi_singleton_test.go +1 −9 Original line number Diff line number Diff line Loading @@ -76,14 +76,6 @@ func TestHiddenAPISingleton(t *testing.T) { } } func checkRuleInputs(t *testing.T, expected string, hiddenAPIRule android.TestingBuildParams) { actual := strings.TrimSpace(strings.Join(android.NormalizePathsForTesting(hiddenAPIRule.Implicits), "\n")) expected = strings.TrimSpace(expected) if actual != expected { t.Errorf("Expected hiddenapi rule inputs:\n%s\nactual inputs:\n%s", expected, actual) } } func TestHiddenAPIIndexSingleton(t *testing.T) { ctx, _ := testHiddenAPIBootJars(t, ` java_library { Loading @@ -108,7 +100,7 @@ func TestHiddenAPIIndexSingleton(t *testing.T) { hiddenAPIIndex := ctx.SingletonForTests("hiddenapi_index") indexRule := hiddenAPIIndex.Rule("singleton-merged-hiddenapi-index") checkRuleInputs(t, ` CheckHiddenAPIRuleInputs(t, ` .intermediates/bar/android_common/hiddenapi/index.csv .intermediates/foo/android_common/hiddenapi/index.csv `, Loading
java/java.go +2 −2 Original line number Diff line number Diff line Loading @@ -1805,7 +1805,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) { primary = primary && !j.IsReplacedByPrebuilt() // Hidden API CSV generation and dex encoding dexOutputFile = j.hiddenAPI.hiddenAPI(ctx, configurationName, primary, dexOutputFile, j.implementationJarFile, dexOutputFile = j.hiddenAPIExtractAndEncode(ctx, configurationName, primary, dexOutputFile, j.implementationJarFile, proptools.Bool(j.dexProperties.Uncompress_dex)) // merge dex jar with resources if necessary Loading Loading @@ -2965,7 +2965,7 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) { primary := j.Prebuilt().UsePrebuilt() // Hidden API CSV generation and dex encoding dexOutputFile = j.hiddenAPI.hiddenAPI(ctx, configurationName, primary, dexOutputFile, outputFile, dexOutputFile = j.hiddenAPIExtractAndEncode(ctx, configurationName, primary, dexOutputFile, outputFile, proptools.Bool(j.dexProperties.Uncompress_dex)) j.dexJarFile = dexOutputFile Loading
java/testing.go +9 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ import ( "fmt" "reflect" "sort" "strings" "testing" "android/soong/android" Loading Loading @@ -237,3 +238,11 @@ func CheckModuleDependencies(t *testing.T, ctx *android.TestContext, name, varia t.Errorf("expected %#q, found %#q", expected, actual) } } func CheckHiddenAPIRuleInputs(t *testing.T, expected string, hiddenAPIRule android.TestingBuildParams) { actual := strings.TrimSpace(strings.Join(android.NormalizePathsForTesting(hiddenAPIRule.Implicits), "\n")) expected = strings.TrimSpace(expected) if actual != expected { t.Errorf("Expected hiddenapi rule inputs:\n%s\nactual inputs:\n%s", expected, actual) } }