diff options
| author | Winson <chiuwinson@google.com> | 2019-10-23 17:00:42 -0700 |
|---|---|---|
| committer | Winson <chiuwinson@google.com> | 2019-12-09 10:45:02 -0800 |
| commit | 6571c8a46154b800d16a2fe850c4b2129b209a2a (patch) | |
| tree | 9e5fb28b92fbb381350308f44b2a8996aec5fa3c /core/java | |
| parent | 655a5b9ca397b22242d7346cad4efbb552b68614 (diff) | |
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
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); } |
