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

Commit 0ddbce0b authored by Ben Lin's avatar Ben Lin Committed by Android (Google) Code Review
Browse files

Merge "Obtain dependency information from permissions files for SharedLibs."

parents c9c6a91e 71c16d71
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -22,15 +22,15 @@ package android.content.pm;
 */
public class SharedLibraryNames {

    public static final String ANDROID_HIDL_BASE = "android.hidl.base-V1.0-java";
    static final String ANDROID_HIDL_BASE = "android.hidl.base-V1.0-java";

    public static final String ANDROID_HIDL_MANAGER = "android.hidl.manager-V1.0-java";
    static final String ANDROID_HIDL_MANAGER = "android.hidl.manager-V1.0-java";

    public static final String ANDROID_TEST_BASE = "android.test.base";
    static final String ANDROID_TEST_BASE = "android.test.base";

    public static final String ANDROID_TEST_MOCK = "android.test.mock";
    static final String ANDROID_TEST_MOCK = "android.test.mock";

    public static final String ANDROID_TEST_RUNNER = "android.test.runner";
    static final String ANDROID_TEST_RUNNER = "android.test.runner";

    public static final String ORG_APACHE_HTTP_LEGACY = "org.apache.http.legacy";
}
+21 −7
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Environment;
import android.os.Process;
import android.os.SystemProperties;
import android.os.storage.StorageManager;
import android.permission.PermissionManager.SplitPermissionInfo;
import android.text.TextUtils;
@@ -78,10 +77,23 @@ public class SystemConfig {

    final ArrayList<SplitPermissionInfo> mSplitPermissions = new ArrayList<>();

    public static final class SharedLibraryEntry {
        public final String name;
        public final String filename;
        public final String[] dependencies;

        SharedLibraryEntry(String name, String filename, String[] dependencies) {
            this.name = name;
            this.filename = filename;
            this.dependencies = dependencies;
        }
    }

    // These are the built-in shared libraries that were read from the
    // system configuration files.  Keys are the library names; strings are the
    // paths to the libraries.
    final ArrayMap<String, String> mSharedLibraries  = new ArrayMap<>();
    // system configuration files. Keys are the library names; values are
    // the individual entries that contain information such as filename
    // and dependencies.
    final ArrayMap<String, SharedLibraryEntry> mSharedLibraries = new ArrayMap<>();

    // These are the features this devices supports that were read from the
    // system configuration files.
@@ -200,7 +212,7 @@ public class SystemConfig {
        return mSplitPermissions;
    }

    public ArrayMap<String, String> getSharedLibraries() {
    public ArrayMap<String, SharedLibraryEntry> getSharedLibraries() {
        return mSharedLibraries;
    }

@@ -497,6 +509,7 @@ public class SystemConfig {
                } else if ("library".equals(name) && allowLibs) {
                    String lname = parser.getAttributeValue(null, "name");
                    String lfile = parser.getAttributeValue(null, "file");
                    String ldependency = parser.getAttributeValue(null, "dependency");
                    if (lname == null) {
                        Slog.w(TAG, "<library> without name in " + permFile + " at "
                                + parser.getPositionDescription());
@@ -505,11 +518,12 @@ public class SystemConfig {
                                + parser.getPositionDescription());
                    } else {
                        //Log.i(TAG, "Got library " + lname + " in " + lfile);
                        mSharedLibraries.put(lname, lfile);
                        SharedLibraryEntry entry = new SharedLibraryEntry(lname, lfile,
                                ldependency == null ? new String[0] : ldependency.split(":"));
                        mSharedLibraries.put(lname, entry);
                    }
                    XmlUtils.skipCurrentTag(parser);
                    continue;

                } else if ("feature".equals(name) && allowFeatures) {
                    String fname = parser.getAttributeValue(null, "name");
                    int fversion = XmlUtils.readIntAttribute(parser, "version", 0);
+6 −3
Original line number Diff line number Diff line
@@ -225,15 +225,18 @@
    <library name="android.test.base"
            file="/system/framework/android.test.base.impl.jar" />
    <library name="android.test.mock"
            file="/system/framework/android.test.mock.impl.jar" />
            file="/system/framework/android.test.mock.impl.jar"
            dependency="android.test.base" />
    <library name="android.test.runner"
            file="/system/framework/android.test.runner.impl.jar" />
            file="/system/framework/android.test.runner.impl.jar"
            dependency="android.test.base:android.test.mock" />

    <!-- In BOOT_JARS historically, and now added to legacy applications. -->
    <library name="android.hidl.base-V1.0-java"
            file="/system/framework/android.hidl.base-V1.0-java.jar" />
    <library name="android.hidl.manager-V1.0-java"
            file="/system/framework/android.hidl.manager-V1.0-java.jar" />
            file="/system/framework/android.hidl.manager-V1.0-java.jar"
            dependency="android.hidl.base-V1.0-java" />

    <!-- These are the standard packages that are white-listed to always have internet
         access while in power save mode, even if they aren't in the foreground. -->
+22 −34
Original line number Diff line number Diff line
@@ -86,11 +86,6 @@ import static android.content.pm.PackageManager.MOVE_FAILED_SYSTEM_PACKAGE;
import static android.content.pm.PackageManager.PERMISSION_DENIED;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.content.pm.PackageParser.isApkFile;
import static android.content.pm.SharedLibraryNames.ANDROID_HIDL_BASE;
import static android.content.pm.SharedLibraryNames.ANDROID_HIDL_MANAGER;
import static android.content.pm.SharedLibraryNames.ANDROID_TEST_BASE;
import static android.content.pm.SharedLibraryNames.ANDROID_TEST_MOCK;
import static android.content.pm.SharedLibraryNames.ANDROID_TEST_RUNNER;
import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER;
import static android.os.storage.StorageManager.FLAG_STORAGE_CE;
import static android.os.storage.StorageManager.FLAG_STORAGE_DE;
@@ -2094,28 +2089,6 @@ public class PackageManagerService extends IPackageManager.Stub
        }
    }
    @GuardedBy("mPackages")
    private void setupBuiltinSharedLibraryDependenciesLocked() {
        // Builtin libraries don't have versions.
        long version = SharedLibraryInfo.VERSION_UNDEFINED;
        SharedLibraryInfo libraryInfo = getSharedLibraryInfoLPr(ANDROID_HIDL_MANAGER, version);
        if (libraryInfo != null) {
            libraryInfo.addDependency(getSharedLibraryInfoLPr(ANDROID_HIDL_BASE, version));
        }
        libraryInfo = getSharedLibraryInfoLPr(ANDROID_TEST_RUNNER, version);
        if (libraryInfo != null) {
            libraryInfo.addDependency(getSharedLibraryInfoLPr(ANDROID_TEST_MOCK, version));
            libraryInfo.addDependency(getSharedLibraryInfoLPr(ANDROID_TEST_BASE, version));
        }
        libraryInfo = getSharedLibraryInfoLPr(ANDROID_TEST_MOCK, version);
        if (libraryInfo != null) {
            libraryInfo.addDependency(getSharedLibraryInfoLPr(ANDROID_TEST_BASE, version));
        }
    }
    public PackageManagerService(Context context, Installer installer,
            boolean factoryTest, boolean onlyCore) {
        LockGuard.installLock(mPackages, LockGuard.INDEX_PACKAGES);
@@ -2223,17 +2196,32 @@ public class PackageManagerService extends IPackageManager.Stub
            Watchdog.getInstance().addThread(mHandler, WATCHDOG_TIMEOUT);
            mInstantAppRegistry = new InstantAppRegistry(this);
            ArrayMap<String, String> libConfig = systemConfig.getSharedLibraries();
            ArrayMap<String, SystemConfig.SharedLibraryEntry> libConfig
                    = systemConfig.getSharedLibraries();
            final int builtInLibCount = libConfig.size();
            for (int i = 0; i < builtInLibCount; i++) {
                String name = libConfig.keyAt(i);
                String path = libConfig.valueAt(i);
                addSharedLibraryLPw(path, null, null, name, SharedLibraryInfo.VERSION_UNDEFINED,
                        SharedLibraryInfo.TYPE_BUILTIN, PLATFORM_PACKAGE_NAME, 0);
                SystemConfig.SharedLibraryEntry entry = libConfig.valueAt(i);
                addSharedLibraryLPw(entry.filename, null, null, name,
                        SharedLibraryInfo.VERSION_UNDEFINED, SharedLibraryInfo.TYPE_BUILTIN,
                        PLATFORM_PACKAGE_NAME, 0);
            }
            // Now that we have added all the libraries, iterate again to add dependency
            // information IFF their dependencies are added.
            long undefinedVersion = SharedLibraryInfo.VERSION_UNDEFINED;
            for (int i = 0; i < builtInLibCount; i++) {
                String name = libConfig.keyAt(i);
                SystemConfig.SharedLibraryEntry entry = libConfig.valueAt(i);
                final int dependencyCount = entry.dependencies.length;
                for (int j = 0; j < dependencyCount; j++) {
                    final SharedLibraryInfo dependency =
                        getSharedLibraryInfoLPr(entry.dependencies[j], undefinedVersion);
                    if (dependency != null) {
                        getSharedLibraryInfoLPr(name, undefinedVersion).addDependency(dependency);
                    }
                }
            }
            // Builtin libraries cannot encode their dependency where they are
            // defined, so fix that now.
            setupBuiltinSharedLibraryDependenciesLocked();
            SELinuxMMAC.readInstallPolicy();