diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index 5fd8e3c6e302e..44f7d88693223 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -177,8 +177,10 @@ public class PackageDexOptimizer { private int performDexOptLI(AndroidPackage pkg, @NonNull PackageSetting pkgSetting, String[] targetInstructionSets, CompilerStats.PackageStats packageStats, PackageDexUsage.PackageUseInfo packageUseInfo, DexoptOptions options) { + // ClassLoader only refers non-native (jar) shared libraries and must ignore + // native (so) shared libraries. See also LoadedApk#createSharedLibraryLoader(). final List sharedLibraries = pkgSetting.getPkgState() - .getUsesLibraryInfos(); + .getNonNativeUsesLibraryInfos(); final String[] instructionSets = targetInstructionSets != null ? targetInstructionSets : getAppDexInstructionSets( AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting), diff --git a/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java b/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java index 05879ec9545e4..fad0aefd3c0ac 100644 --- a/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java +++ b/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java @@ -28,6 +28,7 @@ import com.android.server.pm.PackageSetting; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * For use by {@link PackageSetting} to maintain functionality that used to exist in @@ -110,6 +111,10 @@ public class PackageStateUnserialized { this.overrideSeInfo = other.overrideSeInfo; } + public @NonNull List getNonNativeUsesLibraryInfos() { + return getUsesLibraryInfos().stream() + .filter((l) -> !l.isNative()).collect(Collectors.toList()); + } // Code below generated by codegen v1.0.14.