java_library support for building headers-only
Flag for java_library modules to build just the Turbine headers and
skip building an impl jar.
Test: go test java
Bug: 289776578
Change-Id: Iad0babf951710476bc32df93c25d17065a14ab84
diff --git a/android/neverallow.go b/android/neverallow.go
index 24031ba..2be6a74 100644
--- a/android/neverallow.go
+++ b/android/neverallow.go
@@ -60,6 +60,7 @@
AddNeverAllowRules(createBp2BuildRule())
AddNeverAllowRules(createCcStubsRule())
AddNeverAllowRules(createJavaExcludeStaticLibsRule())
+ AddNeverAllowRules(createProhibitHeaderOnlyRule())
}
// Add a NeverAllow rule to the set of rules to apply.
@@ -264,6 +265,13 @@
Because("exclude_static_libs property is only allowed for java modules defined in build/soong, libcore, and frameworks/base/api")
}
+func createProhibitHeaderOnlyRule() Rule {
+ return NeverAllow().
+ Without("name", "framework-minus-apex-headers").
+ With("headers_only", "true").
+ Because("headers_only can only be used for generating framework-minus-apex headers for non-updatable modules")
+}
+
func neverallowMutator(ctx BottomUpMutatorContext) {
m, ok := ctx.Module().(Module)
if !ok {
diff --git a/android/neverallow_test.go b/android/neverallow_test.go
index 2a938b8..b2620ef 100644
--- a/android/neverallow_test.go
+++ b/android/neverallow_test.go
@@ -361,6 +361,21 @@
`exclude_static_libs property is only allowed for java modules defined in build/soong, libcore, and frameworks/base/api`,
},
},
+ // Test for only allowing headers_only for framework-minus-apex-headers
+ {
+ name: `"headers_only" outside framework-minus-apex-headers modules`,
+ fs: map[string][]byte{
+ "a/b/Android.bp": []byte(`
+ java_library {
+ name: "baz",
+ headers_only: true,
+ }
+ `),
+ },
+ expectedErrors: []string{
+ `headers_only can only be used for generating framework-minus-apex headers for non-updatable modules`,
+ },
+ },
}
var prepareForNeverAllowTest = GroupFixturePreparers(
@@ -451,6 +466,7 @@
Sdk_version *string
Uncompress_dex *bool
Exclude_static_libs []string
+ Headers_only *bool
}
type mockJavaLibraryModule struct {