aboutsummaryrefslogtreecommitdiffstats
path: root/java/app.go
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2020-05-15 23:45:36 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-05-15 23:45:36 +0000
commit3fcdb81cf2a9b04f434331b41725c730407a94ef (patch)
treea556d0adaf88009360114ff39cb57a17dca21644 /java/app.go
parent4de27a57577e6cf1a0924fdc33b319fc49c9b36c (diff)
parenteb03296b57a414b5c327ae6b4057f279f6903439 (diff)
downloadbuild_soong-3fcdb81cf2a9b04f434331b41725c730407a94ef.tar.gz
build_soong-3fcdb81cf2a9b04f434331b41725c730407a94ef.tar.bz2
build_soong-3fcdb81cf2a9b04f434331b41725c730407a94ef.zip
Merge "Don't use SDK variant for vendor JNI libraries" into rvc-dev
Diffstat (limited to 'java/app.go')
-rwxr-xr-xjava/app.go47
1 files changed, 32 insertions, 15 deletions
diff --git a/java/app.go b/java/app.go
index 89f48c36..9a922f3a 100755
--- a/java/app.go
+++ b/java/app.go
@@ -374,7 +374,10 @@ func (a *AndroidApp) DepsMutator(ctx android.BottomUpMutatorContext) {
// If the app builds against an Android SDK use the SDK variant of JNI dependencies
// unless jni_uses_platform_apis is set.
- if (usesSDK && !Bool(a.appProperties.Jni_uses_platform_apis)) ||
+ // Don't require the SDK variant for apps that are shipped on vendor, etc., as they already
+ // have stable APIs through the VNDK.
+ if (usesSDK && !a.RequiresStableAPIs(ctx) &&
+ !Bool(a.appProperties.Jni_uses_platform_apis)) ||
Bool(a.appProperties.Jni_uses_sdk_apis) {
variation = append(variation, blueprint.Variation{Mutator: "sdk", Variation: "sdk"})
}
@@ -705,7 +708,7 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
dexJarFile := a.dexBuildActions(ctx)
- jniLibs, certificateDeps := collectAppDeps(ctx, a.shouldEmbedJnis(ctx), !Bool(a.appProperties.Jni_uses_platform_apis))
+ jniLibs, certificateDeps := collectAppDeps(ctx, a, a.shouldEmbedJnis(ctx), !Bool(a.appProperties.Jni_uses_platform_apis))
jniJarFile := a.jniBuildActions(jniLibs, ctx)
if ctx.Failed() {
@@ -761,12 +764,25 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
a.buildAppDependencyInfo(ctx)
}
-func collectAppDeps(ctx android.ModuleContext, shouldCollectRecursiveNativeDeps bool,
+type appDepsInterface interface {
+ sdkVersion() sdkSpec
+ minSdkVersion() sdkSpec
+ RequiresStableAPIs(ctx android.BaseModuleContext) bool
+}
+
+func collectAppDeps(ctx android.ModuleContext, app appDepsInterface,
+ shouldCollectRecursiveNativeDeps bool,
checkNativeSdkVersion bool) ([]jniLib, []Certificate) {
+
var jniLibs []jniLib
var certificates []Certificate
seenModulePaths := make(map[string]bool)
+ if checkNativeSdkVersion {
+ checkNativeSdkVersion = app.sdkVersion().specified() &&
+ app.sdkVersion().kind != sdkCorePlatform && !app.RequiresStableAPIs(ctx)
+ }
+
ctx.WalkDeps(func(module android.Module, parent android.Module) bool {
otherName := ctx.OtherModuleName(module)
tag := ctx.OtherModuleDependencyTag(module)
@@ -784,16 +800,9 @@ 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 checkNativeSdkVersion && dep.SdkVersion() == "" {
+ ctx.PropertyErrorf("jni_libs", "JNI dependency %q uses platform APIs, but this module does not",
+ otherName)
}
if lib.Valid() {
@@ -1379,7 +1388,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, false)
+ _, certificates := collectAppDeps(ctx, a, false, false)
// TODO: LOCAL_EXTRACT_APK/LOCAL_EXTRACT_DPI_APK
// TODO: LOCAL_PACKAGE_SPLITS
@@ -1496,6 +1505,14 @@ func (a *AndroidAppImport) Privileged() bool {
return Bool(a.properties.Privileged)
}
+func (a *AndroidAppImport) sdkVersion() sdkSpec {
+ return sdkSpecFrom("")
+}
+
+func (a *AndroidAppImport) minSdkVersion() sdkSpec {
+ return sdkSpecFrom("")
+}
+
func createVariantGroupType(variants []string, variantGroupName string) reflect.Type {
props := reflect.TypeOf((*AndroidAppImportProperties)(nil))
@@ -1670,7 +1687,7 @@ func (r *RuntimeResourceOverlay) GenerateAndroidBuildActions(ctx android.ModuleC
r.aapt.buildActions(ctx, r, aaptLinkFlags...)
// Sign the built package
- _, certificates := collectAppDeps(ctx, false, false)
+ _, certificates := collectAppDeps(ctx, r, 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, nil, nil)