diff --git a/android/neverallow.go b/android/neverallow.go index abe25e6f2..9cfa0ebbc 100644 --- a/android/neverallow.go +++ b/android/neverallow.go @@ -96,6 +96,9 @@ func createLibcoreRules() []*rule { "external/icu", "external/okhttp", "external/wycheproof", + + // Not really a core library but still needs access to same capabilities. + "development", } // Core library constraints. The no_standard_libs can only be used in core @@ -103,7 +106,7 @@ func createLibcoreRules() []*rule { // visibility rules. rules := []*rule{ neverallow(). - notIn(append(coreLibraryProjects, "development")...). + notIn(coreLibraryProjects...). with("no_standard_libs", "true"), } diff --git a/android/neverallow_test.go b/android/neverallow_test.go index ab47808d2..d063e2488 100644 --- a/android/neverallow_test.go +++ b/android/neverallow_test.go @@ -159,6 +159,38 @@ var neverallowTests = []struct { }, expectedError: "java_device_for_host can only be used in whitelisted projects", }, + // Libcore rule tests + { + name: "no_standard_libs: true inside core libraries", + fs: map[string][]byte{ + "libcore/Blueprints": []byte(` + java_library { + name: "inside_core_libraries", + no_standard_libs: true, + }`), + }, + }, + { + name: "no_standard_libs: true outside core libraries", + fs: map[string][]byte{ + "Blueprints": []byte(` + java_library { + name: "outside_core_libraries", + no_standard_libs: true, + }`), + }, + expectedError: "module \"outside_core_libraries\": violates neverallow", + }, + { + name: "no_standard_libs: false", + fs: map[string][]byte{ + "Blueprints": []byte(` + java_library { + name: "outside_core_libraries", + no_standard_libs: false, + }`), + }, + }, } func TestNeverallow(t *testing.T) { @@ -238,7 +270,8 @@ func (p *mockCcLibraryModule) GenerateAndroidBuildActions(ModuleContext) { } type mockJavaLibraryProperties struct { - Libs []string + Libs []string + No_standard_libs *bool } type mockJavaLibraryModule struct {