diff options
Diffstat (limited to 'java/app.go')
-rw-r--r-- | java/app.go | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/java/app.go b/java/app.go index 34a548e5a..4dea7dc1b 100644 --- a/java/app.go +++ b/java/app.go @@ -1082,7 +1082,18 @@ func collectAppDeps(ctx android.ModuleContext, app appDepsInterface, app.SdkVersion(ctx).Kind != android.SdkCorePlatform && !app.RequiresStableAPIs(ctx) } jniLib, prebuiltJniPackages := collectJniDeps(ctx, shouldCollectRecursiveNativeDeps, - checkNativeSdkVersion, func(dep cc.LinkableInterface) bool { return !dep.IsNdk(ctx.Config()) && !dep.IsStubs() }) + checkNativeSdkVersion, func(parent, child android.Module) bool { + apkInApex := ctx.Module().(android.ApexModule).NotInPlatform() + childLinkable, _ := child.(cc.LinkableInterface) + parentLinkable, _ := parent.(cc.LinkableInterface) + useStubsOfDep := childLinkable.IsStubs() + if apkInApex && parentLinkable != nil { + // APK-in-APEX + // If the parent is a linkable interface, use stubs if the dependency edge crosses an apex boundary. + useStubsOfDep = useStubsOfDep || (childLinkable.HasStubsVariants() && cc.ShouldUseStubForApex(ctx, parent, child)) + } + return !childLinkable.IsNdk(ctx.Config()) && !useStubsOfDep + }) var certificates []Certificate @@ -1117,7 +1128,7 @@ func collectAppDeps(ctx android.ModuleContext, app appDepsInterface, func collectJniDeps(ctx android.ModuleContext, shouldCollectRecursiveNativeDeps bool, checkNativeSdkVersion bool, - filter func(cc.LinkableInterface) bool) ([]jniLib, android.Paths) { + filter func(parent, child android.Module) bool) ([]jniLib, android.Paths) { var jniLibs []jniLib var prebuiltJniPackages android.Paths seenModulePaths := make(map[string]bool) @@ -1128,7 +1139,7 @@ func collectJniDeps(ctx android.ModuleContext, if IsJniDepTag(tag) || cc.IsSharedDepTag(tag) { if dep, ok := module.(cc.LinkableInterface); ok { - if filter != nil && !filter(dep) { + if filter != nil && !filter(parent, module) { return false } |