diff --git a/android/neverallow.go b/android/neverallow.go index f87cebbc9..aa47bcaeb 100644 --- a/android/neverallow.go +++ b/android/neverallow.go @@ -57,6 +57,7 @@ func init() { AddNeverAllowRules(createUncompressDexRules()...) AddNeverAllowRules(createMakefileGoalRules()...) AddNeverAllowRules(createInitFirstStageRules()...) + AddNeverAllowRules(createProhibitFrameworkAccessRules()...) } // Add a NeverAllow rule to the set of rules to apply. @@ -228,6 +229,15 @@ func createInitFirstStageRules() []Rule { } } +func createProhibitFrameworkAccessRules() []Rule { + return []Rule{ + NeverAllow(). + With("libs", "framework"). + WithoutMatcher("sdk_version", Regexp("(core_.*|^$)")). + Because("framework can't be used when building against SDK"), + } +} + func neverallowMutator(ctx BottomUpMutatorContext) { m, ok := ctx.Module().(Module) if !ok { diff --git a/android/neverallow_test.go b/android/neverallow_test.go index 8afe9e046..86f1a378f 100644 --- a/android/neverallow_test.go +++ b/android/neverallow_test.go @@ -327,6 +327,21 @@ var neverallowTests = []struct { "Only boot images may be imported as a makefile goal.", }, }, + // Tests for the rule prohibiting the use of framework + { + name: "prohibit framework", + fs: map[string][]byte{ + "Android.bp": []byte(` + java_library { + name: "foo", + libs: ["framework"], + sdk_version: "current", + }`), + }, + expectedErrors: []string{ + "framework can't be used when building against SDK", + }, + }, } var prepareForNeverAllowTest = GroupFixturePreparers(