Loading core/java/android/content/pm/PackageManager.java +55 −20 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.content.pm; import static com.android.internal.pm.pkg.parsing.ParsingPackageUtils.PARSE_COLLECT_CERTIFICATES; import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.CheckResult; Loading Loading @@ -55,7 +57,6 @@ import android.content.IntentFilter; import android.content.IntentSender; import android.content.pm.PackageInstaller.SessionParams; import android.content.pm.dex.ArtManager; import android.content.pm.pkg.FrameworkPackageUserState; import android.content.pm.verify.domain.DomainVerificationManager; import android.content.res.Configuration; import android.content.res.Resources; Loading Loading @@ -91,6 +92,10 @@ import android.util.AndroidException; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.pm.parsing.PackageInfoCommonUtils; import com.android.internal.pm.parsing.PackageParser2; import com.android.internal.pm.parsing.PackageParserException; import com.android.internal.pm.parsing.pkg.ParsedPackage; import com.android.internal.util.ArrayUtils; import com.android.internal.util.DataClass; Loading Loading @@ -817,6 +822,8 @@ public abstract class PackageManager { GET_DISABLED_UNTIL_USED_COMPONENTS, GET_UNINSTALLED_PACKAGES, MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, MATCH_DIRECT_BOOT_AWARE, MATCH_DIRECT_BOOT_UNAWARE, GET_ATTRIBUTIONS_LONG, }) @Retention(RetentionPolicy.SOURCE) Loading Loading @@ -8628,11 +8635,9 @@ public abstract class PackageManager { @Nullable public PackageInfo getPackageArchiveInfo(@NonNull String archiveFilePath, @NonNull PackageInfoFlags flags) { long flagsBits = flags.getValue(); final PackageParser parser = new PackageParser(); parser.setCallback(new PackageParser.CallbackImpl(this)); final File apkFile = new File(archiveFilePath); try { @PackageInfoFlagsBits long flagsBits = flags.getValue(); if ((flagsBits & (MATCH_DIRECT_BOOT_UNAWARE | MATCH_DIRECT_BOOT_AWARE)) != 0) { // Caller expressed an explicit opinion about what encryption // aware/unaware components they want to see, so fall through and Loading @@ -8642,14 +8647,44 @@ public abstract class PackageManager { flagsBits |= MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE; } PackageParser.Package pkg = parser.parsePackage(apkFile, 0, false); if ((flagsBits & GET_SIGNATURES) != 0 || (flagsBits & GET_SIGNING_CERTIFICATES) != 0) { PackageParser.collectCertificates(pkg, false /* skipVerify */); int parserFlags = 0; if ((flagsBits & (GET_SIGNATURES | GET_SIGNING_CERTIFICATES)) != 0) { parserFlags |= PARSE_COLLECT_CERTIFICATES; } final PackageParser2 parser2 = new PackageParser2(/*separateProcesses*/ null, /*displayMetrics*/ null,/*cacher*/ null, new PackageParser2.Callback() { @Override public boolean hasFeature(String feature) { return PackageManager.this.hasSystemFeature(feature); } @NonNull @Override public Set<String> getHiddenApiWhitelistedApps() { return Collections.emptySet(); } return PackageParser.generatePackageInfo(pkg, null, (int) flagsBits, 0, 0, null, FrameworkPackageUserState.DEFAULT); } catch (PackageParser.PackageParserException e) { Log.w(TAG, "Failure to parse package archive", e); @NonNull @Override public Set<String> getInstallConstraintsAllowlist() { return Collections.emptySet(); } @Override public boolean isChangeEnabled(long changeId, @androidx.annotation.NonNull ApplicationInfo appInfo) { return false; } }); try { ParsedPackage pp = parser2.parsePackage(apkFile, parserFlags, false); return PackageInfoCommonUtils.generate(pp, flagsBits, UserHandle.myUserId()); } catch (PackageParserException e) { Log.w(TAG, "Failure to parse package archive apkFile= " +apkFile); return null; } } Loading core/java/com/android/internal/pm/parsing/PackageInfoCommonUtils.java 0 → 100644 +652 −0 File added.Preview size limit exceeded, changes collapsed. Show changes core/java/com/android/internal/pm/parsing/PackageParser2.java +15 −4 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.AnyThread; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityThread; import android.app.Application; import android.content.pm.ApplicationInfo; import android.content.pm.parsing.PackageLite; import android.content.pm.parsing.result.ParseInput; Loading @@ -40,6 +41,7 @@ import com.android.internal.pm.pkg.parsing.ParsingUtils; import com.android.internal.util.ArrayUtils; import java.io.File; import java.util.ArrayList; import java.util.List; /** Loading Loading @@ -78,10 +80,19 @@ public class PackageParser2 implements AutoCloseable { displayMetrics.setToDefaults(); } PermissionManager permissionManager = ActivityThread.currentApplication() .getSystemService(PermissionManager.class); List<PermissionManager.SplitPermissionInfo> splitPermissions = permissionManager .getSplitPermissions(); List<PermissionManager.SplitPermissionInfo> splitPermissions = null; final Application application = ActivityThread.currentApplication(); if (application != null) { final PermissionManager permissionManager = application.getSystemService(PermissionManager.class); if (permissionManager != null) { splitPermissions = permissionManager.getSplitPermissions(); } } if (splitPermissions == null) { splitPermissions = new ArrayList<>(); } mCacher = cacher; Loading Loading
core/java/android/content/pm/PackageManager.java +55 −20 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.content.pm; import static com.android.internal.pm.pkg.parsing.ParsingPackageUtils.PARSE_COLLECT_CERTIFICATES; import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.CheckResult; Loading Loading @@ -55,7 +57,6 @@ import android.content.IntentFilter; import android.content.IntentSender; import android.content.pm.PackageInstaller.SessionParams; import android.content.pm.dex.ArtManager; import android.content.pm.pkg.FrameworkPackageUserState; import android.content.pm.verify.domain.DomainVerificationManager; import android.content.res.Configuration; import android.content.res.Resources; Loading Loading @@ -91,6 +92,10 @@ import android.util.AndroidException; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.pm.parsing.PackageInfoCommonUtils; import com.android.internal.pm.parsing.PackageParser2; import com.android.internal.pm.parsing.PackageParserException; import com.android.internal.pm.parsing.pkg.ParsedPackage; import com.android.internal.util.ArrayUtils; import com.android.internal.util.DataClass; Loading Loading @@ -817,6 +822,8 @@ public abstract class PackageManager { GET_DISABLED_UNTIL_USED_COMPONENTS, GET_UNINSTALLED_PACKAGES, MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, MATCH_DIRECT_BOOT_AWARE, MATCH_DIRECT_BOOT_UNAWARE, GET_ATTRIBUTIONS_LONG, }) @Retention(RetentionPolicy.SOURCE) Loading Loading @@ -8628,11 +8635,9 @@ public abstract class PackageManager { @Nullable public PackageInfo getPackageArchiveInfo(@NonNull String archiveFilePath, @NonNull PackageInfoFlags flags) { long flagsBits = flags.getValue(); final PackageParser parser = new PackageParser(); parser.setCallback(new PackageParser.CallbackImpl(this)); final File apkFile = new File(archiveFilePath); try { @PackageInfoFlagsBits long flagsBits = flags.getValue(); if ((flagsBits & (MATCH_DIRECT_BOOT_UNAWARE | MATCH_DIRECT_BOOT_AWARE)) != 0) { // Caller expressed an explicit opinion about what encryption // aware/unaware components they want to see, so fall through and Loading @@ -8642,14 +8647,44 @@ public abstract class PackageManager { flagsBits |= MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE; } PackageParser.Package pkg = parser.parsePackage(apkFile, 0, false); if ((flagsBits & GET_SIGNATURES) != 0 || (flagsBits & GET_SIGNING_CERTIFICATES) != 0) { PackageParser.collectCertificates(pkg, false /* skipVerify */); int parserFlags = 0; if ((flagsBits & (GET_SIGNATURES | GET_SIGNING_CERTIFICATES)) != 0) { parserFlags |= PARSE_COLLECT_CERTIFICATES; } final PackageParser2 parser2 = new PackageParser2(/*separateProcesses*/ null, /*displayMetrics*/ null,/*cacher*/ null, new PackageParser2.Callback() { @Override public boolean hasFeature(String feature) { return PackageManager.this.hasSystemFeature(feature); } @NonNull @Override public Set<String> getHiddenApiWhitelistedApps() { return Collections.emptySet(); } return PackageParser.generatePackageInfo(pkg, null, (int) flagsBits, 0, 0, null, FrameworkPackageUserState.DEFAULT); } catch (PackageParser.PackageParserException e) { Log.w(TAG, "Failure to parse package archive", e); @NonNull @Override public Set<String> getInstallConstraintsAllowlist() { return Collections.emptySet(); } @Override public boolean isChangeEnabled(long changeId, @androidx.annotation.NonNull ApplicationInfo appInfo) { return false; } }); try { ParsedPackage pp = parser2.parsePackage(apkFile, parserFlags, false); return PackageInfoCommonUtils.generate(pp, flagsBits, UserHandle.myUserId()); } catch (PackageParserException e) { Log.w(TAG, "Failure to parse package archive apkFile= " +apkFile); return null; } } Loading
core/java/com/android/internal/pm/parsing/PackageInfoCommonUtils.java 0 → 100644 +652 −0 File added.Preview size limit exceeded, changes collapsed. Show changes
core/java/com/android/internal/pm/parsing/PackageParser2.java +15 −4 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.AnyThread; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityThread; import android.app.Application; import android.content.pm.ApplicationInfo; import android.content.pm.parsing.PackageLite; import android.content.pm.parsing.result.ParseInput; Loading @@ -40,6 +41,7 @@ import com.android.internal.pm.pkg.parsing.ParsingUtils; import com.android.internal.util.ArrayUtils; import java.io.File; import java.util.ArrayList; import java.util.List; /** Loading Loading @@ -78,10 +80,19 @@ public class PackageParser2 implements AutoCloseable { displayMetrics.setToDefaults(); } PermissionManager permissionManager = ActivityThread.currentApplication() .getSystemService(PermissionManager.class); List<PermissionManager.SplitPermissionInfo> splitPermissions = permissionManager .getSplitPermissions(); List<PermissionManager.SplitPermissionInfo> splitPermissions = null; final Application application = ActivityThread.currentApplication(); if (application != null) { final PermissionManager permissionManager = application.getSystemService(PermissionManager.class); if (permissionManager != null) { splitPermissions = permissionManager.getSplitPermissions(); } } if (splitPermissions == null) { splitPermissions = new ArrayList<>(); } mCacher = cacher; Loading