Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 66ed8dff authored by Todd Kennedy's avatar Todd Kennedy
Browse files

Define permission for installer API v2

The package installer v2 APIs were marked as @SystemApi merely as
a convenience for development. These APIs may change in the next
version of Android and their usage must be strictly controlled.

Bug: 151716357
Test: Manual. Use old Shell and see that incremental installation fails with a SecurityException
Test: Manual. Request INSTALLER_V2 permission for shell and see that incremental installation succeeds
Change-Id: I9612dc145eadda20083bcc43e7a35ef3cd90aa40
parent 5e2ddf03
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -2107,10 +2107,10 @@ package android.content.pm {
  }
  }
  public static class PackageInstaller.Session implements java.io.Closeable {
  public static class PackageInstaller.Session implements java.io.Closeable {
    method public void addFile(int, @NonNull String, long, @NonNull byte[], @Nullable byte[]);
    method @RequiresPermission("com.android.permission.USE_INSTALLER_V2") public void addFile(int, @NonNull String, long, @NonNull byte[], @Nullable byte[]);
    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void commitTransferred(@NonNull android.content.IntentSender);
    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void commitTransferred(@NonNull android.content.IntentSender);
    method @Nullable public android.content.pm.DataLoaderParams getDataLoaderParams();
    method @Nullable @RequiresPermission("com.android.permission.USE_INSTALLER_V2") public android.content.pm.DataLoaderParams getDataLoaderParams();
    method public void removeFile(int, @NonNull String);
    method @RequiresPermission("com.android.permission.USE_INSTALLER_V2") public void removeFile(int, @NonNull String);
  }
  }
  public static class PackageInstaller.SessionInfo implements android.os.Parcelable {
  public static class PackageInstaller.SessionInfo implements android.os.Parcelable {
@@ -2131,7 +2131,7 @@ package android.content.pm {
  public static class PackageInstaller.SessionParams implements android.os.Parcelable {
  public static class PackageInstaller.SessionParams implements android.os.Parcelable {
    method @RequiresPermission(android.Manifest.permission.ALLOCATE_AGGRESSIVE) public void setAllocateAggressive(boolean);
    method @RequiresPermission(android.Manifest.permission.ALLOCATE_AGGRESSIVE) public void setAllocateAggressive(boolean);
    method @Deprecated public void setAllowDowngrade(boolean);
    method @Deprecated public void setAllowDowngrade(boolean);
    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setDataLoaderParams(@NonNull android.content.pm.DataLoaderParams);
    method @RequiresPermission(allOf={android.Manifest.permission.INSTALL_PACKAGES, "com.android.permission.USE_INSTALLER_V2"}) public void setDataLoaderParams(@NonNull android.content.pm.DataLoaderParams);
    method public void setDontKillApp(boolean);
    method public void setDontKillApp(boolean);
    method public void setEnableRollback(boolean);
    method public void setEnableRollback(boolean);
    method public void setEnableRollback(boolean, int);
    method public void setEnableRollback(boolean, int);
+6 −1
Original line number Original line Diff line number Diff line
@@ -1118,6 +1118,7 @@ public class PackageInstaller {
         * {@hide}
         * {@hide}
         */
         */
        @SystemApi
        @SystemApi
        @RequiresPermission(android.Manifest.permission.USE_INSTALLER_V2)
        public @Nullable DataLoaderParams getDataLoaderParams() {
        public @Nullable DataLoaderParams getDataLoaderParams() {
            try {
            try {
                DataLoaderParamsParcel data = mSession.getDataLoaderParams();
                DataLoaderParamsParcel data = mSession.getDataLoaderParams();
@@ -1157,6 +1158,7 @@ public class PackageInstaller {
         * {@hide}
         * {@hide}
         */
         */
        @SystemApi
        @SystemApi
        @RequiresPermission(android.Manifest.permission.USE_INSTALLER_V2)
        public void addFile(@FileLocation int location, @NonNull String name, long lengthBytes,
        public void addFile(@FileLocation int location, @NonNull String name, long lengthBytes,
                @NonNull byte[] metadata, @Nullable byte[] signature) {
                @NonNull byte[] metadata, @Nullable byte[] signature) {
            try {
            try {
@@ -1180,6 +1182,7 @@ public class PackageInstaller {
         * {@hide}
         * {@hide}
         */
         */
        @SystemApi
        @SystemApi
        @RequiresPermission(android.Manifest.permission.USE_INSTALLER_V2)
        public void removeFile(@FileLocation int location, @NonNull String name) {
        public void removeFile(@FileLocation int location, @NonNull String name) {
            try {
            try {
                mSession.removeFile(location, name);
                mSession.removeFile(location, name);
@@ -1927,7 +1930,9 @@ public class PackageInstaller {
         * {@hide}
         * {@hide}
         */
         */
        @SystemApi
        @SystemApi
        @RequiresPermission(Manifest.permission.INSTALL_PACKAGES)
        @RequiresPermission(allOf = {
                Manifest.permission.INSTALL_PACKAGES,
                Manifest.permission.USE_INSTALLER_V2})
        public void setDataLoaderParams(@NonNull DataLoaderParams dataLoaderParams) {
        public void setDataLoaderParams(@NonNull DataLoaderParams dataLoaderParams) {
            this.dataLoaderParams = dataLoaderParams;
            this.dataLoaderParams = dataLoaderParams;
        }
        }
+10 −0
Original line number Original line Diff line number Diff line
@@ -3641,6 +3641,16 @@
    <permission android:name="com.android.permission.INSTALL_EXISTING_PACKAGES"
    <permission android:name="com.android.permission.INSTALL_EXISTING_PACKAGES"
        android:protectionLevel="signature|privileged" />
        android:protectionLevel="signature|privileged" />


    <!-- Allows an application to use the package installer v2 APIs.
         <p>The package installer v2 APIs are still a work in progress and we're
         currently validating they work in all scenarios.
         <p>Not for use by third-party applications.
         TODO(b/152310230): remove this permission once the APIs are confirmed to be sufficient.
         @hide
    -->
    <permission android:name="com.android.permission.USE_INSTALLER_V2"
        android:protectionLevel="signature|verifier" />

    <!-- @SystemApi @TestApi Allows an application to clear user data.
    <!-- @SystemApi @TestApi Allows an application to clear user data.
         <p>Not for use by third-party applications
         <p>Not for use by third-party applications
         @hide
         @hide
+2 −0
Original line number Original line Diff line number Diff line
@@ -81,6 +81,8 @@
    <uses-permission android:name="android.permission.READ_INPUT_STATE" />
    <uses-permission android:name="android.permission.READ_INPUT_STATE" />
    <uses-permission android:name="android.permission.SET_ORIENTATION" />
    <uses-permission android:name="android.permission.SET_ORIENTATION" />
    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
    <!--  TODO(b/152310230): remove once APIs are confirmed to be sufficient -->
    <uses-permission android:name="com.android.permission.USE_INSTALLER_V2" />
    <uses-permission android:name="android.permission.MOVE_PACKAGE" />
    <uses-permission android:name="android.permission.MOVE_PACKAGE" />
    <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
    <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
    <uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
    <uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
+8 −0
Original line number Original line Diff line number Diff line
@@ -490,6 +490,14 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
            throw new SecurityException("User restriction prevents installing");
            throw new SecurityException("User restriction prevents installing");
        }
        }


        if (params.dataLoaderParams != null
                && mContext.checkCallingOrSelfPermission(Manifest.permission.USE_INSTALLER_V2)
                        != PackageManager.PERMISSION_GRANTED) {
            throw new SecurityException("You need the "
                    + "com.android.permission.USE_INSTALLER_V2 permission "
                    + "to use a data loader");
        }

        String requestedInstallerPackageName = params.installerPackageName != null
        String requestedInstallerPackageName = params.installerPackageName != null
                ? params.installerPackageName : installerPackageName;
                ? params.installerPackageName : installerPackageName;


Loading