Skip packaging cross container cc deps of apk-in-apex
With this change, apk-in-apex will skip packaging a cc library
dependency if the dependency is part of the platform or part of a
different apex.
Bug: 375473764
Test: go test ./java ./apex
Test: presubmits
Change-Id: I91351973c2c941c7531e9f7d4879049eab766a12
diff --git a/java/app.go b/java/app.go
index 7f80160..832a083 100644
--- a/java/app.go
+++ b/java/app.go
@@ -1082,7 +1082,17 @@
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 {
+ childLinkable, _ := child.(cc.LinkableInterface)
+ parentLinkable, _ := parent.(cc.LinkableInterface)
+ useStubsOfDep := childLinkable.IsStubs()
+ if parent.(android.ApexModule).NotInPlatform() && 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 +1127,7 @@
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 +1138,7 @@
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
}