diff --git a/apex/apex_test.go b/apex/apex_test.go index e6944354b..056c48d8f 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -2871,18 +2871,20 @@ func TestApexWithApps(t *testing.T) { android_app { name: "AppFoo", srcs: ["foo/bar/MyClass.java"], - sdk_version: "none", + sdk_version: "current", system_modules: "none", jni_libs: ["libjni"], + stl: "none", apex_available: [ "myapex" ], } android_app { name: "AppFooPriv", srcs: ["foo/bar/MyClass.java"], - sdk_version: "none", + sdk_version: "current", system_modules: "none", privileged: true, + stl: "none", apex_available: [ "myapex" ], } @@ -2892,6 +2894,7 @@ func TestApexWithApps(t *testing.T) { stl: "none", system_shared_libs: [], apex_available: [ "myapex" ], + sdk_version: "current", } `) diff --git a/java/app.go b/java/app.go index bcf08a775..0745bf06b 100755 --- a/java/app.go +++ b/java/app.go @@ -491,7 +491,7 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) { dexJarFile := a.dexBuildActions(ctx) - jniLibs, certificateDeps := collectAppDeps(ctx, a.shouldEmbedJnis(ctx)) + jniLibs, certificateDeps := collectAppDeps(ctx, a.shouldEmbedJnis(ctx), !Bool(a.appProperties.Jni_uses_platform_apis)) jniJarFile := a.jniBuildActions(jniLibs, ctx) if ctx.Failed() { @@ -527,7 +527,8 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) { } } -func collectAppDeps(ctx android.ModuleContext, shouldCollectRecursiveNativeDeps bool) ([]jniLib, []Certificate) { +func collectAppDeps(ctx android.ModuleContext, shouldCollectRecursiveNativeDeps bool, + checkNativeSdkVersion bool) ([]jniLib, []Certificate) { var jniLibs []jniLib var certificates []Certificate seenModulePaths := make(map[string]bool) @@ -549,6 +550,18 @@ func collectAppDeps(ctx android.ModuleContext, shouldCollectRecursiveNativeDeps } seenModulePaths[path.String()] = true + if checkNativeSdkVersion { + if app, ok := ctx.Module().(interface{ sdkVersion() sdkSpec }); ok { + if app.sdkVersion().specified() && + app.sdkVersion().kind != sdkCorePlatform && + dep.SdkVersion() == "" { + ctx.PropertyErrorf("jni_libs", + "JNI dependency %q uses platform APIs, but this module does not", + otherName) + } + } + } + if lib.Valid() { jniLibs = append(jniLibs, jniLib{ name: ctx.OtherModuleName(module), @@ -1045,7 +1058,7 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext ctx.ModuleErrorf("One and only one of certficate, presigned, and default_dev_cert properties must be set") } - _, certificates := collectAppDeps(ctx, false) + _, certificates := collectAppDeps(ctx, false, false) // TODO: LOCAL_EXTRACT_APK/LOCAL_EXTRACT_DPI_APK // TODO: LOCAL_PACKAGE_SPLITS @@ -1300,7 +1313,7 @@ func (r *RuntimeResourceOverlay) GenerateAndroidBuildActions(ctx android.ModuleC r.aapt.buildActions(ctx, r, "--no-resource-deduping", "--no-resource-removal") // Sign the built package - _, certificates := collectAppDeps(ctx, false) + _, certificates := collectAppDeps(ctx, false, false) certificates = processMainCert(r.ModuleBase, String(r.properties.Certificate), certificates, ctx) signed := android.PathForModuleOut(ctx, "signed", r.Name()+".apk") SignAppPackage(ctx, signed, r.aapt.exportPackage, certificates) diff --git a/java/app_test.go b/java/app_test.go index dfd85711b..0c6da7a47 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -903,6 +903,7 @@ func TestJNIPackaging(t *testing.T) { name: "libjni", system_shared_libs: [], stl: "none", + sdk_version: "current", } android_app { @@ -2112,6 +2113,7 @@ func TestEmbedNotice(t *testing.T) { system_shared_libs: [], stl: "none", notice: "LIB_NOTICE", + sdk_version: "current", } java_library {