Update sdk_version check for jni_libs of updatable apps
With aosp/1640364, all variants of a cc_* module use min_sdk_version as
the version part of the clang triple. Therefore, checking
min_sdk_version of jni_libs should be sufficient to ensure that there is
no unintended access to symbols in newer Android versions
Test: go test ./java
Test: TH
Bug: 155209650
Bug: 209409604
Change-Id: I6c064f8a6ea12c8aa40165a9063380306a180c9b
Merged-In: I6c064f8a6ea12c8aa40165a9063380306a180c9b
(cherry picked from commit 2e8c044b2c
)
This commit is contained in:
10
java/app.go
10
java/app.go
@@ -305,10 +305,6 @@ func (a *AndroidApp) checkAppSdkVersions(ctx android.ModuleContext) {
|
||||
|
||||
// If an updatable APK sets min_sdk_version, min_sdk_vesion of JNI libs should match with it.
|
||||
// This check is enforced for "updatable" APKs (including APK-in-APEX).
|
||||
// b/155209650: until min_sdk_version is properly supported, use sdk_version instead.
|
||||
// because, sdk_version is overridden by min_sdk_version (if set as smaller)
|
||||
// and sdkLinkType is checked with dependencies so we can be sure that the whole dependency tree
|
||||
// will meet the requirements.
|
||||
func (a *AndroidApp) checkJniLibsSdkVersion(ctx android.ModuleContext, minSdkVersion android.ApiLevel) {
|
||||
// It's enough to check direct JNI deps' sdk_version because all transitive deps from JNI deps are checked in cc.checkLinkType()
|
||||
ctx.VisitDirectDeps(func(m android.Module) {
|
||||
@@ -319,10 +315,10 @@ func (a *AndroidApp) checkJniLibsSdkVersion(ctx android.ModuleContext, minSdkVer
|
||||
// The domain of cc.sdk_version is "current" and <number>
|
||||
// We can rely on android.SdkSpec to convert it to <number> so that "current" is
|
||||
// handled properly regardless of sdk finalization.
|
||||
jniSdkVersion, err := android.SdkSpecFrom(ctx, dep.SdkVersion()).EffectiveVersion(ctx)
|
||||
jniSdkVersion, err := android.SdkSpecFrom(ctx, dep.MinSdkVersion()).EffectiveVersion(ctx)
|
||||
if err != nil || minSdkVersion.LessThan(jniSdkVersion) {
|
||||
ctx.OtherModuleErrorf(dep, "sdk_version(%v) is higher than min_sdk_version(%v) of the containing android_app(%v)",
|
||||
dep.SdkVersion(), minSdkVersion, ctx.ModuleName())
|
||||
ctx.OtherModuleErrorf(dep, "min_sdk_version(%v) is higher than min_sdk_version(%v) of the containing android_app(%v)",
|
||||
dep.MinSdkVersion(), minSdkVersion, ctx.ModuleName())
|
||||
return
|
||||
}
|
||||
|
||||
|
@@ -427,7 +427,8 @@ func TestUpdatableApps_JniLibShouldBeBuiltAgainstMinSdkVersion(t *testing.T) {
|
||||
name: "libjni",
|
||||
stl: "none",
|
||||
system_shared_libs: [],
|
||||
sdk_version: "29",
|
||||
sdk_version: "current",
|
||||
min_sdk_version: "29",
|
||||
}
|
||||
`
|
||||
fs := map[string][]byte{
|
||||
@@ -481,12 +482,13 @@ func TestUpdatableApps_ErrorIfJniLibDoesntSupportMinSdkVersion(t *testing.T) {
|
||||
name: "libjni",
|
||||
stl: "none",
|
||||
sdk_version: "current",
|
||||
min_sdk_version: "current",
|
||||
}
|
||||
`
|
||||
testJavaError(t, `"libjni" .*: sdk_version\(current\) is higher than min_sdk_version\(29\)`, bp)
|
||||
testJavaError(t, `"libjni" .*: min_sdk_version\(current\) is higher than min_sdk_version\(29\)`, bp)
|
||||
}
|
||||
|
||||
func TestUpdatableApps_ErrorIfDepSdkVersionIsHigher(t *testing.T) {
|
||||
func TestUpdatableApps_ErrorIfDepMinSdkVersionIsHigher(t *testing.T) {
|
||||
bp := cc.GatherRequiredDepsForTest(android.Android) + `
|
||||
android_app {
|
||||
name: "foo",
|
||||
@@ -503,6 +505,7 @@ func TestUpdatableApps_ErrorIfDepSdkVersionIsHigher(t *testing.T) {
|
||||
shared_libs: ["libbar"],
|
||||
system_shared_libs: [],
|
||||
sdk_version: "27",
|
||||
min_sdk_version: "27",
|
||||
}
|
||||
|
||||
cc_library {
|
||||
@@ -510,6 +513,7 @@ func TestUpdatableApps_ErrorIfDepSdkVersionIsHigher(t *testing.T) {
|
||||
stl: "none",
|
||||
system_shared_libs: [],
|
||||
sdk_version: "current",
|
||||
min_sdk_version: "current",
|
||||
}
|
||||
`
|
||||
testJavaError(t, `"libjni" .*: links "libbar" built against newer API version "current"`, bp)
|
||||
|
Reference in New Issue
Block a user