Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4e4e8222 authored by Jiyong Park's avatar Jiyong Park
Browse files

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
parent 8b0cc5a2
Loading
Loading
Loading
Loading
+0 −9
Original line number Original line Diff line number Diff line
@@ -114,15 +114,6 @@ public final class SharedLibraryInfo implements Parcelable {
        mIsNative = isNative;
        mIsNative = isNative;
    }
    }


    /** @hide */
    public SharedLibraryInfo(String path, String packageName, List<String> codePaths,
            String name, long version, int type,
            VersionedPackage declaringPackage, List<VersionedPackage> dependentPackages,
            List<SharedLibraryInfo> dependencies) {
        this(path, packageName, codePaths, name, version, type, declaringPackage, dependentPackages,
            dependencies, false /* isNative */);
    }

    private SharedLibraryInfo(Parcel parcel) {
    private SharedLibraryInfo(Parcel parcel) {
        mPath = parcel.readString8();
        mPath = parcel.readString8();
        mPackageName = parcel.readString8();
        mPackageName = parcel.readString8();
+6 −3
Original line number Original line Diff line number Diff line
@@ -391,16 +391,19 @@ public class ZygoteInit {
        SharedLibraryInfo hidlBase = new SharedLibraryInfo(
        SharedLibraryInfo hidlBase = new SharedLibraryInfo(
                "/system/framework/android.hidl.base-V1.0-java.jar", null /*packageName*/,
                "/system/framework/android.hidl.base-V1.0-java.jar", null /*packageName*/,
                null /*codePaths*/, null /*name*/, 0 /*version*/, SharedLibraryInfo.TYPE_BUILTIN,
                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(
        SharedLibraryInfo hidlManager = new SharedLibraryInfo(
                "/system/framework/android.hidl.manager-V1.0-java.jar", null /*packageName*/,
                "/system/framework/android.hidl.manager-V1.0-java.jar", null /*packageName*/,
                null /*codePaths*/, null /*name*/, 0 /*version*/, SharedLibraryInfo.TYPE_BUILTIN,
                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(
        SharedLibraryInfo androidTestBase = new SharedLibraryInfo(
                "/system/framework/android.test.base.jar", null /*packageName*/,
                "/system/framework/android.test.base.jar", null /*packageName*/,
                null /*codePaths*/, null /*name*/, 0 /*version*/, SharedLibraryInfo.TYPE_BUILTIN,
                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(
        ApplicationLoaders.getDefault().createAndCacheNonBootclasspathSystemClassLoaders(
                new SharedLibraryInfo[]{
                new SharedLibraryInfo[]{
+1 −1
Original line number Original line Diff line number Diff line
@@ -42,7 +42,7 @@ public class ApplicationLoadersTest {
        return new SharedLibraryInfo(
        return new SharedLibraryInfo(
                zip, null /*packageName*/, null /*codePaths*/, null /*name*/, 0 /*version*/,
                zip, null /*packageName*/, null /*codePaths*/, null /*name*/, 0 /*version*/,
                SharedLibraryInfo.TYPE_BUILTIN, null /*declaringPackage*/,
                SharedLibraryInfo.TYPE_BUILTIN, null /*declaringPackage*/,
                null /*dependentPackages*/, null /*dependencies*/);
                null /*dependentPackages*/, null /*dependencies*/, false /*isNative*/);
    }
    }


    @Test
    @Test
+4 −2
Original line number Original line Diff line number Diff line
@@ -5722,7 +5722,8 @@ public class PackageManagerService extends IPackageManager.Stub
                            getPackagesUsingSharedLibraryLPr(libInfo, flags, userId),
                            getPackagesUsingSharedLibraryLPr(libInfo, flags, userId),
                            (libInfo.getDependencies() == null
                            (libInfo.getDependencies() == null
                                    ? null
                                    ? null
                                    : new ArrayList<>(libInfo.getDependencies())));
                                    : new ArrayList<>(libInfo.getDependencies())),
                            libInfo.isNative());
                    if (result == null) {
                    if (result == null) {
                        result = new ArrayList<>();
                        result = new ArrayList<>();
@@ -5791,7 +5792,8 @@ public class PackageManagerService extends IPackageManager.Stub
                            libraryInfo.getLongVersion(), libraryInfo.getType(),
                            libraryInfo.getLongVersion(), libraryInfo.getType(),
                            libraryInfo.getDeclaringPackage(), getPackagesUsingSharedLibraryLPr(
                            libraryInfo.getDeclaringPackage(), getPackagesUsingSharedLibraryLPr(
                            libraryInfo, flags, userId), libraryInfo.getDependencies() == null
                            libraryInfo, flags, userId), libraryInfo.getDependencies() == null
                            ? null : new ArrayList<>(libraryInfo.getDependencies()));
                            ? null : new ArrayList<>(libraryInfo.getDependencies()),
                            libraryInfo.isNative());
                    if (result == null) {
                    if (result == null) {
                        result = new ArrayList<>();
                        result = new ArrayList<>();
+2 −2
Original line number Original line Diff line number Diff line
@@ -94,7 +94,7 @@ public class AndroidPackageUtils {
                SharedLibraryInfo.TYPE_STATIC,
                SharedLibraryInfo.TYPE_STATIC,
                new VersionedPackage(pkg.getManifestPackageName(),
                new VersionedPackage(pkg.getManifestPackageName(),
                        pkg.getLongVersionCode()),
                        pkg.getLongVersionCode()),
                null, null);
                null, null, false /* isNative */);
    }
    }


    public static SharedLibraryInfo createSharedLibraryForDynamic(AndroidPackage pkg, String name) {
    public static SharedLibraryInfo createSharedLibraryForDynamic(AndroidPackage pkg, String name) {
@@ -103,7 +103,7 @@ public class AndroidPackageUtils {
                SharedLibraryInfo.VERSION_UNDEFINED,
                SharedLibraryInfo.VERSION_UNDEFINED,
                SharedLibraryInfo.TYPE_DYNAMIC, new VersionedPackage(pkg.getPackageName(),
                SharedLibraryInfo.TYPE_DYNAMIC, new VersionedPackage(pkg.getPackageName(),
                pkg.getLongVersionCode()),
                pkg.getLongVersionCode()),
                null, null);
                null, null, false /* isNative */);
    }
    }


    /**
    /**
Loading