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

Commit e7982811 authored by Rhed Jao's avatar Rhed Jao
Browse files

Move shared library info out of PackageManagerService (1/n)

Introduce a new class SharedLibrariesImpl in this cl. Moving the
shared library info and relating functions into it.

Bug: 200588896
Test: atest StaticSharedLibsHostTests
Test: atest PackageManagerTest
Change-Id: I1fbc6d4b93c5801cb493746b5c844da33db39092
parent f62ba689
Loading
Loading
Loading
Loading
+6 −57
Original line number Diff line number Diff line
@@ -320,10 +320,7 @@ public class ComputerEngine implements Computer {
    private final WatchedArrayMap<String, AndroidPackage> mPackages;
    private final WatchedArrayMap<ComponentName, ParsedInstrumentation>
            mInstrumentation;
    private final WatchedArrayMap<String, WatchedLongSparseArray<SharedLibraryInfo>>
            mStaticLibsByDeclaringPackage;
    private final WatchedArrayMap<String, WatchedLongSparseArray<SharedLibraryInfo>>
            mSharedLibraries;
    private final SharedLibrariesRead mSharedLibraries;
    private final ComponentName mLocalResolveComponentName;
    private final ActivityInfo mResolveActivity;
    private final WatchedSparseBooleanArray mWebInstantAppsDisabled;
@@ -375,8 +372,7 @@ public class ComputerEngine implements Computer {
        mSettings = new Settings(args.settings);
        mIsolatedOwners = args.isolatedOwners;
        mPackages = args.packages;
        mSharedLibraries = args.sharedLibs;
        mStaticLibsByDeclaringPackage = args.staticLibs;
        mSharedLibraries = args.sharedLibraries;
        mInstrumentation = args.instrumentation;
        mWebInstantAppsDisabled = args.webInstantAppsDisabled;
        mLocalResolveComponentName = args.resolveComponentName;
@@ -2006,8 +2002,7 @@ public class ComputerEngine implements Computer {

    @Nullable
    public final SharedLibraryInfo getSharedLibraryInfo(String name, long version) {
        return SharedLibraryHelper.getSharedLibraryInfo(
                name, version, mSharedLibraries, null);
        return mSharedLibraries.getSharedLibraryInfo(name, version);
    }

    /**
@@ -2058,7 +2053,7 @@ public class ComputerEngine implements Computer {

        // Is this a static library?
        WatchedLongSparseArray<SharedLibraryInfo> versionedLib =
                mStaticLibsByDeclaringPackage.get(packageName);
                mSharedLibraries.getStaticLibraryInfos(packageName);
        if (versionedLib == null || versionedLib.size() <= 0) {
            return packageName;
        }
@@ -3056,54 +3051,8 @@ public class ComputerEngine implements Computer {
            }

            case DumpState.DUMP_LIBS:
            {
                boolean printedHeader = false;
                final int numSharedLibraries = mSharedLibraries.size();
                for (int index = 0; index < numSharedLibraries; index++) {
                    final String libName = mSharedLibraries.keyAt(index);
                    final WatchedLongSparseArray<SharedLibraryInfo> versionedLib =
                            mSharedLibraries.get(libName);
                    if (versionedLib == null) {
                        continue;
                    }
                    final int versionCount = versionedLib.size();
                    for (int i = 0; i < versionCount; i++) {
                        SharedLibraryInfo libraryInfo = versionedLib.valueAt(i);
                        if (!checkin) {
                            if (!printedHeader) {
                                if (dumpState.onTitlePrinted()) {
                                    pw.println();
                                }
                                pw.println("Libraries:");
                                printedHeader = true;
                            }
                            pw.print("  ");
                        } else {
                            pw.print("lib,");
                        }
                        pw.print(libraryInfo.getName());
                        if (libraryInfo.isStatic()) {
                            pw.print(" version=" + libraryInfo.getLongVersion());
                        }
                        if (!checkin) {
                            pw.print(" -> ");
                        }
                        if (libraryInfo.getPath() != null) {
                            if (libraryInfo.isNative()) {
                                pw.print(" (so) ");
                            } else {
                                pw.print(" (jar) ");
                            }
                            pw.print(libraryInfo.getPath());
                        } else {
                            pw.print(" (apk) ");
                            pw.print(libraryInfo.getPackageName());
                        }
                        pw.println();
                    }
                }
                mSharedLibraries.dump(pw, dumpState);
                break;
            }

            case DumpState.DUMP_PREFERRED:
                mSettings.dumpPreferred(pw, dumpState, packageName);
@@ -3544,7 +3493,7 @@ public class ComputerEngine implements Computer {
    @NonNull
    @Override
    public WatchedArrayMap<String, WatchedLongSparseArray<SharedLibraryInfo>> getSharedLibraries() {
        return mSharedLibraries;
        return mSharedLibraries.getAll();
    }

    @NonNull
+1 −32
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import android.content.ComponentName;
import android.content.pm.FeatureInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.content.pm.SharedLibraryInfo;
import android.os.Binder;
import android.os.UserHandle;
import android.os.incremental.PerUidReadTimeouts;
@@ -37,7 +36,6 @@ import android.util.proto.ProtoOutputStream;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.pm.verify.domain.proxy.DomainVerificationProxy;
import com.android.server.utils.WatchedLongSparseArray;

import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -710,7 +708,7 @@ final class DumpHelper {
                proto.end(verifierPackageToken);
            }

            dumpSharedLibrariesProto(proto);
            mPm.mInjector.getSharedLibrariesImpl().dumpProto(proto);
            dumpFeaturesProto(proto);
            mPm.mSettings.dumpPackagesProto(proto);
            mPm.mSettings.dumpSharedUsersProto(proto);
@@ -728,33 +726,4 @@ final class DumpHelper {
            }
        }
    }

    private void dumpSharedLibrariesProto(ProtoOutputStream proto) {
        final int count = mPm.mSharedLibraries.size();
        for (int i = 0; i < count; i++) {
            final String libName = mPm.mSharedLibraries.keyAt(i);
            WatchedLongSparseArray<SharedLibraryInfo> versionedLib =
                    mPm.mSharedLibraries.get(libName);
            if (versionedLib == null) {
                continue;
            }
            final int versionCount = versionedLib.size();
            for (int j = 0; j < versionCount; j++) {
                final SharedLibraryInfo libraryInfo = versionedLib.valueAt(j);
                final long sharedLibraryToken =
                        proto.start(PackageServiceDumpProto.SHARED_LIBRARIES);
                proto.write(PackageServiceDumpProto.SharedLibraryProto.NAME, libraryInfo.getName());
                final boolean isJar = (libraryInfo.getPath() != null);
                proto.write(PackageServiceDumpProto.SharedLibraryProto.IS_JAR, isJar);
                if (isJar) {
                    proto.write(PackageServiceDumpProto.SharedLibraryProto.PATH,
                            libraryInfo.getPath());
                } else {
                    proto.write(PackageServiceDumpProto.SharedLibraryProto.APK,
                            libraryInfo.getPackageName());
                }
                proto.end(sharedLibraryToken);
            }
        }
    }
}
+17 −15
Original line number Diff line number Diff line
@@ -207,6 +207,7 @@ final class InstallPackageHelper {
    private final PackageAbiHelper mPackageAbiHelper;
    private final ViewCompiler mViewCompiler;
    private final IBackupManager mIBackupManager;
    private final SharedLibrariesImpl mSharedLibraries;

    // TODO(b/198166813): remove PMS dependency
    InstallPackageHelper(PackageManagerService pm, AppDataHelper appDataHelper) {
@@ -226,6 +227,7 @@ final class InstallPackageHelper {
        mPackageAbiHelper = pm.mInjector.getAbiHelper();
        mViewCompiler = pm.mInjector.getViewCompiler();
        mIBackupManager = pm.mInjector.getIBackupManager();
        mSharedLibraries = pm.mInjector.getSharedLibrariesImpl();
    }

    InstallPackageHelper(PackageManagerService pm) {
@@ -325,7 +327,7 @@ final class InstallPackageHelper {
        }

        if (reconciledPkg.mCollectedSharedLibraryInfos != null) {
            mPm.executeSharedLibrariesUpdateLPr(pkg, pkgSetting, null, null,
            mSharedLibraries.executeSharedLibrariesUpdateLPw(pkg, pkgSetting, null, null,
                    reconciledPkg.mCollectedSharedLibraryInfos, allUsers);
        }

@@ -388,13 +390,13 @@ final class InstallPackageHelper {
        synchronized (mPm.mLock) {
            if (!ArrayUtils.isEmpty(reconciledPkg.mAllowedSharedLibraryInfos)) {
                for (SharedLibraryInfo info : reconciledPkg.mAllowedSharedLibraryInfos) {
                    mPm.commitSharedLibraryInfoLocked(info);
                    mSharedLibraries.commitSharedLibraryInfoLPw(info);
                }
                final Map<String, AndroidPackage> combinedSigningDetails =
                        reconciledPkg.getCombinedAvailablePackages();
                try {
                    // Shared libraries for the package need to be updated.
                    mPm.updateSharedLibrariesLocked(pkg, pkgSetting, null, null,
                    mSharedLibraries.updateSharedLibrariesLPw(pkg, pkgSetting, null, null,
                            combinedSigningDetails);
                } catch (PackageManagerException e) {
                    Slog.e(TAG, "updateSharedLibrariesLPr failed: ", e);
@@ -402,7 +404,7 @@ final class InstallPackageHelper {
                // Update all applications that use this library. Skip when booting
                // since this will be done after all packages are scaned.
                if ((scanFlags & SCAN_BOOTING) == 0) {
                    clientLibPkgs = mPm.updateAllSharedLibrariesLocked(pkg, pkgSetting,
                    clientLibPkgs = mSharedLibraries.updateAllSharedLibrariesLPw(pkg, pkgSetting,
                            combinedSigningDetails);
                }
            }
@@ -945,7 +947,7 @@ final class InstallPackageHelper {
                    if (result.mStaticSharedLibraryInfo != null
                            || result.mSdkSharedLibraryInfo != null) {
                        final PackageSetting sharedLibLatestVersionSetting =
                                mPm.getSharedLibLatestVersionSetting(result);
                                mSharedLibraries.getSharedLibLatestVersionSetting(result);
                        if (sharedLibLatestVersionSetting != null) {
                            lastStaticSharedLibSettings.put(
                                    result.mPkgSetting.getPkg().getPackageName(),
@@ -961,7 +963,7 @@ final class InstallPackageHelper {
                    reconcileRequest = new ReconcileRequest(preparedScans, installArgs,
                    installResults,
                    prepareResults,
                    mPm.mSharedLibraries,
                    mSharedLibraries.getAll(),
                    Collections.unmodifiableMap(mPm.mPackages), versionInfos,
                    lastStaticSharedLibSettings);
            CommitRequest commitRequest = null;
@@ -1207,7 +1209,7 @@ final class InstallPackageHelper {
                // the package setting for the latest library version.
                PackageSetting signatureCheckPs = ps;
                if (parsedPackage.isStaticSharedLibrary()) {
                    SharedLibraryInfo libraryInfo = mPm.getLatestSharedLibraVersionLPr(
                    SharedLibraryInfo libraryInfo = mSharedLibraries.getLatestSharedLibraVersionLPr(
                            parsedPackage);
                    if (libraryInfo != null) {
                        signatureCheckPs = mPm.mSettings.getPackageLPr(
@@ -2969,7 +2971,8 @@ final class InstallPackageHelper {
                synchronized (mPm.mLock) {
                    mAppDataHelper.prepareAppDataAfterInstallLIF(pkg);
                    try {
                        mPm.updateSharedLibrariesLocked(pkg, stubPkgSetting, null, null,
                        mSharedLibraries.updateSharedLibrariesLPw(
                                pkg, stubPkgSetting, null, null,
                                Collections.unmodifiableMap(mPm.mPackages));
                    } catch (PackageManagerException e) {
                        Slog.w(TAG, "updateAllSharedLibrariesLPw failed: ", e);
@@ -3180,7 +3183,7 @@ final class InstallPackageHelper {

        try {
            // update shared libraries for the newly re-installed system package
            mPm.updateSharedLibrariesLocked(pkg, pkgSetting, null, null,
            mSharedLibraries.updateSharedLibrariesLPw(pkg, pkgSetting, null, null,
                    Collections.unmodifiableMap(mPm.mPackages));
        } catch (PackageManagerException e) {
            Slog.e(TAG, "updateAllSharedLibrariesLPw failed: " + e.getMessage());
@@ -3559,15 +3562,14 @@ final class InstallPackageHelper {
                            ReconcilePackageUtils.reconcilePackages(
                                    new ReconcileRequest(
                                            Collections.singletonMap(pkgName, scanResult),
                                            mPm.mSharedLibraries,
                                            mSharedLibraries.getAll(),
                                            mPm.mPackages,
                                            Collections.singletonMap(
                                                    pkgName,
                                                    mPm.getSettingsVersionForPackage(
                                                            parsedPackage)),
                                            Collections.singletonMap(pkgName,
                                                    mPm.getSharedLibLatestVersionSetting(
                                                            scanResult))),
                                            Collections.singletonMap(pkgName, mSharedLibraries
                                                    .getSharedLibLatestVersionSetting(scanResult))),
                                    mPm.mSettings.getKeySetManagerService(), mPm.mInjector);
                    appIdCreated = optimisticallyRegisterAppId(scanResult);
                    commitReconciledScanResultLocked(
@@ -4192,8 +4194,8 @@ final class InstallPackageHelper {
        long minVersionCode = Long.MIN_VALUE;
        long maxVersionCode = Long.MAX_VALUE;

        WatchedLongSparseArray<SharedLibraryInfo> versionedLib = mPm.mSharedLibraries.get(
                pkg.getStaticSharedLibName());
        WatchedLongSparseArray<SharedLibraryInfo> versionedLib =
                mSharedLibraries.getSharedLibraryInfos(pkg.getStaticSharedLibName());
        if (versionedLib != null) {
            final int versionCount = versionedLib.size();
            for (int i = 0; i < versionCount; i++) {
+2 −1
Original line number Diff line number Diff line
@@ -388,7 +388,8 @@ final class PackageHandler extends Handler {
            }
            case PRUNE_UNUSED_STATIC_SHARED_LIBRARIES: {
                try {
                    mPm.pruneUnusedStaticSharedLibraries(Long.MAX_VALUE,
                    mPm.mInjector.getSharedLibrariesImpl().pruneUnusedStaticSharedLibraries(
                            Long.MAX_VALUE,
                            Settings.Global.getLong(mPm.mContext.getContentResolver(),
                                    Settings.Global.UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD,
                                    DEFAULT_UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD));
+14 −387

File changed.

Preview size limit exceeded, changes collapsed.

Loading