Loading services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java +34 −74 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import android.annotation.CheckResult; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.apex.ApexInfo; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.Attribution; Loading Loading @@ -79,11 +78,8 @@ import com.android.server.pm.pkg.component.ParsedUsesPermission; import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import com.android.server.pm.pkg.parsing.ParsingUtils; import libcore.util.EmptyArray; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; Loading @@ -109,21 +105,9 @@ public class PackageInfoUtils { public static PackageInfo generate(AndroidPackage pkg, int[] gids, @PackageManager.PackageInfoFlagsBits long flags, long firstInstallTime, long lastUpdateTime, Set<String> grantedPermissions, PackageUserStateInternal state, @UserIdInt int userId, @Nullable PackageStateInternal pkgSetting) { @UserIdInt int userId, @NonNull PackageStateInternal pkgSetting) { return generateWithComponents(pkg, gids, flags, firstInstallTime, lastUpdateTime, grantedPermissions, state, userId, null, pkgSetting); } /** * @param pkgSetting See {@link PackageInfoUtils} for description of pkgSetting usage. * @deprecated Once ENABLE_FEATURE_SCAN_APEX is removed, this should also be removed. */ @Deprecated @Nullable public static PackageInfo generate(AndroidPackage pkg, ApexInfo apexInfo, long flags, @Nullable PackageStateInternal pkgSetting, @UserIdInt int userId) { return generateWithComponents(pkg, EmptyArray.INT, flags, 0, 0, Collections.emptySet(), PackageUserStateInternal.DEFAULT, userId, apexInfo, pkgSetting); grantedPermissions, state, userId, pkgSetting); } /** Loading @@ -132,8 +116,7 @@ public class PackageInfoUtils { private static PackageInfo generateWithComponents(AndroidPackage pkg, int[] gids, @PackageManager.PackageInfoFlagsBits long flags, long firstInstallTime, long lastUpdateTime, Set<String> grantedPermissions, PackageUserStateInternal state, @UserIdInt int userId, @Nullable ApexInfo apexInfo, @Nullable PackageStateInternal pkgSetting) { @UserIdInt int userId, @NonNull PackageStateInternal pkgSetting) { ApplicationInfo applicationInfo = generateApplicationInfo(pkg, flags, state, userId, pkgSetting); if (applicationInfo == null) { Loading Loading @@ -247,22 +230,6 @@ public class PackageInfoUtils { &= ~ApplicationInfo.PRIVATE_FLAG_EXT_ATTRIBUTIONS_ARE_USER_VISIBLE; } if (apexInfo != null) { File apexFile = new File(apexInfo.modulePath); info.applicationInfo.sourceDir = apexFile.getPath(); info.applicationInfo.publicSourceDir = apexFile.getPath(); info.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM; info.applicationInfo.flags |= ApplicationInfo.FLAG_INSTALLED; if (apexInfo.isFactory) { info.applicationInfo.flags &= ~ApplicationInfo.FLAG_UPDATED_SYSTEM_APP; } else { info.applicationInfo.flags |= ApplicationInfo.FLAG_UPDATED_SYSTEM_APP; } info.isApex = true; info.isActiveApex = apexInfo.isActive; } final SigningDetails signingDetails = pkg.getSigningDetails(); // deprecated method of getting signing certificates if ((flags & PackageManager.GET_SIGNATURES) != 0) { Loading Loading @@ -294,7 +261,7 @@ public class PackageInfoUtils { info.coreApp = pkg.isCoreApp(); info.isApex = pkg.isApex(); if (pkgSetting != null && !pkgSetting.hasSharedUser()) { if (!pkgSetting.hasSharedUser()) { // It is possible that this shared UID app has left info.sharedUserId = null; info.sharedUserLabel = 0; Loading Loading @@ -452,7 +419,7 @@ public class PackageInfoUtils { public static ApplicationInfo generateApplicationInfo(AndroidPackage pkg, @PackageManager.ApplicationInfoFlagsBits long flags, @NonNull PackageUserStateInternal state, @UserIdInt int userId, @Nullable PackageStateInternal pkgSetting) { @NonNull PackageStateInternal pkgSetting) { if (pkg == null) { return null; } Loading @@ -463,13 +430,12 @@ public class PackageInfoUtils { } // Make shallow copy so we can store the metadata/libraries safely ApplicationInfo info = AndroidPackageUtils.toAppInfoWithoutState(pkg); ApplicationInfo info = AndroidPackageUtils.generateAppInfoWithoutState(pkg); updateApplicationInfo(info, flags, state); initForUser(info, pkg, userId); if (pkgSetting != null) { // TODO(b/135203078): Remove PackageParser1/toAppInfoWithoutState and clean all this up PackageStateUnserialized pkgState = pkgSetting.getTransientState(); info.hiddenUntilInstalled = pkgState.isHiddenUntilInstalled(); Loading @@ -485,13 +451,10 @@ public class PackageInfoUtils { if (info.category == ApplicationInfo.CATEGORY_UNDEFINED) { info.category = pkgSetting.getCategoryOverride(); } } info.seInfo = AndroidPackageUtils.getSeInfo(pkg, pkgSetting); info.primaryCpuAbi = pkgSetting == null ? AndroidPackageUtils.getRawPrimaryCpuAbi(pkg) : pkgSetting.getPrimaryCpuAbi(); info.secondaryCpuAbi = pkgSetting == null ? AndroidPackageUtils.getRawSecondaryCpuAbi(pkg) : pkgSetting.getSecondaryCpuAbi(); info.primaryCpuAbi = pkgSetting.getPrimaryCpuAbi(); info.secondaryCpuAbi = pkgSetting.getSecondaryCpuAbi(); info.flags |= appInfoFlags(info.flags, pkgSetting); info.privateFlags |= appInfoPrivateFlags(info.privateFlags, pkgSetting); Loading @@ -508,7 +471,7 @@ public class PackageInfoUtils { public static ActivityInfo generateActivityInfo(AndroidPackage pkg, ParsedActivity a, @PackageManager.ComponentInfoFlagsBits long flags, @NonNull PackageUserStateInternal state, @UserIdInt int userId, @Nullable PackageStateInternal pkgSetting) { @NonNull PackageStateInternal pkgSetting) { return generateActivityInfo(pkg, a, flags, state, null, userId, pkgSetting); } Loading @@ -520,7 +483,7 @@ public class PackageInfoUtils { public static ActivityInfo generateActivityInfo(AndroidPackage pkg, ParsedActivity a, @PackageManager.ComponentInfoFlagsBits long flags, @NonNull PackageUserStateInternal state, @Nullable ApplicationInfo applicationInfo, @UserIdInt int userId, @Nullable PackageStateInternal pkgSetting) { @UserIdInt int userId, @NonNull PackageStateInternal pkgSetting) { if (a == null) return null; if (!checkUseInstalledOrHidden(pkg, pkgSetting, state, flags)) { return null; Loading Loading @@ -597,7 +560,7 @@ public class PackageInfoUtils { @Nullable public static ServiceInfo generateServiceInfo(AndroidPackage pkg, ParsedService s, @PackageManager.ComponentInfoFlagsBits long flags, PackageUserStateInternal state, @UserIdInt int userId, @Nullable PackageStateInternal pkgSetting) { @UserIdInt int userId, @NonNull PackageStateInternal pkgSetting) { return generateServiceInfo(pkg, s, flags, state, null, userId, pkgSetting); } Loading @@ -609,7 +572,7 @@ public class PackageInfoUtils { public static ServiceInfo generateServiceInfo(AndroidPackage pkg, ParsedService s, @PackageManager.ComponentInfoFlagsBits long flags, PackageUserStateInternal state, @Nullable ApplicationInfo applicationInfo, int userId, @Nullable PackageStateInternal pkgSetting) { @NonNull PackageStateInternal pkgSetting) { if (s == null) return null; if (!checkUseInstalledOrHidden(pkg, pkgSetting, state, flags)) { return null; Loading Loading @@ -647,7 +610,7 @@ public class PackageInfoUtils { public static ProviderInfo generateProviderInfo(AndroidPackage pkg, ParsedProvider p, @PackageManager.ComponentInfoFlagsBits long flags, PackageUserStateInternal state, @NonNull ApplicationInfo applicationInfo, int userId, @Nullable PackageStateInternal pkgSetting) { @NonNull PackageStateInternal pkgSetting) { if (p == null) return null; if (!checkUseInstalledOrHidden(pkg, pkgSetting, state, flags)) { return null; Loading Loading @@ -696,7 +659,7 @@ public class PackageInfoUtils { @Nullable public static InstrumentationInfo generateInstrumentationInfo(ParsedInstrumentation i, AndroidPackage pkg, @PackageManager.ComponentInfoFlagsBits long flags, PackageUserStateInternal state, int userId, @Nullable PackageStateInternal pkgSetting) { PackageUserStateInternal state, int userId, @NonNull PackageStateInternal pkgSetting) { if (i == null) return null; if (!checkUseInstalledOrHidden(pkg, pkgSetting, state, flags)) { return null; Loading @@ -719,10 +682,8 @@ public class PackageInfoUtils { initForUser(info, pkg, userId); info.primaryCpuAbi = pkgSetting == null ? AndroidPackageUtils.getRawPrimaryCpuAbi(pkg) : pkgSetting.getPrimaryCpuAbi(); info.secondaryCpuAbi = pkgSetting == null ? AndroidPackageUtils.getRawSecondaryCpuAbi(pkg) : pkgSetting.getSecondaryCpuAbi(); info.primaryCpuAbi = pkgSetting.getPrimaryCpuAbi(); info.secondaryCpuAbi = pkgSetting.getSecondaryCpuAbi(); info.nativeLibraryDir = pkg.getNativeLibraryDir(); info.secondaryNativeLibraryDir = pkg.getSecondaryNativeLibraryDir(); Loading Loading @@ -820,12 +781,11 @@ public class PackageInfoUtils { * all uninstalled and hidden packages as well. */ public static boolean checkUseInstalledOrHidden(AndroidPackage pkg, PackageStateInternal pkgSetting, PackageUserStateInternal state, @NonNull PackageStateInternal pkgSetting, PackageUserStateInternal state, @PackageManager.PackageInfoFlagsBits long flags) { // Returns false if the package is hidden system app until installed. if ((flags & PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS) == 0 && !state.isInstalled() && pkgSetting != null && pkgSetting.getTransientState().isHiddenUntilInstalled()) { return false; } Loading Loading @@ -878,7 +838,7 @@ public class PackageInfoUtils { private static void assignFieldsComponentInfoParsedMainComponent( @NonNull ComponentInfo info, @NonNull ParsedMainComponent component, @Nullable PackageStateInternal pkgSetting, int userId) { @NonNull PackageStateInternal pkgSetting, @UserIdInt int userId) { assignFieldsComponentInfoParsedMainComponent(info, component); Pair<CharSequence, Integer> labelAndIcon = ParsedComponentStateUtils.getNonLocalizedLabelAndIcon(component, pkgSetting, Loading @@ -889,7 +849,7 @@ public class PackageInfoUtils { private static void assignFieldsPackageItemInfoParsedComponent( @NonNull PackageItemInfo info, @NonNull ParsedComponent component, @Nullable PackageStateInternal pkgSetting, int userId) { @NonNull PackageStateInternal pkgSetting, @UserIdInt int userId) { assignFieldsPackageItemInfoParsedComponent(info, component); Pair<CharSequence, Integer> labelAndIcon = ParsedComponentStateUtils.getNonLocalizedLabelAndIcon(component, pkgSetting, Loading Loading @@ -1141,7 +1101,7 @@ public class PackageInfoUtils { @Nullable public ApplicationInfo generate(AndroidPackage pkg, @PackageManager.ApplicationInfoFlagsBits long flags, PackageUserStateInternal state, int userId, @Nullable PackageStateInternal pkgSetting) { int userId, @NonNull PackageStateInternal pkgSetting) { ApplicationInfo appInfo = mCache.get(pkg.getPackageName()); if (appInfo != null) { return appInfo; Loading services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java +0 −4 Original line number Diff line number Diff line Loading @@ -321,8 +321,4 @@ public class AndroidPackageUtils { info.versionCode = ((ParsingPackageHidden) pkg).getVersionCode(); info.versionCodeMajor = ((ParsingPackageHidden) pkg).getVersionCodeMajor(); } public static ApplicationInfo toAppInfoWithoutState(AndroidPackage pkg) { return ((ParsingPackageHidden) pkg).toAppInfoWithoutState(); } } services/tests/servicestests/src/com/android/server/pm/CompatibilityModeTest.java +6 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.platform.test.annotations.Presubmit; import com.android.server.pm.parsing.PackageInfoUtils; import com.android.server.pm.parsing.pkg.PackageImpl; import com.android.server.pm.pkg.PackageStateUnserialized; import com.android.server.pm.pkg.PackageUserStateImpl; import com.android.server.pm.pkg.parsing.ParsingPackageUtils; Loading @@ -46,12 +47,16 @@ public class CompatibilityModeTest { private boolean mCompatibilityModeEnabled;; private PackageImpl mMockAndroidPackage; private PackageSetting mMockPackageState; private PackageUserStateImpl mMockUserState; @Before public void setUp() { mCompatibilityModeEnabled = ParsingPackageUtils.sCompatibilityModeEnabled; mMockAndroidPackage = mock(PackageImpl.class); mMockPackageState = mock(PackageSetting.class); when(mMockPackageState.getTransientState()) .thenReturn(new PackageStateUnserialized(mMockPackageState)); mMockUserState = new PackageUserStateImpl(); mMockUserState.setInstalled(true); } Loading Loading @@ -221,7 +226,7 @@ public class CompatibilityModeTest { info.flags |= flags; when(mMockAndroidPackage.toAppInfoWithoutState()).thenReturn(info); return PackageInfoUtils.generateApplicationInfo(mMockAndroidPackage, 0 /*flags*/, mMockUserState, 0 /*userId*/, null); 0 /*flags*/, mMockUserState, 0 /*userId*/, mMockPackageState); } private void setGlobalCompatibilityMode(boolean enabled) { Loading services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java +10 −5 Original line number Diff line number Diff line Loading @@ -676,27 +676,32 @@ public class PackageParserTest { final File testFile = extractFile(TEST_APP4_APK); try { final ParsedPackage pkg = new TestPackageParser2().parsePackage(testFile, 0, false); var pkgSetting = mockPkgSetting(pkg); ApplicationInfo appInfo = PackageInfoUtils.generateApplicationInfo(pkg, 0, PackageUserStateInternal.DEFAULT, 0, null); PackageUserStateInternal.DEFAULT, 0, pkgSetting); for (ParsedActivity activity : pkg.getActivities()) { assertNotNull(activity.getMetaData()); assertNull(PackageInfoUtils.generateActivityInfo(pkg, activity, 0, PackageUserStateInternal.DEFAULT, appInfo, 0, null).metaData); PackageUserStateInternal.DEFAULT, appInfo, 0, pkgSetting) .metaData); } for (ParsedProvider provider : pkg.getProviders()) { assertNotNull(provider.getMetaData()); assertNull(PackageInfoUtils.generateProviderInfo(pkg, provider, 0, PackageUserStateInternal.DEFAULT, appInfo, 0, null).metaData); PackageUserStateInternal.DEFAULT, appInfo, 0, pkgSetting) .metaData); } for (ParsedActivity receiver : pkg.getReceivers()) { assertNotNull(receiver.getMetaData()); assertNull(PackageInfoUtils.generateActivityInfo(pkg, receiver, 0, PackageUserStateInternal.DEFAULT, appInfo, 0, null).metaData); PackageUserStateInternal.DEFAULT, appInfo, 0, pkgSetting) .metaData); } for (ParsedService service : pkg.getServices()) { assertNotNull(service.getMetaData()); assertNull(PackageInfoUtils.generateServiceInfo(pkg, service, 0, PackageUserStateInternal.DEFAULT, appInfo, 0, null).metaData); PackageUserStateInternal.DEFAULT, appInfo, 0, pkgSetting) .metaData); } } finally { testFile.delete(); Loading services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java +0 −55 Original line number Diff line number Diff line Loading @@ -20,21 +20,16 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import android.apex.ApexInfo; import android.content.Context; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PermissionInfo; import android.content.pm.SigningDetails; import android.content.pm.parsing.FrameworkParsingPackageUtils; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; import android.os.Build; import android.os.Bundle; import android.os.FileUtils; import android.os.UserHandle; import android.platform.test.annotations.Presubmit; import android.util.Pair; import android.util.SparseIntArray; Loading @@ -53,7 +48,6 @@ import com.android.server.pm.pkg.component.ParsedComponent; import com.android.server.pm.pkg.component.ParsedIntentInfo; import com.android.server.pm.pkg.component.ParsedPermission; import com.android.server.pm.pkg.component.ParsedPermissionUtils; import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import com.google.common.truth.Expect; Loading @@ -63,7 +57,6 @@ import org.junit.runner.RunWith; import java.io.File; import java.io.InputStream; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; Loading Loading @@ -566,54 +559,6 @@ public class PackageParserLegacyCoreTest { intentFilter.hasMimeGroup("mime_group_1")); } @Test public void testApexPackageInfoGeneration() throws Exception { String apexModuleName = "com.android.tzdata.apex"; File apexFile = copyRawResourceToFile(apexModuleName, R.raw.com_android_tzdata); ApexInfo apexInfo = new ApexInfo(); apexInfo.isActive = true; apexInfo.isFactory = false; apexInfo.moduleName = apexModuleName; apexInfo.modulePath = apexFile.getPath(); apexInfo.versionCode = 191000070; int flags = PackageManager.GET_META_DATA | PackageManager.GET_SIGNING_CERTIFICATES; ParseResult<ParsedPackage> result = ParsingPackageUtils.parseDefaultOneTime(apexFile, flags, Collections.emptyList(), false /*collectCertificates*/); if (result.isError()) { throw new IllegalStateException(result.getErrorMessage(), result.getException()); } ParseTypeImpl input = ParseTypeImpl.forDefaultParsing(); ParsedPackage pkg = result.getResult(); ParseResult<SigningDetails> ret = ParsingPackageUtils.getSigningDetails( input, pkg, false /*skipVerify*/); if (ret.isError()) { throw new IllegalStateException(ret.getErrorMessage(), ret.getException()); } pkg.setSigningDetails(ret.getResult()); PackageInfo pi = PackageInfoUtils.generate(pkg.setApex(true).hideAsFinal(), apexInfo, flags, null, UserHandle.USER_SYSTEM); assertEquals("com.google.android.tzdata", pi.applicationInfo.packageName); assertTrue(pi.applicationInfo.enabled); assertEquals(28, pi.applicationInfo.targetSdkVersion); assertEquals(191000070, pi.applicationInfo.longVersionCode); assertNotNull(pi.applicationInfo.metaData); assertEquals(apexFile.getPath(), pi.applicationInfo.sourceDir); assertEquals("Bundle[{com.android.vending.derived.apk.id=1}]", pi.applicationInfo.metaData.toString()); assertEquals("com.google.android.tzdata", pi.packageName); assertEquals(191000070, pi.getLongVersionCode()); assertNotNull(pi.signingInfo); assertTrue(pi.signingInfo.getApkContentsSigners().length > 0); assertTrue(pi.isApex); assertTrue((pi.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0); assertTrue((pi.applicationInfo.flags & ApplicationInfo.FLAG_INSTALLED) != 0); } @Test public void testUsesSdk() throws Exception { ParsedPackage pkg; Loading Loading
services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java +34 −74 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import android.annotation.CheckResult; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.apex.ApexInfo; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.Attribution; Loading Loading @@ -79,11 +78,8 @@ import com.android.server.pm.pkg.component.ParsedUsesPermission; import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import com.android.server.pm.pkg.parsing.ParsingUtils; import libcore.util.EmptyArray; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; Loading @@ -109,21 +105,9 @@ public class PackageInfoUtils { public static PackageInfo generate(AndroidPackage pkg, int[] gids, @PackageManager.PackageInfoFlagsBits long flags, long firstInstallTime, long lastUpdateTime, Set<String> grantedPermissions, PackageUserStateInternal state, @UserIdInt int userId, @Nullable PackageStateInternal pkgSetting) { @UserIdInt int userId, @NonNull PackageStateInternal pkgSetting) { return generateWithComponents(pkg, gids, flags, firstInstallTime, lastUpdateTime, grantedPermissions, state, userId, null, pkgSetting); } /** * @param pkgSetting See {@link PackageInfoUtils} for description of pkgSetting usage. * @deprecated Once ENABLE_FEATURE_SCAN_APEX is removed, this should also be removed. */ @Deprecated @Nullable public static PackageInfo generate(AndroidPackage pkg, ApexInfo apexInfo, long flags, @Nullable PackageStateInternal pkgSetting, @UserIdInt int userId) { return generateWithComponents(pkg, EmptyArray.INT, flags, 0, 0, Collections.emptySet(), PackageUserStateInternal.DEFAULT, userId, apexInfo, pkgSetting); grantedPermissions, state, userId, pkgSetting); } /** Loading @@ -132,8 +116,7 @@ public class PackageInfoUtils { private static PackageInfo generateWithComponents(AndroidPackage pkg, int[] gids, @PackageManager.PackageInfoFlagsBits long flags, long firstInstallTime, long lastUpdateTime, Set<String> grantedPermissions, PackageUserStateInternal state, @UserIdInt int userId, @Nullable ApexInfo apexInfo, @Nullable PackageStateInternal pkgSetting) { @UserIdInt int userId, @NonNull PackageStateInternal pkgSetting) { ApplicationInfo applicationInfo = generateApplicationInfo(pkg, flags, state, userId, pkgSetting); if (applicationInfo == null) { Loading Loading @@ -247,22 +230,6 @@ public class PackageInfoUtils { &= ~ApplicationInfo.PRIVATE_FLAG_EXT_ATTRIBUTIONS_ARE_USER_VISIBLE; } if (apexInfo != null) { File apexFile = new File(apexInfo.modulePath); info.applicationInfo.sourceDir = apexFile.getPath(); info.applicationInfo.publicSourceDir = apexFile.getPath(); info.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM; info.applicationInfo.flags |= ApplicationInfo.FLAG_INSTALLED; if (apexInfo.isFactory) { info.applicationInfo.flags &= ~ApplicationInfo.FLAG_UPDATED_SYSTEM_APP; } else { info.applicationInfo.flags |= ApplicationInfo.FLAG_UPDATED_SYSTEM_APP; } info.isApex = true; info.isActiveApex = apexInfo.isActive; } final SigningDetails signingDetails = pkg.getSigningDetails(); // deprecated method of getting signing certificates if ((flags & PackageManager.GET_SIGNATURES) != 0) { Loading Loading @@ -294,7 +261,7 @@ public class PackageInfoUtils { info.coreApp = pkg.isCoreApp(); info.isApex = pkg.isApex(); if (pkgSetting != null && !pkgSetting.hasSharedUser()) { if (!pkgSetting.hasSharedUser()) { // It is possible that this shared UID app has left info.sharedUserId = null; info.sharedUserLabel = 0; Loading Loading @@ -452,7 +419,7 @@ public class PackageInfoUtils { public static ApplicationInfo generateApplicationInfo(AndroidPackage pkg, @PackageManager.ApplicationInfoFlagsBits long flags, @NonNull PackageUserStateInternal state, @UserIdInt int userId, @Nullable PackageStateInternal pkgSetting) { @NonNull PackageStateInternal pkgSetting) { if (pkg == null) { return null; } Loading @@ -463,13 +430,12 @@ public class PackageInfoUtils { } // Make shallow copy so we can store the metadata/libraries safely ApplicationInfo info = AndroidPackageUtils.toAppInfoWithoutState(pkg); ApplicationInfo info = AndroidPackageUtils.generateAppInfoWithoutState(pkg); updateApplicationInfo(info, flags, state); initForUser(info, pkg, userId); if (pkgSetting != null) { // TODO(b/135203078): Remove PackageParser1/toAppInfoWithoutState and clean all this up PackageStateUnserialized pkgState = pkgSetting.getTransientState(); info.hiddenUntilInstalled = pkgState.isHiddenUntilInstalled(); Loading @@ -485,13 +451,10 @@ public class PackageInfoUtils { if (info.category == ApplicationInfo.CATEGORY_UNDEFINED) { info.category = pkgSetting.getCategoryOverride(); } } info.seInfo = AndroidPackageUtils.getSeInfo(pkg, pkgSetting); info.primaryCpuAbi = pkgSetting == null ? AndroidPackageUtils.getRawPrimaryCpuAbi(pkg) : pkgSetting.getPrimaryCpuAbi(); info.secondaryCpuAbi = pkgSetting == null ? AndroidPackageUtils.getRawSecondaryCpuAbi(pkg) : pkgSetting.getSecondaryCpuAbi(); info.primaryCpuAbi = pkgSetting.getPrimaryCpuAbi(); info.secondaryCpuAbi = pkgSetting.getSecondaryCpuAbi(); info.flags |= appInfoFlags(info.flags, pkgSetting); info.privateFlags |= appInfoPrivateFlags(info.privateFlags, pkgSetting); Loading @@ -508,7 +471,7 @@ public class PackageInfoUtils { public static ActivityInfo generateActivityInfo(AndroidPackage pkg, ParsedActivity a, @PackageManager.ComponentInfoFlagsBits long flags, @NonNull PackageUserStateInternal state, @UserIdInt int userId, @Nullable PackageStateInternal pkgSetting) { @NonNull PackageStateInternal pkgSetting) { return generateActivityInfo(pkg, a, flags, state, null, userId, pkgSetting); } Loading @@ -520,7 +483,7 @@ public class PackageInfoUtils { public static ActivityInfo generateActivityInfo(AndroidPackage pkg, ParsedActivity a, @PackageManager.ComponentInfoFlagsBits long flags, @NonNull PackageUserStateInternal state, @Nullable ApplicationInfo applicationInfo, @UserIdInt int userId, @Nullable PackageStateInternal pkgSetting) { @UserIdInt int userId, @NonNull PackageStateInternal pkgSetting) { if (a == null) return null; if (!checkUseInstalledOrHidden(pkg, pkgSetting, state, flags)) { return null; Loading Loading @@ -597,7 +560,7 @@ public class PackageInfoUtils { @Nullable public static ServiceInfo generateServiceInfo(AndroidPackage pkg, ParsedService s, @PackageManager.ComponentInfoFlagsBits long flags, PackageUserStateInternal state, @UserIdInt int userId, @Nullable PackageStateInternal pkgSetting) { @UserIdInt int userId, @NonNull PackageStateInternal pkgSetting) { return generateServiceInfo(pkg, s, flags, state, null, userId, pkgSetting); } Loading @@ -609,7 +572,7 @@ public class PackageInfoUtils { public static ServiceInfo generateServiceInfo(AndroidPackage pkg, ParsedService s, @PackageManager.ComponentInfoFlagsBits long flags, PackageUserStateInternal state, @Nullable ApplicationInfo applicationInfo, int userId, @Nullable PackageStateInternal pkgSetting) { @NonNull PackageStateInternal pkgSetting) { if (s == null) return null; if (!checkUseInstalledOrHidden(pkg, pkgSetting, state, flags)) { return null; Loading Loading @@ -647,7 +610,7 @@ public class PackageInfoUtils { public static ProviderInfo generateProviderInfo(AndroidPackage pkg, ParsedProvider p, @PackageManager.ComponentInfoFlagsBits long flags, PackageUserStateInternal state, @NonNull ApplicationInfo applicationInfo, int userId, @Nullable PackageStateInternal pkgSetting) { @NonNull PackageStateInternal pkgSetting) { if (p == null) return null; if (!checkUseInstalledOrHidden(pkg, pkgSetting, state, flags)) { return null; Loading Loading @@ -696,7 +659,7 @@ public class PackageInfoUtils { @Nullable public static InstrumentationInfo generateInstrumentationInfo(ParsedInstrumentation i, AndroidPackage pkg, @PackageManager.ComponentInfoFlagsBits long flags, PackageUserStateInternal state, int userId, @Nullable PackageStateInternal pkgSetting) { PackageUserStateInternal state, int userId, @NonNull PackageStateInternal pkgSetting) { if (i == null) return null; if (!checkUseInstalledOrHidden(pkg, pkgSetting, state, flags)) { return null; Loading @@ -719,10 +682,8 @@ public class PackageInfoUtils { initForUser(info, pkg, userId); info.primaryCpuAbi = pkgSetting == null ? AndroidPackageUtils.getRawPrimaryCpuAbi(pkg) : pkgSetting.getPrimaryCpuAbi(); info.secondaryCpuAbi = pkgSetting == null ? AndroidPackageUtils.getRawSecondaryCpuAbi(pkg) : pkgSetting.getSecondaryCpuAbi(); info.primaryCpuAbi = pkgSetting.getPrimaryCpuAbi(); info.secondaryCpuAbi = pkgSetting.getSecondaryCpuAbi(); info.nativeLibraryDir = pkg.getNativeLibraryDir(); info.secondaryNativeLibraryDir = pkg.getSecondaryNativeLibraryDir(); Loading Loading @@ -820,12 +781,11 @@ public class PackageInfoUtils { * all uninstalled and hidden packages as well. */ public static boolean checkUseInstalledOrHidden(AndroidPackage pkg, PackageStateInternal pkgSetting, PackageUserStateInternal state, @NonNull PackageStateInternal pkgSetting, PackageUserStateInternal state, @PackageManager.PackageInfoFlagsBits long flags) { // Returns false if the package is hidden system app until installed. if ((flags & PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS) == 0 && !state.isInstalled() && pkgSetting != null && pkgSetting.getTransientState().isHiddenUntilInstalled()) { return false; } Loading Loading @@ -878,7 +838,7 @@ public class PackageInfoUtils { private static void assignFieldsComponentInfoParsedMainComponent( @NonNull ComponentInfo info, @NonNull ParsedMainComponent component, @Nullable PackageStateInternal pkgSetting, int userId) { @NonNull PackageStateInternal pkgSetting, @UserIdInt int userId) { assignFieldsComponentInfoParsedMainComponent(info, component); Pair<CharSequence, Integer> labelAndIcon = ParsedComponentStateUtils.getNonLocalizedLabelAndIcon(component, pkgSetting, Loading @@ -889,7 +849,7 @@ public class PackageInfoUtils { private static void assignFieldsPackageItemInfoParsedComponent( @NonNull PackageItemInfo info, @NonNull ParsedComponent component, @Nullable PackageStateInternal pkgSetting, int userId) { @NonNull PackageStateInternal pkgSetting, @UserIdInt int userId) { assignFieldsPackageItemInfoParsedComponent(info, component); Pair<CharSequence, Integer> labelAndIcon = ParsedComponentStateUtils.getNonLocalizedLabelAndIcon(component, pkgSetting, Loading Loading @@ -1141,7 +1101,7 @@ public class PackageInfoUtils { @Nullable public ApplicationInfo generate(AndroidPackage pkg, @PackageManager.ApplicationInfoFlagsBits long flags, PackageUserStateInternal state, int userId, @Nullable PackageStateInternal pkgSetting) { int userId, @NonNull PackageStateInternal pkgSetting) { ApplicationInfo appInfo = mCache.get(pkg.getPackageName()); if (appInfo != null) { return appInfo; Loading
services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java +0 −4 Original line number Diff line number Diff line Loading @@ -321,8 +321,4 @@ public class AndroidPackageUtils { info.versionCode = ((ParsingPackageHidden) pkg).getVersionCode(); info.versionCodeMajor = ((ParsingPackageHidden) pkg).getVersionCodeMajor(); } public static ApplicationInfo toAppInfoWithoutState(AndroidPackage pkg) { return ((ParsingPackageHidden) pkg).toAppInfoWithoutState(); } }
services/tests/servicestests/src/com/android/server/pm/CompatibilityModeTest.java +6 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.platform.test.annotations.Presubmit; import com.android.server.pm.parsing.PackageInfoUtils; import com.android.server.pm.parsing.pkg.PackageImpl; import com.android.server.pm.pkg.PackageStateUnserialized; import com.android.server.pm.pkg.PackageUserStateImpl; import com.android.server.pm.pkg.parsing.ParsingPackageUtils; Loading @@ -46,12 +47,16 @@ public class CompatibilityModeTest { private boolean mCompatibilityModeEnabled;; private PackageImpl mMockAndroidPackage; private PackageSetting mMockPackageState; private PackageUserStateImpl mMockUserState; @Before public void setUp() { mCompatibilityModeEnabled = ParsingPackageUtils.sCompatibilityModeEnabled; mMockAndroidPackage = mock(PackageImpl.class); mMockPackageState = mock(PackageSetting.class); when(mMockPackageState.getTransientState()) .thenReturn(new PackageStateUnserialized(mMockPackageState)); mMockUserState = new PackageUserStateImpl(); mMockUserState.setInstalled(true); } Loading Loading @@ -221,7 +226,7 @@ public class CompatibilityModeTest { info.flags |= flags; when(mMockAndroidPackage.toAppInfoWithoutState()).thenReturn(info); return PackageInfoUtils.generateApplicationInfo(mMockAndroidPackage, 0 /*flags*/, mMockUserState, 0 /*userId*/, null); 0 /*flags*/, mMockUserState, 0 /*userId*/, mMockPackageState); } private void setGlobalCompatibilityMode(boolean enabled) { Loading
services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java +10 −5 Original line number Diff line number Diff line Loading @@ -676,27 +676,32 @@ public class PackageParserTest { final File testFile = extractFile(TEST_APP4_APK); try { final ParsedPackage pkg = new TestPackageParser2().parsePackage(testFile, 0, false); var pkgSetting = mockPkgSetting(pkg); ApplicationInfo appInfo = PackageInfoUtils.generateApplicationInfo(pkg, 0, PackageUserStateInternal.DEFAULT, 0, null); PackageUserStateInternal.DEFAULT, 0, pkgSetting); for (ParsedActivity activity : pkg.getActivities()) { assertNotNull(activity.getMetaData()); assertNull(PackageInfoUtils.generateActivityInfo(pkg, activity, 0, PackageUserStateInternal.DEFAULT, appInfo, 0, null).metaData); PackageUserStateInternal.DEFAULT, appInfo, 0, pkgSetting) .metaData); } for (ParsedProvider provider : pkg.getProviders()) { assertNotNull(provider.getMetaData()); assertNull(PackageInfoUtils.generateProviderInfo(pkg, provider, 0, PackageUserStateInternal.DEFAULT, appInfo, 0, null).metaData); PackageUserStateInternal.DEFAULT, appInfo, 0, pkgSetting) .metaData); } for (ParsedActivity receiver : pkg.getReceivers()) { assertNotNull(receiver.getMetaData()); assertNull(PackageInfoUtils.generateActivityInfo(pkg, receiver, 0, PackageUserStateInternal.DEFAULT, appInfo, 0, null).metaData); PackageUserStateInternal.DEFAULT, appInfo, 0, pkgSetting) .metaData); } for (ParsedService service : pkg.getServices()) { assertNotNull(service.getMetaData()); assertNull(PackageInfoUtils.generateServiceInfo(pkg, service, 0, PackageUserStateInternal.DEFAULT, appInfo, 0, null).metaData); PackageUserStateInternal.DEFAULT, appInfo, 0, pkgSetting) .metaData); } } finally { testFile.delete(); Loading
services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java +0 −55 Original line number Diff line number Diff line Loading @@ -20,21 +20,16 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import android.apex.ApexInfo; import android.content.Context; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PermissionInfo; import android.content.pm.SigningDetails; import android.content.pm.parsing.FrameworkParsingPackageUtils; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; import android.os.Build; import android.os.Bundle; import android.os.FileUtils; import android.os.UserHandle; import android.platform.test.annotations.Presubmit; import android.util.Pair; import android.util.SparseIntArray; Loading @@ -53,7 +48,6 @@ import com.android.server.pm.pkg.component.ParsedComponent; import com.android.server.pm.pkg.component.ParsedIntentInfo; import com.android.server.pm.pkg.component.ParsedPermission; import com.android.server.pm.pkg.component.ParsedPermissionUtils; import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import com.google.common.truth.Expect; Loading @@ -63,7 +57,6 @@ import org.junit.runner.RunWith; import java.io.File; import java.io.InputStream; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; Loading Loading @@ -566,54 +559,6 @@ public class PackageParserLegacyCoreTest { intentFilter.hasMimeGroup("mime_group_1")); } @Test public void testApexPackageInfoGeneration() throws Exception { String apexModuleName = "com.android.tzdata.apex"; File apexFile = copyRawResourceToFile(apexModuleName, R.raw.com_android_tzdata); ApexInfo apexInfo = new ApexInfo(); apexInfo.isActive = true; apexInfo.isFactory = false; apexInfo.moduleName = apexModuleName; apexInfo.modulePath = apexFile.getPath(); apexInfo.versionCode = 191000070; int flags = PackageManager.GET_META_DATA | PackageManager.GET_SIGNING_CERTIFICATES; ParseResult<ParsedPackage> result = ParsingPackageUtils.parseDefaultOneTime(apexFile, flags, Collections.emptyList(), false /*collectCertificates*/); if (result.isError()) { throw new IllegalStateException(result.getErrorMessage(), result.getException()); } ParseTypeImpl input = ParseTypeImpl.forDefaultParsing(); ParsedPackage pkg = result.getResult(); ParseResult<SigningDetails> ret = ParsingPackageUtils.getSigningDetails( input, pkg, false /*skipVerify*/); if (ret.isError()) { throw new IllegalStateException(ret.getErrorMessage(), ret.getException()); } pkg.setSigningDetails(ret.getResult()); PackageInfo pi = PackageInfoUtils.generate(pkg.setApex(true).hideAsFinal(), apexInfo, flags, null, UserHandle.USER_SYSTEM); assertEquals("com.google.android.tzdata", pi.applicationInfo.packageName); assertTrue(pi.applicationInfo.enabled); assertEquals(28, pi.applicationInfo.targetSdkVersion); assertEquals(191000070, pi.applicationInfo.longVersionCode); assertNotNull(pi.applicationInfo.metaData); assertEquals(apexFile.getPath(), pi.applicationInfo.sourceDir); assertEquals("Bundle[{com.android.vending.derived.apk.id=1}]", pi.applicationInfo.metaData.toString()); assertEquals("com.google.android.tzdata", pi.packageName); assertEquals(191000070, pi.getLongVersionCode()); assertNotNull(pi.signingInfo); assertTrue(pi.signingInfo.getApkContentsSigners().length > 0); assertTrue(pi.isApex); assertTrue((pi.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0); assertTrue((pi.applicationInfo.flags & ApplicationInfo.FLAG_INSTALLED) != 0); } @Test public void testUsesSdk() throws Exception { ParsedPackage pkg; Loading