Enforce hidden api usage in vendor (soong)
From aosp/588578, if vendor app doesn't fill sdk_version, build scirpt overwrites system_current to sdk_version. But there is no similar enforcement in soong. So, as make does, sdkVersion() returns "system_current" if it is device-specific or soc-specific module. and sdk_version is not filled. Test: pass soong test Bug: 132780927 Change-Id: I69bb3d7bfcf7c27c2db4d0efbe046f9c7879b4bc
This commit is contained in:
parent
7dc6951c3d
commit
6bd33c13bb
4 changed files with 43 additions and 4 deletions
|
@ -499,7 +499,7 @@ type AARImport struct {
|
|||
}
|
||||
|
||||
func (a *AARImport) sdkVersion() string {
|
||||
return String(a.properties.Sdk_version)
|
||||
return proptools.StringDefault(a.properties.Sdk_version, defaultSdkVersion(a))
|
||||
}
|
||||
|
||||
func (a *AARImport) minSdkVersion() string {
|
||||
|
|
|
@ -23,6 +23,7 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
"github.com/google/blueprint/proptools"
|
||||
)
|
||||
|
||||
var (
|
||||
|
@ -523,7 +524,7 @@ func JavadocHostFactory() android.Module {
|
|||
var _ android.OutputFileProducer = (*Javadoc)(nil)
|
||||
|
||||
func (j *Javadoc) sdkVersion() string {
|
||||
return String(j.properties.Sdk_version)
|
||||
return proptools.StringDefault(j.properties.Sdk_version, defaultSdkVersion(j))
|
||||
}
|
||||
|
||||
func (j *Javadoc) minSdkVersion() string {
|
||||
|
|
16
java/java.go
16
java/java.go
|
@ -426,6 +426,18 @@ var (
|
|||
usesLibTag = dependencyTag{name: "uses-library"}
|
||||
)
|
||||
|
||||
func defaultSdkVersion(ctx checkVendorModuleContext) string {
|
||||
if ctx.SocSpecific() || ctx.DeviceSpecific() {
|
||||
return "system_current"
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type checkVendorModuleContext interface {
|
||||
SocSpecific() bool
|
||||
DeviceSpecific() bool
|
||||
}
|
||||
|
||||
type sdkDep struct {
|
||||
useModule, useFiles, useDefaultLibs, invalidVersion bool
|
||||
|
||||
|
@ -465,7 +477,7 @@ func (j *Module) shouldInstrumentStatic(ctx android.BaseModuleContext) bool {
|
|||
}
|
||||
|
||||
func (j *Module) sdkVersion() string {
|
||||
return String(j.deviceProperties.Sdk_version)
|
||||
return proptools.StringDefault(j.deviceProperties.Sdk_version, defaultSdkVersion(j))
|
||||
}
|
||||
|
||||
func (j *Module) minSdkVersion() string {
|
||||
|
@ -1869,7 +1881,7 @@ type Import struct {
|
|||
}
|
||||
|
||||
func (j *Import) sdkVersion() string {
|
||||
return String(j.properties.Sdk_version)
|
||||
return proptools.StringDefault(j.properties.Sdk_version, defaultSdkVersion(j))
|
||||
}
|
||||
|
||||
func (j *Import) minSdkVersion() string {
|
||||
|
|
|
@ -282,6 +282,32 @@ func TestSimple(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestSdkVersion(t *testing.T) {
|
||||
ctx := testJava(t, `
|
||||
java_library {
|
||||
name: "foo",
|
||||
srcs: ["a.java"],
|
||||
vendor: true,
|
||||
}
|
||||
|
||||
java_library {
|
||||
name: "bar",
|
||||
srcs: ["b.java"],
|
||||
}
|
||||
`)
|
||||
|
||||
foo := ctx.ModuleForTests("foo", "android_common").Module().(*Library)
|
||||
bar := ctx.ModuleForTests("bar", "android_common").Module().(*Library)
|
||||
|
||||
if foo.sdkVersion() != "system_current" {
|
||||
t.Errorf("If sdk version of vendor module is empty, it must change to system_current.")
|
||||
}
|
||||
|
||||
if bar.sdkVersion() != "" {
|
||||
t.Errorf("If sdk version of non-vendor module is empty, it keeps empty.")
|
||||
}
|
||||
}
|
||||
|
||||
func TestArchSpecific(t *testing.T) {
|
||||
ctx := testJava(t, `
|
||||
java_library {
|
||||
|
|
Loading…
Reference in a new issue