From 4e4e82225ac09edc418c914a47b89c47650ff607 Mon Sep 17 00:00:00 2001 From: Jiyong Park Date: Mon, 23 Nov 2020 21:42:27 +0900 Subject: [PATCH] SharedLibraryInfo.isNative() returns true for native libs This CL fixes a bug that SharedLibraryInfo.isNative() returns false even for native shared libraries. This was because when a SharedLibraryInfo is copied to a new SharedLibraryInfo (to add some extra info about declaring package, etc.), the native-ness was mistakenly ignored. Fixing the issue. Also, the old constructor of SharedLibraryInfo that doesn't accept the native-ness was removed to prevent similar mistakes. Bug: 142191088 Test: atest CtsUsesNativeLibraryTest Test: write an app that calls PackageManager.getSharedLibraries() and inspect the mIsNative fields in the returned list. Entries for native shared libs all have mIsNative=false. Will add a testcase to the CTS test when isNative() becomes an API. Change-Id: I35d9530f332614e0444448feec70a4461c9bbfa8 --- core/java/android/content/pm/SharedLibraryInfo.java | 9 --------- core/java/com/android/internal/os/ZygoteInit.java | 9 ++++++--- .../src/android/app/ApplicationLoadersTest.java | 2 +- .../com/android/server/pm/PackageManagerService.java | 6 ++++-- .../server/pm/parsing/pkg/AndroidPackageUtils.java | 4 ++-- .../src/com/android/server/pm/dex/DexoptUtilsTest.java | 2 +- 6 files changed, 14 insertions(+), 18 deletions(-) diff --git a/core/java/android/content/pm/SharedLibraryInfo.java b/core/java/android/content/pm/SharedLibraryInfo.java index 862563706da72..a60e6428418d3 100644 --- a/core/java/android/content/pm/SharedLibraryInfo.java +++ b/core/java/android/content/pm/SharedLibraryInfo.java @@ -114,15 +114,6 @@ public final class SharedLibraryInfo implements Parcelable { mIsNative = isNative; } - /** @hide */ - public SharedLibraryInfo(String path, String packageName, List codePaths, - String name, long version, int type, - VersionedPackage declaringPackage, List dependentPackages, - List dependencies) { - this(path, packageName, codePaths, name, version, type, declaringPackage, dependentPackages, - dependencies, false /* isNative */); - } - private SharedLibraryInfo(Parcel parcel) { mPath = parcel.readString8(); mPackageName = parcel.readString8(); diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index 1fcc6b0a6d558..6f707cd8b26ae 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -391,16 +391,19 @@ public class ZygoteInit { SharedLibraryInfo hidlBase = new SharedLibraryInfo( "/system/framework/android.hidl.base-V1.0-java.jar", null /*packageName*/, null /*codePaths*/, null /*name*/, 0 /*version*/, SharedLibraryInfo.TYPE_BUILTIN, - null /*declaringPackage*/, null /*dependentPackages*/, null /*dependencies*/); + null /*declaringPackage*/, null /*dependentPackages*/, null /*dependencies*/, + false /*isNative*/); SharedLibraryInfo hidlManager = new SharedLibraryInfo( "/system/framework/android.hidl.manager-V1.0-java.jar", null /*packageName*/, null /*codePaths*/, null /*name*/, 0 /*version*/, SharedLibraryInfo.TYPE_BUILTIN, - null /*declaringPackage*/, null /*dependentPackages*/, null /*dependencies*/); + null /*declaringPackage*/, null /*dependentPackages*/, null /*dependencies*/, + false /*isNative*/); SharedLibraryInfo androidTestBase = new SharedLibraryInfo( "/system/framework/android.test.base.jar", null /*packageName*/, null /*codePaths*/, null /*name*/, 0 /*version*/, SharedLibraryInfo.TYPE_BUILTIN, - null /*declaringPackage*/, null /*dependentPackages*/, null /*dependencies*/); + null /*declaringPackage*/, null /*dependentPackages*/, null /*dependencies*/, + false /*isNative*/); ApplicationLoaders.getDefault().createAndCacheNonBootclasspathSystemClassLoaders( new SharedLibraryInfo[]{ diff --git a/core/tests/coretests/src/android/app/ApplicationLoadersTest.java b/core/tests/coretests/src/android/app/ApplicationLoadersTest.java index 4b9910c79770a..19e7f80dfa5b0 100644 --- a/core/tests/coretests/src/android/app/ApplicationLoadersTest.java +++ b/core/tests/coretests/src/android/app/ApplicationLoadersTest.java @@ -42,7 +42,7 @@ public class ApplicationLoadersTest { return new SharedLibraryInfo( zip, null /*packageName*/, null /*codePaths*/, null /*name*/, 0 /*version*/, SharedLibraryInfo.TYPE_BUILTIN, null /*declaringPackage*/, - null /*dependentPackages*/, null /*dependencies*/); + null /*dependentPackages*/, null /*dependencies*/, false /*isNative*/); } @Test diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index ad686f2cab898..7907abace5b31 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -5722,7 +5722,8 @@ public class PackageManagerService extends IPackageManager.Stub getPackagesUsingSharedLibraryLPr(libInfo, flags, userId), (libInfo.getDependencies() == null ? null - : new ArrayList<>(libInfo.getDependencies()))); + : new ArrayList<>(libInfo.getDependencies())), + libInfo.isNative()); if (result == null) { result = new ArrayList<>(); @@ -5791,7 +5792,8 @@ public class PackageManagerService extends IPackageManager.Stub libraryInfo.getLongVersion(), libraryInfo.getType(), libraryInfo.getDeclaringPackage(), getPackagesUsingSharedLibraryLPr( libraryInfo, flags, userId), libraryInfo.getDependencies() == null - ? null : new ArrayList<>(libraryInfo.getDependencies())); + ? null : new ArrayList<>(libraryInfo.getDependencies()), + libraryInfo.isNative()); if (result == null) { result = new ArrayList<>(); diff --git a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java index 0a56e13434189..ab25a7c772c06 100644 --- a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java +++ b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java @@ -94,7 +94,7 @@ public class AndroidPackageUtils { SharedLibraryInfo.TYPE_STATIC, new VersionedPackage(pkg.getManifestPackageName(), pkg.getLongVersionCode()), - null, null); + null, null, false /* isNative */); } public static SharedLibraryInfo createSharedLibraryForDynamic(AndroidPackage pkg, String name) { @@ -103,7 +103,7 @@ public class AndroidPackageUtils { SharedLibraryInfo.VERSION_UNDEFINED, SharedLibraryInfo.TYPE_DYNAMIC, new VersionedPackage(pkg.getPackageName(), pkg.getLongVersionCode()), - null, null); + null, null, false /* isNative */); } /** diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java b/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java index 3846be09a6c12..34cefec4655b2 100644 --- a/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java @@ -134,7 +134,7 @@ public class DexoptUtilsTest { private List createMockSharedLibrary(String [] sharedLibrary) { SharedLibraryInfo info = new SharedLibraryInfo(null, null, Arrays.asList(sharedLibrary), - null, 0L, SharedLibraryInfo.TYPE_STATIC, null, null, null); + null, 0L, SharedLibraryInfo.TYPE_STATIC, null, null, null, false /* isNative */); ArrayList libraries = new ArrayList<>(); libraries.add(info); return libraries;