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

Commit e075629d authored by Winson's avatar Winson
Browse files

Remove AndroidPackageWrite

Moves all system state out of AndroidPackage and into
PackageStateUnserialized, which lives inside a PackageSetting.

This makes AndroidPackage effectively immutable after it exits
the scan/install process.

Specifically, moves isUpdatedSystemApp, isHiddenUntilInstalled,
seInfoOverride, cpuAbiOverride, PackageUsage,
and sharedLibraryFiles/Infos.

Bug: 135203078

Test: atest com.android.server.pm.parsing

Change-Id: I44baab113f3b6b138472b15a61e0874173bc694f
parent f00c755a
Loading
Loading
Loading
Loading
+14 −8
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.util.ArraySet;
import android.util.SparseArray;

import com.android.server.pm.PackageList;
import com.android.server.pm.PackageSetting;
import com.android.server.pm.parsing.pkg.AndroidPackage;

import java.io.IOException;
@@ -586,9 +587,7 @@ public abstract class PackageManagerInternal {
     */
    public abstract @Nullable AndroidPackage getPackage(@NonNull String packageName);

    // TODO(b/135203078): PackageSetting can't be referenced directly. Should move to a server side
    //  internal PM which is aware of PS.
    public abstract @Nullable Object getPackageSetting(String packageName);
    public abstract @Nullable PackageSetting getPackageSetting(String packageName);

    /**
     * Returns a package for the given UID. If the UID is part of a shared user ID, one
@@ -625,18 +624,17 @@ public abstract class PackageManagerInternal {
     */
    public abstract void removePackageListObserver(@NonNull PackageListObserver observer);

    // TODO(b/135203078): PackageSetting can't be referenced directly
    /**
     * Returns a package object for the disabled system package name.
     */
    public abstract @Nullable Object getDisabledSystemPackage(@NonNull String packageName);
    public abstract @Nullable PackageSetting getDisabledSystemPackage(@NonNull String packageName);

    /**
     * Returns the package name for the disabled system package.
     *
     * This is equivalent to
     * {@link #getDisabledSystemPackage(String)}
     *     .{@link com.android.server.pm.PackageSetting#pkg}
     *     .{@link PackageSetting#pkg}
     *     .{@link AndroidPackage#getPackageName()}
     */
    public abstract @Nullable String getDisabledSystemPackageName(@NonNull String packageName);
@@ -677,7 +675,7 @@ public abstract class PackageManagerInternal {
    /**
     * Returns whether or not access to the application should be filtered.
     *
     * @see #filterAppAccess(android.content.pm.PackageParser.Package, int, int)
     * @see #filterAppAccess(AndroidPackage, int, int)
     */
    public abstract boolean filterAppAccess(
            @NonNull String packageName, int callingUid, int userId);
@@ -771,12 +769,20 @@ public abstract class PackageManagerInternal {

    /**
     * Perform the given action for each package.
     * Note that packages lock will be held while performin the actions.
     * Note that packages lock will be held while performing the actions.
     *
     * @param actionLocked action to be performed
     */
    public abstract void forEachPackage(Consumer<AndroidPackage> actionLocked);

    /**
     * Perform the given action for each {@link PackageSetting}.
     * Note that packages lock will be held while performing the actions.
     *
     * @param actionLocked action to be performed
     */
    public abstract void forEachPackageSetting(Consumer<PackageSetting> actionLocked);

    /**
     * Perform the given action for each installed package for a user.
     * Note that packages lock will be held while performin the actions.
+1 −1
Original line number Diff line number Diff line
@@ -515,7 +515,7 @@ public class AppIntegrityManagerServiceImpl extends IAppIntegrityManager.Stub {
            int flags = PackageManager.GET_SIGNING_CERTIFICATES | PackageManager.GET_META_DATA;
            pkg.setSigningDetails(ParsingPackageUtils.collectCertificates(pkg, false));
            return PackageInfoUtils.generate(pkg, null, flags, 0, 0, null, new PackageUserState(),
                    UserHandle.getCallingUserId());
                    UserHandle.getCallingUserId(), null);
        } catch (Exception e) {
            throw new IllegalArgumentException("Exception reading " + dataUri, e);
        }
+6 −6
Original line number Diff line number Diff line
@@ -301,7 +301,7 @@ public class ComponentResolver {
                    continue;
                }
                final ProviderInfo info = PackageInfoUtils.generateProviderInfo(
                        pkg, p, flags, ps.readUserState(userId), userId);
                        pkg, p, flags, ps.readUserState(userId), userId, ps);
                if (info == null) {
                    continue;
                }
@@ -331,7 +331,7 @@ public class ComponentResolver {
                return null;
            }
            return PackageInfoUtils.generateProviderInfo(pkg, p, flags,
                    ps.readUserState(userId), userId);
                    ps.readUserState(userId), userId, ps);
        }
    }

@@ -361,7 +361,7 @@ public class ComponentResolver {
                }
                final ProviderInfo info =
                        PackageInfoUtils.generateProviderInfo(pkg, p, 0,
                                ps.readUserState(userId), userId);
                                ps.readUserState(userId), userId, ps);
                if (info == null) {
                    continue;
                }
@@ -1396,7 +1396,7 @@ public class ComponentResolver {
            }
            final PackageUserState userState = ps.readUserState(userId);
            ActivityInfo ai = PackageInfoUtils.generateActivityInfo(pkg, activity, mFlags,
                    userState, userId);
                    userState, userId, ps);
            if (ai == null) {
                if (DEBUG) {
                    log("Failed to create ActivityInfo based on " + activity, info, match,
@@ -1707,7 +1707,7 @@ public class ComponentResolver {
                return null;
            }
            ProviderInfo pi = PackageInfoUtils.generateProviderInfo(pkg, provider, mFlags,
                    userState, userId);
                    userState, userId, ps);
            if (pi == null) {
                return null;
            }
@@ -1916,7 +1916,7 @@ public class ComponentResolver {
            }
            final PackageUserState userState = ps.readUserState(userId);
            ServiceInfo si = PackageInfoUtils.generateServiceInfo(pkg, service, mFlags,
                    userState, userId);
                    userState, userId, ps);
            if (si == null) {
                return null;
            }
+25 −27
Original line number Diff line number Diff line
@@ -694,12 +694,13 @@ class InstantAppRegistry {
            final int packageCount = mService.mPackages.size();
            for (int i = 0; i < packageCount; i++) {
                final AndroidPackage pkg = mService.mPackages.valueAt(i);
                if (now - pkg.getLatestPackageUseTimeInMills() < maxInstalledCacheDuration) {
                final PackageSetting ps = mService.getPackageSetting(pkg.getPackageName());
                if (ps == null) {
                    continue;
                }

                final PackageSetting ps = mService.getPackageSetting(pkg.getPackageName());
                if (ps == null) {
                if (now - ps.getPkgState().getLatestPackageUseTimeInMills()
                        < maxInstalledCacheDuration) {
                    continue;
                }

@@ -732,13 +733,6 @@ class InstantAppRegistry {
                        return -1;
                    } else if (rhsPkg == null) {
                        return 1;
                    } else {
                        if (lhsPkg.getLatestPackageUseTimeInMills() >
                                rhsPkg.getLatestPackageUseTimeInMills()) {
                            return 1;
                        } else if (lhsPkg.getLatestPackageUseTimeInMills() <
                                rhsPkg.getLatestPackageUseTimeInMills()) {
                            return -1;
                    } else {
                        final PackageSetting lhsPs = mService.getPackageSetting(
                                lhsPkg.getPackageName());
@@ -752,13 +746,18 @@ class InstantAppRegistry {
                            return 0;
                        }

                            if (lhsPs.firstInstallTime > rhsPs.firstInstallTime) {
                        if (lhsPs.getPkgState().getLatestPackageUseTimeInMills() >
                                rhsPs.getPkgState().getLatestPackageUseTimeInMills()) {
                            return 1;
                        } else if (lhsPs.getPkgState().getLatestPackageUseTimeInMills() <
                                rhsPs.getPkgState().getLatestPackageUseTimeInMills()) {
                            return -1;
                        } else if (lhsPs.firstInstallTime > rhsPs.firstInstallTime) {
                            return 1;
                        } else {
                            return -1;
                        }
                    }
                    }
                });
            }
        }
@@ -869,10 +868,9 @@ class InstantAppRegistry {
        // TODO(b/135203078): This may be broken due to inner mutability problems that were broken
        //  as part of moving to PackageInfoUtils. Flags couldn't be determined.
        ApplicationInfo appInfo = PackageInfoUtils.generateApplicationInfo(ps.pkg, 0,
                ps.readUserState(userId), userId);
                ps.readUserState(userId), userId, ps);
        if (addApplicationInfo) {
            return new InstantAppInfo(appInfo,
                    requestedPermissions, grantedPermissions);
            return new InstantAppInfo(appInfo, requestedPermissions, grantedPermissions);
        } else {
            return new InstantAppInfo(appInfo.packageName,
                    appInfo.loadLabel(mService.mContext.getPackageManager()),
+1 −9
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.text.TextUtils;
import android.util.ArraySet;

import com.android.server.pm.parsing.pkg.AndroidPackage;
import com.android.server.pm.parsing.pkg.AndroidPackageUtils;

import dalvik.system.VMRuntime;

@@ -110,13 +111,4 @@ public class InstructionSets {

        return VMRuntime.getInstructionSet(abis.primary);
    }

    public static String getPrimaryInstructionSet(AndroidPackage pkg) {
        if (pkg.getPrimaryCpuAbi() == null) {
            return getPreferredInstructionSet();
        }

        return VMRuntime.getInstructionSet(pkg.getPrimaryCpuAbi());
    }

}
Loading