diff options
Diffstat (limited to 'core/java')
5 files changed, 120 insertions, 295 deletions
diff --git a/core/java/android/content/pm/parsing/AndroidPackage.java b/core/java/android/content/pm/parsing/AndroidPackage.java index 74a3431e8501..515185eaaf57 100644 --- a/core/java/android/content/pm/parsing/AndroidPackage.java +++ b/core/java/android/content/pm/parsing/AndroidPackage.java @@ -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 diff --git a/core/java/android/content/pm/parsing/ComponentParseUtils.java b/core/java/android/content/pm/parsing/ComponentParseUtils.java index 66fcc8ee0e23..5364313f5760 100644 --- a/core/java/android/content/pm/parsing/ComponentParseUtils.java +++ b/core/java/android/content/pm/parsing/ComponentParseUtils.java @@ -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 = diff --git a/core/java/android/content/pm/parsing/PackageImpl.java b/core/java/android/content/pm/parsing/PackageImpl.java index 363cf80a0a1d..377279e750c6 100644 --- a/core/java/android/content/pm/parsing/PackageImpl.java +++ b/core/java/android/content/pm/parsing/PackageImpl.java @@ -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 diff --git a/core/java/android/content/pm/parsing/PackageInfoUtils.java b/core/java/android/content/pm/parsing/PackageInfoUtils.java index 7b329ebc5b83..28f0bc4e431f 100644 --- a/core/java/android/content/pm/parsing/PackageInfoUtils.java +++ b/core/java/android/content/pm/parsing/PackageInfoUtils.java @@ -16,8 +16,6 @@ package android.content.pm.parsing; -import static android.content.pm.ApplicationInfo.FLAG_SUSPENDED; - import android.annotation.Nullable; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; @@ -43,8 +41,6 @@ import android.content.pm.parsing.ComponentParseUtils.ParsedActivity; import android.content.pm.parsing.ComponentParseUtils.ParsedInstrumentation; import android.content.pm.parsing.ComponentParseUtils.ParsedPermission; import android.content.pm.parsing.ComponentParseUtils.ParsedPermissionGroup; -import android.os.Bundle; -import android.os.UserHandle; import com.android.internal.util.ArrayUtils; @@ -213,7 +209,7 @@ public class PackageInfoUtils { pi.instrumentation = new InstrumentationInfo[N]; for (int i = 0; i < N; i++) { pi.instrumentation[i] = generateInstrumentationInfo( - pkg.getInstrumentations().get(i), flags); + pkg.getInstrumentations().get(i), pkg, flags); } } } @@ -281,93 +277,7 @@ public class PackageInfoUtils { return pi; } - // TODO(b/135203078): Remove this in favor of AndroidPackage.toAppInfo() - private static ApplicationInfo appInfoFromFinalPackage(AndroidPackage pkg) { - ApplicationInfo appInfo = new ApplicationInfo(); - appInfo.name = pkg.getName(); - if (appInfo.name != null) appInfo.name = appInfo.name.trim(); - appInfo.packageName = pkg.getPackageName(); - appInfo.labelRes = pkg.getLabelRes(); - appInfo.nonLocalizedLabel = pkg.getNonLocalizedLabel(); - if (appInfo.nonLocalizedLabel != null) { - appInfo.nonLocalizedLabel = appInfo.nonLocalizedLabel.toString().trim(); - } - appInfo.icon = pkg.getIcon(); - appInfo.banner = pkg.getBanner(); - appInfo.logo = pkg.getLogo(); - appInfo.metaData = pkg.getMetaData(); - - // TODO(b/135203078): Can this be removed? Looks only used in ActivityInfo. -// appInfo.showUserIcon = pkg.getShowUserIcon(); - - appInfo.taskAffinity = pkg.getTaskAffinity(); - appInfo.permission = pkg.getPermission(); - appInfo.processName = pkg.getProcessName(); - appInfo.className = pkg.getClassName(); - appInfo.theme = pkg.getTheme(); - appInfo.flags = pkg.getFlags(); - appInfo.privateFlags = pkg.getPrivateFlags(); - appInfo.requiresSmallestWidthDp = pkg.getRequiresSmallestWidthDp(); - appInfo.compatibleWidthLimitDp = pkg.getCompatibleWidthLimitDp(); - appInfo.largestWidthLimitDp = pkg.getLargestWidthLimitDp(); - appInfo.volumeUuid = pkg.getVolumeUuid(); - appInfo.storageUuid = pkg.getStorageUuid(); - appInfo.scanSourceDir = pkg.getScanSourceDir(); - appInfo.scanPublicSourceDir = pkg.getScanPublicSourceDir(); - appInfo.sourceDir = pkg.getBaseCodePath(); - appInfo.publicSourceDir = pkg.getPublicSourceDir(); - appInfo.splitNames = pkg.getSplitNames(); - appInfo.splitSourceDirs = pkg.getSplitCodePaths(); - appInfo.splitPublicSourceDirs = pkg.getSplitPublicSourceDirs(); - appInfo.splitDependencies = pkg.getSplitDependencies(); - appInfo.nativeLibraryDir = pkg.getNativeLibraryDir(); - appInfo.secondaryNativeLibraryDir = pkg.getSecondaryNativeLibraryDir(); - appInfo.nativeLibraryRootDir = pkg.getNativeLibraryRootDir(); - appInfo.nativeLibraryRootRequiresIsa = pkg.isNativeLibraryRootRequiresIsa(); - appInfo.primaryCpuAbi = pkg.getPrimaryCpuAbi(); - appInfo.secondaryCpuAbi = pkg.getSecondaryCpuAbi(); - - // TODO(b/135203078): Unused? -// appInfo.resourceDirs = pkg.getResourceDirs(); - appInfo.seInfo = pkg.getSeInfo(); - appInfo.seInfoUser = pkg.getSeInfoUser(); - appInfo.sharedLibraryFiles = pkg.getUsesLibraryFiles(); - appInfo.sharedLibraryInfos = pkg.getUsesLibraryInfos(); - appInfo.dataDir = pkg.getDataDir(); - appInfo.deviceProtectedDataDir = pkg.getDeviceProtectedDataDir(); - appInfo.credentialProtectedDataDir = pkg.getCredentialProtectedDataDir(); - appInfo.uid = pkg.getUid(); - appInfo.minSdkVersion = pkg.getMinSdkVersion(); - appInfo.targetSdkVersion = pkg.getTargetSdkVersion(); - appInfo.setVersionCode(pkg.getLongVersionCode()); - appInfo.enabled = pkg.isEnabled(); - - // TODO(b/135203078): Unused? -// appInfo.enabledSetting = pkg.getEnabledSetting(); - appInfo.installLocation = pkg.getInstallLocation(); - appInfo.manageSpaceActivityName = pkg.getManageSpaceActivityName(); - appInfo.descriptionRes = pkg.getDescriptionRes(); - appInfo.uiOptions = pkg.getUiOptions(); - appInfo.backupAgentName = pkg.getBackupAgentName(); - appInfo.fullBackupContent = pkg.getFullBackupContent(); - appInfo.networkSecurityConfigRes = pkg.getNetworkSecurityConfigRes(); - appInfo.category = pkg.getCategory(); - appInfo.targetSandboxVersion = pkg.getTargetSandboxVersion(); - appInfo.classLoaderName = pkg.getClassLoaderName(); - appInfo.splitClassLoaderNames = pkg.getSplitClassLoaderNames(); - appInfo.appComponentFactory = pkg.getAppComponentFactory(); - appInfo.iconRes = pkg.getIconRes(); - appInfo.roundIconRes = pkg.getRoundIconRes(); - appInfo.compileSdkVersion = pkg.getCompileSdkVersion(); - appInfo.compileSdkVersionCodename = pkg.getCompileSdkVersionCodeName(); - - // TODO(b/135203078): See PackageImpl#getHiddenApiEnforcementPolicy -// appInfo.mHiddenApiPolicy = pkg.getHiddenApiPolicy(); - appInfo.hiddenUntilInstalled = pkg.isHiddenUntilInstalled(); - appInfo.zygotePreloadName = pkg.getZygotePreloadName(); - return appInfo; - } - + @Nullable public static ApplicationInfo generateApplicationInfo(AndroidPackage pkg, @PackageManager.ApplicationInfoFlags int flags, PackageUserState state, int userId) { @@ -375,34 +285,16 @@ public class PackageInfoUtils { if (!checkUseInstalledOrHidden(pkg, state, flags) || !pkg.isMatch(flags)) { return null; } - if (!copyNeeded(flags, pkg, state, null, userId) - && ((flags & PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS) == 0 - || state.enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED)) { - // TODO(b/135203078): This isn't applicable anymore, as AppInfo isn't cached and - // always built new in toAppInfo(). Remove entire copyNeeded flow? Or find a way to - // transiently cache AppInfo, since multiple calls in quick secession probably need - // the same AppInfo. - // In this case it is safe to directly modify the internal ApplicationInfo state: - // - CompatibilityMode is global state, so will be the same for every call. - // - We only come in to here if the app should reported as installed; this is the - // default state, and we will do a copy otherwise. - // - The enable state will always be reported the same for the application across - // calls; the only exception is for the UNTIL_USED mode, and in that case we will - // be doing a copy. - ApplicationInfo applicationInfo = pkg.toAppInfo(); - updateApplicationInfo(applicationInfo, flags, state); - return applicationInfo; - } // Make shallow copy so we can store the metadata/libraries safely - ApplicationInfo ai = appInfoFromFinalPackage(pkg); + ApplicationInfo ai = pkg.toAppInfoWithoutState(); ai.initForUser(userId); - if ((flags & PackageManager.GET_META_DATA) != 0) { - ai.metaData = pkg.getAppMetaData(); + if ((flags & PackageManager.GET_META_DATA) == 0) { + ai.metaData = null; } - if ((flags & PackageManager.GET_SHARED_LIBRARY_FILES) != 0) { - ai.sharedLibraryFiles = pkg.getUsesLibraryFiles(); - ai.sharedLibraryInfos = pkg.getUsesLibraryInfos(); + if ((flags & PackageManager.GET_SHARED_LIBRARY_FILES) == 0) { + ai.sharedLibraryFiles = null; + ai.sharedLibraryInfos = null; } if (state.stopped) { ai.flags |= ApplicationInfo.FLAG_STOPPED; @@ -424,9 +316,6 @@ public class PackageInfoUtils { if (applicationInfo == null) { applicationInfo = generateApplicationInfo(pkg, flags, state, userId); } - if (!copyNeeded(flags, pkg, state, a.metaData, userId)) { - updateApplicationInfo(applicationInfo, flags, state); - } // Make shallow copies so we can store the metadata safely ActivityInfo ai = new ActivityInfo(); assignSharedFieldsForComponentInfo(ai, a); @@ -475,9 +364,6 @@ public class PackageInfoUtils { if (applicationInfo == null) { applicationInfo = generateApplicationInfo(pkg, flags, state, userId); } - if (!copyNeeded(flags, pkg, state, s.metaData, userId)) { - updateApplicationInfo(applicationInfo, flags, state); - } // Make shallow copies so we can store the metadata safely ServiceInfo si = new ServiceInfo(); assignSharedFieldsForComponentInfo(si, s); @@ -508,11 +394,6 @@ public class PackageInfoUtils { if (applicationInfo == null) { applicationInfo = generateApplicationInfo(pkg, flags, state, userId); } - if (!copyNeeded(flags, pkg, state, p.metaData, userId) - && ((flags & PackageManager.GET_URI_PERMISSION_PATTERNS) != 0 - || p.uriPermissionPatterns == null)) { - updateApplicationInfo(applicationInfo, flags, state); - } // Make shallow copies so we can store the metadata safely ProviderInfo pi = new ProviderInfo(); assignSharedFieldsForComponentInfo(pi, p); @@ -544,7 +425,7 @@ public class PackageInfoUtils { } public static InstrumentationInfo generateInstrumentationInfo(ParsedInstrumentation i, - @PackageManager.ComponentInfoFlags int flags) { + AndroidPackage pkg, @PackageManager.ComponentInfoFlags int flags) { if (i == null) return null; InstrumentationInfo ii = new InstrumentationInfo(); @@ -554,19 +435,19 @@ public class PackageInfoUtils { ii.handleProfiling = i.handleProfiling; ii.functionalTest = i.functionalTest; - ii.sourceDir = i.sourceDir; - ii.publicSourceDir = i.publicSourceDir; - ii.splitNames = i.splitNames; - ii.splitSourceDirs = i.splitSourceDirs; - ii.splitPublicSourceDirs = i.splitPublicSourceDirs; - ii.splitDependencies = i.splitDependencies; - ii.dataDir = i.dataDir; - ii.deviceProtectedDataDir = i.deviceProtectedDataDir; - ii.credentialProtectedDataDir = i.credentialProtectedDataDir; - ii.primaryCpuAbi = i.primaryCpuAbi; - ii.secondaryCpuAbi = i.secondaryCpuAbi; - ii.nativeLibraryDir = i.nativeLibraryDir; - ii.secondaryNativeLibraryDir = i.secondaryNativeLibraryDir; + ii.sourceDir = pkg.getBaseCodePath(); + ii.publicSourceDir = pkg.getCodePath(); + ii.splitNames = pkg.getSplitNames(); + ii.splitSourceDirs = pkg.getSplitCodePaths(); + ii.splitPublicSourceDirs = pkg.getSplitCodePaths(); + ii.splitDependencies = pkg.getSplitDependencies(); + ii.dataDir = pkg.getDataDir(); + ii.deviceProtectedDataDir = pkg.getDeviceProtectedDataDir(); + ii.credentialProtectedDataDir = pkg.getCredentialProtectedDataDir(); + ii.primaryCpuAbi = pkg.getPrimaryCpuAbi(); + ii.secondaryCpuAbi = pkg.getSecondaryCpuAbi(); + ii.nativeLibraryDir = pkg.getNativeLibraryDir(); + ii.secondaryNativeLibraryDir = pkg.getSecondaryNativeLibraryDir(); if ((flags & PackageManager.GET_META_DATA) == 0) { return ii; @@ -615,47 +496,6 @@ public class PackageInfoUtils { return pgi; } - private static boolean copyNeeded(@PackageManager.ComponentInfoFlags int flags, - AndroidPackage pkg, PackageUserState state, Bundle metaData, int userId) { - if (userId != UserHandle.USER_SYSTEM) { - // We always need to copy for other users, since we need - // to fix up the uid. - return true; - } - if (state.enabled != PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) { - boolean enabled = state.enabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED; - if (pkg.isEnabled() != enabled) { - return true; - } - } - boolean suspended = (pkg.getFlags() & FLAG_SUSPENDED) != 0; - if (state.suspended != suspended) { - return true; - } - if (!state.installed || state.hidden) { - return true; - } - if (state.stopped) { - return true; - } - if (state.instantApp != pkg.isInstantApp()) { - return true; - } - if ((flags & PackageManager.GET_META_DATA) != 0 - && (metaData != null || pkg.getAppMetaData() != null)) { - return true; - } - if ((flags & PackageManager.GET_SHARED_LIBRARY_FILES) != 0 - && pkg.getUsesLibraryFiles() != null) { - return true; - } - if ((flags & PackageManager.GET_SHARED_LIBRARY_FILES) != 0 - && pkg.getUsesLibraryInfos() != null) { - return true; - } - return pkg.getStaticSharedLibName() != null; - } - private static void updateApplicationInfo(ApplicationInfo ai, @PackageManager.ApplicationInfoFlags int flags, PackageUserState state) { diff --git a/core/java/android/content/pm/parsing/library/AndroidTestBaseUpdater.java b/core/java/android/content/pm/parsing/library/AndroidTestBaseUpdater.java index 034c6de1e597..5fbe5b9c7250 100644 --- a/core/java/android/content/pm/parsing/library/AndroidTestBaseUpdater.java +++ b/core/java/android/content/pm/parsing/library/AndroidTestBaseUpdater.java @@ -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); } |
