diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index dc79ee6b09e22..a162c41e095e8 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -8035,6 +8035,7 @@ public abstract class PackageManager { 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); return null; } } diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 98cc8f6b06705..e914432630f71 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -59,6 +59,7 @@ import android.content.IntentFilter; import android.content.pm.overlay.OverlayPaths; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; +import android.content.pm.permission.SplitPermissionInfoParcelable; import android.content.pm.pkg.FrameworkPackageUserState; import android.content.res.ApkAssets; import android.content.res.AssetManager; @@ -2417,9 +2418,28 @@ public class PackageParser { Slog.i(TAG, newPermsMsg.toString()); } - final List splitPermissions = - ActivityThread.currentApplication().getSystemService(PermissionManager.class) - .getSplitPermissions(); + // Must build permission info manually for legacy code, which can be called before + // Appication is available through the app process, so the normal API doesn't work. + List splitPermissionParcelables; + try { + splitPermissionParcelables = ActivityThread.getPermissionManager() + .getSplitPermissions(); + } catch (RemoteException e) { + splitPermissionParcelables = Collections.emptyList(); + } + + int splitPermissionsSize = splitPermissionParcelables.size(); + List splitPermissions = + new ArrayList<>(splitPermissionsSize); + for (int index = 0; index < splitPermissionsSize; index++) { + SplitPermissionInfoParcelable splitPermissionParcelable = + splitPermissionParcelables.get(index); + splitPermissions.add(new PermissionManager.SplitPermissionInfo( + splitPermissionParcelable.getSplitPermission(), + splitPermissionParcelable.getNewPermissions(), + splitPermissionParcelable.getTargetSdk() + )); + } final int listSize = splitPermissions.size(); for (int is = 0; is < listSize; is++) {