Don't use SDK variant for vendor JNI libraries
Vendor JNI libraries already have stable APIs enforced by the VNDK, they shouldn't use SDK variants. Bug: 156225490 Test: TestJNISDK Change-Id: I21ba67e8e9fb05016caf5888129adc1a939545c2
This commit is contained in:
47
java/app.go
47
java/app.go
@@ -249,7 +249,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"})
|
||||
}
|
||||
@@ -584,7 +587,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() {
|
||||
@@ -622,12 +625,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)
|
||||
@@ -645,16 +661,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() {
|
||||
@@ -1244,7 +1253,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
|
||||
@@ -1370,6 +1379,14 @@ func (a *AndroidAppImport) DepIsInSameApex(ctx android.BaseModuleContext, dep an
|
||||
return false
|
||||
}
|
||||
|
||||
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))
|
||||
|
||||
@@ -1555,7 +1572,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)
|
||||
|
Reference in New Issue
Block a user