Loading java/hiddenapi_singleton.go +23 −20 Original line number Diff line number Diff line Loading @@ -92,31 +92,34 @@ func (h *hiddenAPISingleton) MakeVars(ctx android.MakeVarsContext) { // stubFlagsRule creates the rule to build hiddenapi-stub-flags.txt out of dex jars from stub modules and boot image // modules. func stubFlagsRule(ctx android.SingletonContext) { // Public API stubs publicStubModules := []string{ "android_stubs_current", var publicStubModules []string var systemStubModules []string var testStubModules []string var corePlatformStubModules []string if ctx.Config().AlwaysUsePrebuiltSdks() { // Build configuration mandates using prebuilt stub modules publicStubModules = append(publicStubModules, "sdk_public_current_android") systemStubModules = append(systemStubModules, "sdk_system_current_android") testStubModules = append(testStubModules, "sdk_test_current_android") } else { // Use stub modules built from source publicStubModules = append(publicStubModules, "android_stubs_current") systemStubModules = append(systemStubModules, "android_system_stubs_current") testStubModules = append(testStubModules, "android_test_stubs_current") } // We do not have prebuilts of the core platform api yet corePlatformStubModules = append(corePlatformStubModules, "legacy.core.platform.api.stubs") // Add the android.test.base to the set of stubs only if the android.test.base module is on // the boot jars list as the runtime will only enforce hiddenapi access against modules on // that list. if inList("android.test.base", ctx.Config().BootJars()) && !ctx.Config().AlwaysUsePrebuiltSdks() { if inList("android.test.base", ctx.Config().BootJars()) { if ctx.Config().AlwaysUsePrebuiltSdks() { publicStubModules = append(publicStubModules, "sdk_public_current_android.test.base") } else { publicStubModules = append(publicStubModules, "android.test.base.stubs") } // System API stubs systemStubModules := []string{ "android_system_stubs_current", } // Test API stubs testStubModules := []string{ "android_test_stubs_current", } // Core Platform API stubs corePlatformStubModules := []string{ "legacy.core.platform.api.stubs", } // Allow products to define their own stubs for custom product jars that apps can use. Loading java/hiddenapi_singleton_test.go +90 −7 Original line number Diff line number Diff line Loading @@ -16,8 +16,11 @@ package java import ( "android/soong/android" "fmt" "strings" "testing" "github.com/google/blueprint/proptools" ) func testConfigWithBootJars(bp string, bootJars []string) android.Config { Loading @@ -32,19 +35,30 @@ func testContextWithHiddenAPI() *android.TestContext { return ctx } func testHiddenAPI(t *testing.T, bp string, bootJars []string) (*android.TestContext, android.Config) { func testHiddenAPIWithConfig(t *testing.T, config android.Config) *android.TestContext { t.Helper() config := testConfigWithBootJars(bp, bootJars) ctx := testContextWithHiddenAPI() run(t, ctx, config) return ctx } return ctx, config func testHiddenAPIBootJars(t *testing.T, bp string, bootJars []string) (*android.TestContext, android.Config) { config := testConfigWithBootJars(bp, bootJars) return testHiddenAPIWithConfig(t, config), config } func testHiddenAPIUnbundled(t *testing.T, unbundled bool) (*android.TestContext, android.Config) { config := testConfig(nil, ``, nil) config.TestProductVariables.Always_use_prebuilt_sdks = proptools.BoolPtr(unbundled) return testHiddenAPIWithConfig(t, config), config } func TestHiddenAPISingleton(t *testing.T) { ctx, _ := testHiddenAPI(t, ` ctx, _ := testHiddenAPIBootJars(t, ` java_library { name: "foo", srcs: ["a.java"], Loading @@ -61,7 +75,7 @@ func TestHiddenAPISingleton(t *testing.T) { } func TestHiddenAPISingletonWithPrebuilt(t *testing.T) { ctx, _ := testHiddenAPI(t, ` ctx, _ := testHiddenAPIBootJars(t, ` java_import { name: "foo", jars: ["a.jar"], Loading @@ -78,7 +92,7 @@ func TestHiddenAPISingletonWithPrebuilt(t *testing.T) { } func TestHiddenAPISingletonWithPrebuiltUseSource(t *testing.T) { ctx, _ := testHiddenAPI(t, ` ctx, _ := testHiddenAPIBootJars(t, ` java_library { name: "foo", srcs: ["a.java"], Loading Loading @@ -107,7 +121,7 @@ func TestHiddenAPISingletonWithPrebuiltUseSource(t *testing.T) { } func TestHiddenAPISingletonWithPrebuiltOverrideSource(t *testing.T) { ctx, _ := testHiddenAPI(t, ` ctx, _ := testHiddenAPIBootJars(t, ` java_library { name: "foo", srcs: ["a.java"], Loading @@ -134,3 +148,72 @@ func TestHiddenAPISingletonWithPrebuiltOverrideSource(t *testing.T) { t.Errorf("Did not expect %s in hiddenapi command, but it was present: %s", fromSourceJarArg, hiddenapiRule.RuleParams.Command) } } func TestHiddenAPISingletonSdks(t *testing.T) { testCases := []struct { name string unbundledBuild bool publicStub string systemStub string testStub string corePlatformStub string }{ { name: "testBundled", unbundledBuild: false, publicStub: "android_stubs_current", systemStub: "android_system_stubs_current", testStub: "android_test_stubs_current", corePlatformStub: "legacy.core.platform.api.stubs", }, { name: "testUnbundled", unbundledBuild: true, publicStub: "sdk_public_current_android", systemStub: "sdk_system_current_android", testStub: "sdk_test_current_android", corePlatformStub: "legacy.core.platform.api.stubs", }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { ctx, _ := testHiddenAPIUnbundled(t, tc.unbundledBuild) hiddenAPI := ctx.SingletonForTests("hiddenapi") hiddenapiRule := hiddenAPI.Rule("hiddenapi") wantPublicStubs := "--public-stub-classpath=" + generateSdkDexPath(tc.publicStub, tc.unbundledBuild) if !strings.Contains(hiddenapiRule.RuleParams.Command, wantPublicStubs) { t.Errorf("Expected %s in hiddenapi command, but it was not present: %s", wantPublicStubs, hiddenapiRule.RuleParams.Command) } wantSystemStubs := "--system-stub-classpath=" + generateSdkDexPath(tc.systemStub, tc.unbundledBuild) if !strings.Contains(hiddenapiRule.RuleParams.Command, wantSystemStubs) { t.Errorf("Expected %s in hiddenapi command, but it was not present: %s", wantSystemStubs, hiddenapiRule.RuleParams.Command) } wantTestStubs := "--test-stub-classpath=" + generateSdkDexPath(tc.testStub, tc.unbundledBuild) if !strings.Contains(hiddenapiRule.RuleParams.Command, wantTestStubs) { t.Errorf("Expected %s in hiddenapi command, but it was not present: %s", wantTestStubs, hiddenapiRule.RuleParams.Command) } wantCorePlatformStubs := "--core-platform-stub-classpath=" + generateDexPath(tc.corePlatformStub) if !strings.Contains(hiddenapiRule.RuleParams.Command, wantCorePlatformStubs) { t.Errorf("Expected %s in hiddenapi command, but it was not present: %s", wantCorePlatformStubs, hiddenapiRule.RuleParams.Command) } }) } } func generateDexedPath(subDir, dex, module string) string { return fmt.Sprintf("%s/.intermediates/%s/android_common/%s/%s.jar", buildDir, subDir, dex, module) } func generateDexPath(module string) string { return generateDexedPath(module, "dex", module) } func generateSdkDexPath(module string, unbundled bool) string { if unbundled { return generateDexedPath("prebuilts/sdk/"+module, "dex", module) } return generateDexPath(module) } java/testing.go +1 −1 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ func TestConfig(buildDir string, env map[string]string, bp string, fs map[string "prebuilts/sdk/30/system/api/bar-removed.txt": nil, "prebuilts/sdk/30/test/api/bar-removed.txt": nil, "prebuilts/sdk/tools/core-lambda-stubs.jar": nil, "prebuilts/sdk/Android.bp": []byte(`prebuilt_apis { name: "sdk", api_dirs: ["14", "28", "30", "current"],}`), "prebuilts/sdk/Android.bp": []byte(`prebuilt_apis { name: "sdk", api_dirs: ["14", "28", "30", "current"], imports_sdk_version: "none", imports_compile_dex:true,}`), "bin.py": nil, python.StubTemplateHost: []byte(`PYTHON_BINARY = '%interpreter%' Loading Loading
java/hiddenapi_singleton.go +23 −20 Original line number Diff line number Diff line Loading @@ -92,31 +92,34 @@ func (h *hiddenAPISingleton) MakeVars(ctx android.MakeVarsContext) { // stubFlagsRule creates the rule to build hiddenapi-stub-flags.txt out of dex jars from stub modules and boot image // modules. func stubFlagsRule(ctx android.SingletonContext) { // Public API stubs publicStubModules := []string{ "android_stubs_current", var publicStubModules []string var systemStubModules []string var testStubModules []string var corePlatformStubModules []string if ctx.Config().AlwaysUsePrebuiltSdks() { // Build configuration mandates using prebuilt stub modules publicStubModules = append(publicStubModules, "sdk_public_current_android") systemStubModules = append(systemStubModules, "sdk_system_current_android") testStubModules = append(testStubModules, "sdk_test_current_android") } else { // Use stub modules built from source publicStubModules = append(publicStubModules, "android_stubs_current") systemStubModules = append(systemStubModules, "android_system_stubs_current") testStubModules = append(testStubModules, "android_test_stubs_current") } // We do not have prebuilts of the core platform api yet corePlatformStubModules = append(corePlatformStubModules, "legacy.core.platform.api.stubs") // Add the android.test.base to the set of stubs only if the android.test.base module is on // the boot jars list as the runtime will only enforce hiddenapi access against modules on // that list. if inList("android.test.base", ctx.Config().BootJars()) && !ctx.Config().AlwaysUsePrebuiltSdks() { if inList("android.test.base", ctx.Config().BootJars()) { if ctx.Config().AlwaysUsePrebuiltSdks() { publicStubModules = append(publicStubModules, "sdk_public_current_android.test.base") } else { publicStubModules = append(publicStubModules, "android.test.base.stubs") } // System API stubs systemStubModules := []string{ "android_system_stubs_current", } // Test API stubs testStubModules := []string{ "android_test_stubs_current", } // Core Platform API stubs corePlatformStubModules := []string{ "legacy.core.platform.api.stubs", } // Allow products to define their own stubs for custom product jars that apps can use. Loading
java/hiddenapi_singleton_test.go +90 −7 Original line number Diff line number Diff line Loading @@ -16,8 +16,11 @@ package java import ( "android/soong/android" "fmt" "strings" "testing" "github.com/google/blueprint/proptools" ) func testConfigWithBootJars(bp string, bootJars []string) android.Config { Loading @@ -32,19 +35,30 @@ func testContextWithHiddenAPI() *android.TestContext { return ctx } func testHiddenAPI(t *testing.T, bp string, bootJars []string) (*android.TestContext, android.Config) { func testHiddenAPIWithConfig(t *testing.T, config android.Config) *android.TestContext { t.Helper() config := testConfigWithBootJars(bp, bootJars) ctx := testContextWithHiddenAPI() run(t, ctx, config) return ctx } return ctx, config func testHiddenAPIBootJars(t *testing.T, bp string, bootJars []string) (*android.TestContext, android.Config) { config := testConfigWithBootJars(bp, bootJars) return testHiddenAPIWithConfig(t, config), config } func testHiddenAPIUnbundled(t *testing.T, unbundled bool) (*android.TestContext, android.Config) { config := testConfig(nil, ``, nil) config.TestProductVariables.Always_use_prebuilt_sdks = proptools.BoolPtr(unbundled) return testHiddenAPIWithConfig(t, config), config } func TestHiddenAPISingleton(t *testing.T) { ctx, _ := testHiddenAPI(t, ` ctx, _ := testHiddenAPIBootJars(t, ` java_library { name: "foo", srcs: ["a.java"], Loading @@ -61,7 +75,7 @@ func TestHiddenAPISingleton(t *testing.T) { } func TestHiddenAPISingletonWithPrebuilt(t *testing.T) { ctx, _ := testHiddenAPI(t, ` ctx, _ := testHiddenAPIBootJars(t, ` java_import { name: "foo", jars: ["a.jar"], Loading @@ -78,7 +92,7 @@ func TestHiddenAPISingletonWithPrebuilt(t *testing.T) { } func TestHiddenAPISingletonWithPrebuiltUseSource(t *testing.T) { ctx, _ := testHiddenAPI(t, ` ctx, _ := testHiddenAPIBootJars(t, ` java_library { name: "foo", srcs: ["a.java"], Loading Loading @@ -107,7 +121,7 @@ func TestHiddenAPISingletonWithPrebuiltUseSource(t *testing.T) { } func TestHiddenAPISingletonWithPrebuiltOverrideSource(t *testing.T) { ctx, _ := testHiddenAPI(t, ` ctx, _ := testHiddenAPIBootJars(t, ` java_library { name: "foo", srcs: ["a.java"], Loading @@ -134,3 +148,72 @@ func TestHiddenAPISingletonWithPrebuiltOverrideSource(t *testing.T) { t.Errorf("Did not expect %s in hiddenapi command, but it was present: %s", fromSourceJarArg, hiddenapiRule.RuleParams.Command) } } func TestHiddenAPISingletonSdks(t *testing.T) { testCases := []struct { name string unbundledBuild bool publicStub string systemStub string testStub string corePlatformStub string }{ { name: "testBundled", unbundledBuild: false, publicStub: "android_stubs_current", systemStub: "android_system_stubs_current", testStub: "android_test_stubs_current", corePlatformStub: "legacy.core.platform.api.stubs", }, { name: "testUnbundled", unbundledBuild: true, publicStub: "sdk_public_current_android", systemStub: "sdk_system_current_android", testStub: "sdk_test_current_android", corePlatformStub: "legacy.core.platform.api.stubs", }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { ctx, _ := testHiddenAPIUnbundled(t, tc.unbundledBuild) hiddenAPI := ctx.SingletonForTests("hiddenapi") hiddenapiRule := hiddenAPI.Rule("hiddenapi") wantPublicStubs := "--public-stub-classpath=" + generateSdkDexPath(tc.publicStub, tc.unbundledBuild) if !strings.Contains(hiddenapiRule.RuleParams.Command, wantPublicStubs) { t.Errorf("Expected %s in hiddenapi command, but it was not present: %s", wantPublicStubs, hiddenapiRule.RuleParams.Command) } wantSystemStubs := "--system-stub-classpath=" + generateSdkDexPath(tc.systemStub, tc.unbundledBuild) if !strings.Contains(hiddenapiRule.RuleParams.Command, wantSystemStubs) { t.Errorf("Expected %s in hiddenapi command, but it was not present: %s", wantSystemStubs, hiddenapiRule.RuleParams.Command) } wantTestStubs := "--test-stub-classpath=" + generateSdkDexPath(tc.testStub, tc.unbundledBuild) if !strings.Contains(hiddenapiRule.RuleParams.Command, wantTestStubs) { t.Errorf("Expected %s in hiddenapi command, but it was not present: %s", wantTestStubs, hiddenapiRule.RuleParams.Command) } wantCorePlatformStubs := "--core-platform-stub-classpath=" + generateDexPath(tc.corePlatformStub) if !strings.Contains(hiddenapiRule.RuleParams.Command, wantCorePlatformStubs) { t.Errorf("Expected %s in hiddenapi command, but it was not present: %s", wantCorePlatformStubs, hiddenapiRule.RuleParams.Command) } }) } } func generateDexedPath(subDir, dex, module string) string { return fmt.Sprintf("%s/.intermediates/%s/android_common/%s/%s.jar", buildDir, subDir, dex, module) } func generateDexPath(module string) string { return generateDexedPath(module, "dex", module) } func generateSdkDexPath(module string, unbundled bool) string { if unbundled { return generateDexedPath("prebuilts/sdk/"+module, "dex", module) } return generateDexPath(module) }
java/testing.go +1 −1 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ func TestConfig(buildDir string, env map[string]string, bp string, fs map[string "prebuilts/sdk/30/system/api/bar-removed.txt": nil, "prebuilts/sdk/30/test/api/bar-removed.txt": nil, "prebuilts/sdk/tools/core-lambda-stubs.jar": nil, "prebuilts/sdk/Android.bp": []byte(`prebuilt_apis { name: "sdk", api_dirs: ["14", "28", "30", "current"],}`), "prebuilts/sdk/Android.bp": []byte(`prebuilt_apis { name: "sdk", api_dirs: ["14", "28", "30", "current"], imports_sdk_version: "none", imports_compile_dex:true,}`), "bin.py": nil, python.StubTemplateHost: []byte(`PYTHON_BINARY = '%interpreter%' Loading