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

Commit 6571c8a4 authored by Winson's avatar Winson
Browse files

Critical fixes for AndroidPackage migration

Includes a series of fixes for bugs found during development of tests.
Those tests will be included in another CL. For now, merge the critical
fixes to allow devices to work properly.

Test: manual run atest com.android.server.pm.parsing with verify all
Test: atest android.content.pm.PackageParserTest
Test: atest com.android.server.pm.PackageParserTest
Test: atest com.android.server.pm.ScanTests

Change-Id: Ic8eb4b0072150f3841fd07f817060549591d4d91
parent 655a5b9c
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.content.pm.ConfigurationInfo;
import android.content.pm.FeatureGroupInfo;
import android.content.pm.FeatureInfo;
import android.content.pm.PackageParser;
import android.content.pm.PackageUserState;
import android.content.pm.SharedLibraryInfo;
import android.content.pm.parsing.ComponentParseUtils.ParsedActivity;
import android.content.pm.parsing.ComponentParseUtils.ParsedActivityIntentInfo;
@@ -452,7 +453,13 @@ public interface AndroidPackage extends Parcelable {

    boolean requestsIsolatedSplitLoading();

    ApplicationInfo toAppInfo();
    /**
     * Generates an {@link ApplicationInfo} object with only the data available in this object.
     *
     * This does not contain any system or user state data, and should be avoided. Prefer
     * {@link PackageInfoUtils#generateApplicationInfo(AndroidPackage, int, PackageUserState, int)}.
     */
    ApplicationInfo toAppInfoWithoutState();

    Creator<PackageImpl> CREATOR = new Creator<PackageImpl>() {
        @Override
+1 −44
Original line number Diff line number Diff line
@@ -50,7 +50,6 @@ import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Slog;
import android.util.SparseArray;
import android.util.TypedValue;
import android.view.Gravity;

@@ -947,7 +946,7 @@ public class ComponentParseUtils {
        }

        public boolean isRuntime() {
            return protectionLevel == PermissionInfo.PROTECTION_DANGEROUS;
            return getProtection() == PermissionInfo.PROTECTION_DANGEROUS;
        }

        public boolean isAppOp() {
@@ -1104,20 +1103,6 @@ public class ComponentParseUtils {
        public boolean handleProfiling;
        public boolean functionalTest;

        public String sourceDir;
        public String publicSourceDir;
        public String[] splitNames;
        public String[] splitSourceDirs;
        public String[] splitPublicSourceDirs;
        public SparseArray<int[]> splitDependencies;
        public String dataDir;
        public String deviceProtectedDataDir;
        public String credentialProtectedDataDir;
        public String primaryCpuAbi;
        public String secondaryCpuAbi;
        public String nativeLibraryDir;
        public String secondaryNativeLibraryDir;

        public ParsedInstrumentation() {
        }

@@ -1149,42 +1134,14 @@ public class ComponentParseUtils {
            dest.writeString(this.targetProcesses);
            dest.writeBoolean(this.handleProfiling);
            dest.writeBoolean(this.functionalTest);
            dest.writeString(this.sourceDir);
            dest.writeString(this.publicSourceDir);
            dest.writeStringArray(this.splitNames);
            dest.writeStringArray(this.splitSourceDirs);
            dest.writeStringArray(this.splitPublicSourceDirs);
            dest.writeSparseArray(this.splitDependencies);
            dest.writeString(this.dataDir);
            dest.writeString(this.deviceProtectedDataDir);
            dest.writeString(this.credentialProtectedDataDir);
            dest.writeString(this.primaryCpuAbi);
            dest.writeString(this.secondaryCpuAbi);
            dest.writeString(this.nativeLibraryDir);
            dest.writeString(this.secondaryNativeLibraryDir);
        }

        protected ParsedInstrumentation(Parcel in) {
            super(in);
            // We use the boot classloader for all classes that we load.
            final ClassLoader boot = Object.class.getClassLoader();
            this.targetPackage = TextUtils.safeIntern(in.readString());
            this.targetProcesses = TextUtils.safeIntern(in.readString());
            this.handleProfiling = in.readByte() != 0;
            this.functionalTest = in.readByte() != 0;
            this.sourceDir = in.readString();
            this.publicSourceDir = in.readString();
            this.splitNames = in.createStringArray();
            this.splitSourceDirs = in.createStringArray();
            this.splitPublicSourceDirs = in.createStringArray();
            this.splitDependencies = in.readSparseArray(boot);
            this.dataDir = in.readString();
            this.deviceProtectedDataDir = in.readString();
            this.credentialProtectedDataDir = in.readString();
            this.primaryCpuAbi = in.readString();
            this.secondaryCpuAbi = in.readString();
            this.nativeLibraryDir = in.readString();
            this.secondaryNativeLibraryDir = in.readString();
        }

        public static final Creator<ParsedInstrumentation> CREATOR =
+88 −67
Original line number Diff line number Diff line
@@ -2256,75 +2256,96 @@ public final class PackageImpl implements ParsingPackage, ParsedPackage, Android
    }

    @Override
    public ApplicationInfo toAppInfo() {
    public ApplicationInfo toAppInfoWithoutState() {
        updateFlags();

        ApplicationInfo applicationInfo = new ApplicationInfo();
        applicationInfo.packageName = packageName;
        applicationInfo.flags = flags;
        applicationInfo.privateFlags = privateFlags;
        applicationInfo.sharedLibraryFiles = usesLibraryFiles;
        applicationInfo.sharedLibraryInfos = usesLibraryInfos;

        applicationInfo.appComponentFactory = appComponentFactory;
        applicationInfo.backupAgentName = backupAgentName;
        applicationInfo.banner = banner;
        applicationInfo.category = category;
        applicationInfo.classLoaderName = classLoaderName;
        applicationInfo.className = className;
        applicationInfo.compatibleWidthLimitDp = compatibleWidthLimitDp;
        applicationInfo.credentialProtectedDataDir = credentialProtectedDataDir;
        applicationInfo.dataDir = dataDir;
        applicationInfo.descriptionRes = descriptionRes;
        applicationInfo.deviceProtectedDataDir = deviceProtectedDataDir;
        applicationInfo.enabled = enabled;
        applicationInfo.fullBackupContent = fullBackupContent;
        applicationInfo.icon = icon;
        applicationInfo.iconRes = iconRes;
        applicationInfo.installLocation = installLocation;
        applicationInfo.labelRes = labelRes;
        applicationInfo.largestWidthLimitDp = largestWidthLimitDp;
        applicationInfo.logo = logo;
        applicationInfo.manageSpaceActivityName = manageSpaceActivityName;
        applicationInfo.maxAspectRatio = maxAspectRatio;
        applicationInfo.minAspectRatio = minAspectRatio;
        applicationInfo.minSdkVersion = minSdkVersion;
        applicationInfo.name = name;
        applicationInfo.nativeLibraryDir = nativeLibraryDir;
        applicationInfo.nativeLibraryRootDir = nativeLibraryRootDir;
        applicationInfo.nativeLibraryRootRequiresIsa = nativeLibraryRootRequiresIsa;
        applicationInfo.networkSecurityConfigRes = networkSecurityConfigRes;
        applicationInfo.nonLocalizedLabel = nonLocalizedLabel;
        applicationInfo.permission = permission;
        applicationInfo.primaryCpuAbi = primaryCpuAbi;
        applicationInfo.processName = processName;
        applicationInfo.requiresSmallestWidthDp = requiresSmallestWidthDp;
        applicationInfo.roundIconRes = roundIconRes;
        applicationInfo.secondaryCpuAbi = secondaryCpuAbi;
        applicationInfo.secondaryNativeLibraryDir = secondaryNativeLibraryDir;
        applicationInfo.seInfo = seInfo;
        applicationInfo.seInfoUser = seInfoUser;
        applicationInfo.splitClassLoaderNames = splitClassLoaderNames;
        applicationInfo.splitDependencies = splitDependencies;
        applicationInfo.splitNames = splitNames;
        applicationInfo.storageUuid = StorageManager.convert(applicationVolumeUuid);
        applicationInfo.targetSandboxVersion = targetSandboxVersion;
        applicationInfo.targetSdkVersion = targetSdkVersion;
        applicationInfo.taskAffinity = taskAffinity;
        applicationInfo.theme = theme;
        applicationInfo.uid = uid;
        applicationInfo.uiOptions = uiOptions;
        applicationInfo.volumeUuid = applicationVolumeUuid;
        applicationInfo.zygotePreloadName = zygotePreloadName;

        applicationInfo.setBaseCodePath(baseCodePath);
        applicationInfo.setBaseResourcePath(applicationInfoBaseResourcePath);
        applicationInfo.setCodePath(applicationInfoCodePath);
        applicationInfo.setResourcePath(applicationInfoResourcePath);
        applicationInfo.setSplitCodePaths(splitCodePaths);
        applicationInfo.setSplitResourcePaths(applicationInfoSplitResourcePaths);

        return applicationInfo;
        ApplicationInfo appInfo = new ApplicationInfo();
        appInfo.packageName = packageName;
        appInfo.flags = flags;
        appInfo.privateFlags = privateFlags;

        appInfo.appComponentFactory = appComponentFactory;
        appInfo.backupAgentName = backupAgentName;
        appInfo.banner = banner;
        appInfo.category = category;
        appInfo.classLoaderName = classLoaderName;
        appInfo.className = className;
        appInfo.compatibleWidthLimitDp = compatibleWidthLimitDp;
        appInfo.compileSdkVersion = compileSdkVersion;
        appInfo.compileSdkVersionCodename = compileSdkVersionCodename;
        appInfo.credentialProtectedDataDir = credentialProtectedDataDir;
        appInfo.dataDir = dataDir;
        appInfo.descriptionRes = descriptionRes;
        appInfo.deviceProtectedDataDir = deviceProtectedDataDir;
        appInfo.enabled = enabled;
        appInfo.fullBackupContent = fullBackupContent;
        appInfo.hiddenUntilInstalled = hiddenUntilInstalled;
        appInfo.icon = icon;
        appInfo.iconRes = iconRes;
        appInfo.installLocation = installLocation;
        appInfo.labelRes = labelRes;
        appInfo.largestWidthLimitDp = largestWidthLimitDp;
        appInfo.logo = logo;
        appInfo.manageSpaceActivityName = manageSpaceActivityName;
        appInfo.maxAspectRatio = maxAspectRatio;
        appInfo.metaData = appMetaData;
        appInfo.minAspectRatio = minAspectRatio;
        appInfo.minSdkVersion = minSdkVersion;
        appInfo.name = name;
        if (appInfo.name != null) {
            appInfo.name = appInfo.name.trim();
        }
        appInfo.nativeLibraryDir = nativeLibraryDir;
        appInfo.nativeLibraryRootDir = nativeLibraryRootDir;
        appInfo.nativeLibraryRootRequiresIsa = nativeLibraryRootRequiresIsa;
        appInfo.networkSecurityConfigRes = networkSecurityConfigRes;
        appInfo.nonLocalizedLabel = nonLocalizedLabel;
        if (appInfo.nonLocalizedLabel != null) {
            appInfo.nonLocalizedLabel = appInfo.nonLocalizedLabel.toString().trim();
        }
        appInfo.packageName = packageName;
        appInfo.permission = permission;
        appInfo.primaryCpuAbi = primaryCpuAbi;
        appInfo.processName = getProcessName();
        appInfo.requiresSmallestWidthDp = requiresSmallestWidthDp;
        appInfo.roundIconRes = roundIconRes;
        appInfo.secondaryCpuAbi = secondaryCpuAbi;
        appInfo.secondaryNativeLibraryDir = secondaryNativeLibraryDir;
        appInfo.seInfo = seInfo;
        appInfo.seInfoUser = seInfoUser;
        appInfo.sharedLibraryFiles = usesLibraryFiles;
        appInfo.sharedLibraryInfos = ArrayUtils.isEmpty(usesLibraryInfos) ? null : usesLibraryInfos;
        appInfo.splitClassLoaderNames = splitClassLoaderNames;
        appInfo.splitDependencies = splitDependencies;
        appInfo.splitNames = splitNames;
        appInfo.storageUuid = StorageManager.convert(volumeUuid);
        appInfo.targetSandboxVersion = targetSandboxVersion;
        appInfo.targetSdkVersion = targetSdkVersion;
        appInfo.taskAffinity = taskAffinity;
        appInfo.theme = theme;
        appInfo.uid = uid;
        appInfo.uiOptions = uiOptions;
        appInfo.volumeUuid = volumeUuid;
        appInfo.zygotePreloadName = zygotePreloadName;

        appInfo.setBaseCodePath(baseCodePath);
        appInfo.setBaseResourcePath(baseCodePath);
        appInfo.setCodePath(codePath);
        appInfo.setResourcePath(codePath);
        appInfo.setSplitCodePaths(splitCodePaths);
        appInfo.setSplitResourcePaths(splitCodePaths);
        appInfo.setVersionCode(getLongVersionCode());

        // TODO(b/135203078): Can this be removed? Looks only used in ActivityInfo.
//        appInfo.showUserIcon = pkg.getShowUserIcon();
        // TODO(b/135203078): Unused?
//        appInfo.resourceDirs = pkg.getResourceDirs();
        // TODO(b/135203078): Unused?
//        appInfo.enabledSetting = pkg.getEnabledSetting();
        // TODO(b/135203078): See PackageImpl#getHiddenApiEnforcementPolicy
//        appInfo.mHiddenApiPolicy = pkg.getHiddenApiPolicy();

        return appInfo;
    }

    @Override
+22 −182

File changed.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ public class AndroidTestBaseUpdater extends PackageSharedLibraryUpdater {
                    ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE));
            try {
                return platformCompat.isChangeEnabled(REMOVE_ANDROID_TEST_BASE,
                        pkg.toAppInfo());
                        pkg.toAppInfoWithoutState());
            } catch (RemoteException | NullPointerException e) {
                Log.e(TAG, "Failed to get a response from PLATFORM_COMPAT_SERVICE", e);
            }
Loading