Loading Android.mk +1 −1 Original line number Diff line number Diff line Loading @@ -131,7 +131,7 @@ LOCAL_SRC_FILES += \ core/java/android/content/pm/IPackageInstallObserver.aidl \ core/java/android/content/pm/IPackageInstallObserver2.aidl \ core/java/android/content/pm/IPackageInstaller.aidl \ core/java/android/content/pm/IPackageInstallerObserver.aidl \ core/java/android/content/pm/IPackageInstallerCallback.aidl \ core/java/android/content/pm/IPackageInstallerSession.aidl \ core/java/android/content/pm/IPackageManager.aidl \ core/java/android/content/pm/IPackageMoveObserver.aidl \ Loading api/current.txt +39 −35 Original line number Diff line number Diff line Loading @@ -8454,32 +8454,31 @@ package android.content.pm { public class InstallSessionInfo implements android.os.Parcelable { method public int describeContents(); method public android.graphics.Bitmap getIcon(); method public android.graphics.Bitmap getAppIcon(); method public java.lang.CharSequence getAppLabel(); method public java.lang.String getAppPackageName(); method public java.lang.String getInstallerPackageName(); method public java.lang.String getPackageName(); method public int getProgress(); method public float getProgress(); method public int getSessionId(); method public java.lang.CharSequence getTitle(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; } public class InstallSessionParams implements android.os.Parcelable { ctor public InstallSessionParams(); ctor public InstallSessionParams(int); method public int describeContents(); method public void setDeltaSize(long); method public void setIcon(android.graphics.Bitmap); method public void setAppIcon(android.graphics.Bitmap); method public void setAppLabel(java.lang.CharSequence); method public void setAppPackageName(java.lang.String); method public void setInstallLocation(int); method public void setModeFullInstall(); method public void setModeInheritExisting(); method public void setOriginatingUri(android.net.Uri); method public void setPackageName(java.lang.String); method public void setProgressMax(int); method public void setReferrerUri(android.net.Uri); method public void setSignatures(android.content.pm.Signature[]); method public void setTitle(java.lang.CharSequence); method public void setSize(long); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; field public static final int MODE_FULL_INSTALL = 1; // 0x1 field public static final int MODE_INHERIT_EXISTING = 2; // 0x2 } public class InstrumentationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable { Loading Loading @@ -8580,42 +8579,47 @@ package android.content.pm { } public class PackageInstaller { method public void addSessionCallback(android.content.pm.PackageInstaller.SessionCallback); method public void addSessionCallback(android.content.pm.PackageInstaller.SessionCallback, android.os.Handler); method public int createSession(android.content.pm.InstallSessionParams) throws java.io.IOException; method public java.util.List<android.content.pm.InstallSessionInfo> getActiveSessions(); method public java.util.List<android.content.pm.InstallSessionInfo> getAllSessions(); method public java.util.List<android.content.pm.InstallSessionInfo> getMySessions(); method public android.content.pm.InstallSessionInfo getSessionInfo(int); method public android.content.pm.PackageInstaller.Session openSession(int); method public void registerSessionObserver(android.content.pm.PackageInstaller.SessionObserver); method public void uninstall(java.lang.String, android.content.pm.PackageInstaller.UninstallResultCallback); method public void unregisterSessionObserver(android.content.pm.PackageInstaller.SessionObserver); method public void removeSessionCallback(android.content.pm.PackageInstaller.SessionCallback); method public void uninstall(java.lang.String, android.content.pm.PackageInstaller.UninstallCallback); } public static abstract class PackageInstaller.CommitResultCallback { ctor public PackageInstaller.CommitResultCallback(); method public abstract void onFailure(java.lang.String); method public void onFailureConflict(java.lang.String, java.lang.String); method public void onFailureIncompatible(java.lang.String); method public void onFailureInvalid(java.lang.String); method public void onFailureStorage(java.lang.String); public static abstract class PackageInstaller.CommitCallback { ctor public PackageInstaller.CommitCallback(); method public abstract void onFailure(int, java.lang.String, android.os.Bundle); method public abstract void onSuccess(); field public static final java.lang.String EXTRA_PACKAGE_NAME = "android.content.pm.extra.PACKAGE_NAME"; field public static final int FAILURE_CONFLICT = 2; // 0x2 field public static final int FAILURE_INCOMPATIBLE = 4; // 0x4 field public static final int FAILURE_INVALID = 1; // 0x1 field public static final int FAILURE_STORAGE = 3; // 0x3 field public static final int FAILURE_UNKNOWN = 0; // 0x0 } public static class PackageInstaller.Session implements java.io.Closeable { method public void abandon(); method public void close(); method public void commit(android.content.pm.PackageInstaller.CommitResultCallback); method public void destroy(); method public void commit(android.content.pm.PackageInstaller.CommitCallback); method public void fsync(java.io.OutputStream) throws java.io.IOException; method public java.io.OutputStream openWrite(java.lang.String, long, long) throws java.io.IOException; method public void setProgress(int); method public void setProgress(float); } public static abstract class PackageInstaller.SessionObserver { ctor public PackageInstaller.SessionObserver(); method public abstract void onCreated(android.content.pm.InstallSessionInfo); method public abstract void onFinalized(int, boolean); method public abstract void onProgress(int, int); public static abstract class PackageInstaller.SessionCallback { ctor public PackageInstaller.SessionCallback(); method public abstract void onCreated(int); method public abstract void onFinished(int, boolean); method public abstract void onProgressChanged(int, float); } public static abstract class PackageInstaller.UninstallResultCallback { ctor public PackageInstaller.UninstallResultCallback(); public static abstract class PackageInstaller.UninstallCallback { ctor public PackageInstaller.UninstallCallback(); method public abstract void onFailure(java.lang.String); method public abstract void onSuccess(); } Loading Loading @@ -8682,7 +8686,6 @@ package android.content.pm { method public abstract android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo); method public abstract java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int); method public abstract java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int); method public abstract android.content.pm.PackageInstaller getInstaller(); method public abstract java.lang.String getInstallerPackageName(java.lang.String); method public abstract android.content.pm.InstrumentationInfo getInstrumentationInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract android.content.pm.KeySet getKeySetByAlias(java.lang.String, java.lang.String); Loading @@ -8692,6 +8695,7 @@ package android.content.pm { method public android.content.pm.PackageInfo getPackageArchiveInfo(java.lang.String, int); method public abstract int[] getPackageGids(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract android.content.pm.PackageInfo getPackageInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract android.content.pm.PackageInstaller getPackageInstaller(); method public abstract java.lang.String[] getPackagesForUid(int); method public abstract java.util.List<android.content.pm.PackageInfo> getPackagesHoldingPermissions(java.lang.String[], int); method public abstract android.content.pm.PermissionGroupInfo getPermissionGroupInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; Loading Loading @@ -30130,7 +30134,6 @@ package android.test.mock { method public android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo); method public java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int); method public java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int); method public android.content.pm.PackageInstaller getInstaller(); method public java.lang.String getInstallerPackageName(java.lang.String); method public android.content.pm.InstrumentationInfo getInstrumentationInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; method public android.content.pm.KeySet getKeySetByAlias(java.lang.String, java.lang.String); Loading @@ -30139,6 +30142,7 @@ package android.test.mock { method public java.lang.String getNameForUid(int); method public int[] getPackageGids(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; method public android.content.pm.PackageInfo getPackageInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public android.content.pm.PackageInstaller getPackageInstaller(); method public java.lang.String[] getPackagesForUid(int); method public java.util.List<android.content.pm.PackageInfo> getPackagesHoldingPermissions(java.lang.String[], int); method public android.content.pm.PermissionGroupInfo getPermissionGroupInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; cmds/pm/src/com/android/commands/pm/Pm.java +22 −19 Original line number Diff line number Diff line Loading @@ -27,11 +27,12 @@ import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageDeleteObserver; import android.content.pm.IPackageInstaller; import android.content.pm.IPackageManager; import android.content.pm.InstallSessionInfo; import android.content.pm.InstallSessionParams; import android.content.pm.InstrumentationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageInstaller; import android.content.pm.PackageInstaller.CommitResultCallback; import android.content.pm.PackageInstaller.CommitCallback; import android.content.pm.PackageItemInfo; import android.content.pm.PackageManager; import android.content.pm.ParceledListSlice; Loading Loading @@ -157,8 +158,8 @@ public final class Pm { return; } if ("install-destroy".equals(op)) { runInstallDestroy(); if ("install-abandon".equals(op) || "install-destroy".equals(op)) { runInstallAbandon(); return; } Loading Loading @@ -770,7 +771,7 @@ public final class Pm { } } class LocalCommitResultCallback extends CommitResultCallback { class LocalCommitCallback extends CommitCallback { boolean finished; boolean success; String msg; Loading @@ -790,7 +791,7 @@ public final class Pm { } @Override public void onFailure(String msg) { public void onFailure(int failureReason, String msg, Bundle extras) { setResult(false, msg); } } Loading Loading @@ -996,10 +997,9 @@ public final class Pm { private void runInstallCreate() throws RemoteException { String installerPackageName = null; final InstallSessionParams params = new InstallSessionParams(); final InstallSessionParams params = new InstallSessionParams( InstallSessionParams.MODE_FULL_INSTALL); params.installFlags = PackageManager.INSTALL_ALL_USERS; params.setModeFullInstall(); params.setProgressMax(-1); String opt; while ((opt = nextOption()) != null) { Loading @@ -1021,11 +1021,9 @@ public final class Pm { } else if (opt.equals("-d")) { params.installFlags |= PackageManager.INSTALL_ALLOW_DOWNGRADE; } else if (opt.equals("-p")) { params.setModeInheritExisting(); params.mode = InstallSessionParams.MODE_INHERIT_EXISTING; } else if (opt.equals("-S")) { final long deltaSize = Long.parseLong(nextOptionData()); params.setDeltaSize(deltaSize); params.setProgressMax((int) params.deltaSize); params.setSize(Long.parseLong(nextOptionData())); } else if (opt.equals("--abi")) { params.abiOverride = checkAbiArgument(nextOptionData()); } else { Loading @@ -1033,7 +1031,7 @@ public final class Pm { } } final int sessionId = mInstaller.createSession(installerPackageName, params, final int sessionId = mInstaller.createSession(params, installerPackageName, UserHandle.USER_OWNER); // NOTE: adb depends on parsing this string Loading Loading @@ -1080,7 +1078,12 @@ public final class Pm { final int n = Streams.copy(in, out); session.fsync(out); session.addProgress(n); final InstallSessionInfo info = mInstaller.getSessionInfo(sessionId); if (info.sizeBytes > 0) { final float fraction = ((float) n / (float) info.sizeBytes); session.addProgress(fraction); } System.out.println("Success: streamed " + n + " bytes"); } finally { Loading @@ -1097,7 +1100,7 @@ public final class Pm { try { session = new PackageInstaller.Session(mInstaller.openSession(sessionId)); final LocalCommitResultCallback callback = new LocalCommitResultCallback(); final LocalCommitCallback callback = new LocalCommitCallback(); session.commit(callback); synchronized (callback) { Loading @@ -1118,13 +1121,13 @@ public final class Pm { } } private void runInstallDestroy() throws RemoteException { private void runInstallAbandon() throws RemoteException { final int sessionId = Integer.parseInt(nextArg()); PackageInstaller.Session session = null; try { session = new PackageInstaller.Session(mInstaller.openSession(sessionId)); session.destroy(); session.abandon(); System.out.println("Success"); } finally { IoUtils.closeQuietly(session); Loading Loading @@ -1743,7 +1746,7 @@ public final class Pm { System.err.println(" pm install-create [-lrtsfdp] [-i PACKAGE] [-S BYTES]"); System.err.println(" pm install-write [-S BYTES] SESSION_ID SPLIT_NAME [PATH]"); System.err.println(" pm install-commit SESSION_ID"); System.err.println(" pm install-destroy SESSION_ID"); System.err.println(" pm install-abandon SESSION_ID"); System.err.println(" pm uninstall [-k] [--user USER_ID] PACKAGE"); System.err.println(" pm set-installer PACKAGE INSTALLER"); System.err.println(" pm clear [--user USER_ID] PACKAGE"); Loading Loading @@ -1813,7 +1816,7 @@ public final class Pm { System.err.println(" -S: size in bytes of package, required for stdin"); System.err.println(""); System.err.println("pm install-commit: perform install of fully staged session"); System.err.println("pm install-destroy: destroy session"); System.err.println("pm install-abandon: abandon session"); System.err.println(""); System.err.println("pm set-installer: set installer package name"); System.err.println(""); Loading core/java/android/app/ApplicationPackageManager.java +25 −10 Original line number Diff line number Diff line Loading @@ -61,7 +61,10 @@ import android.os.UserManager; import android.util.ArrayMap; import android.util.Log; import android.view.Display; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.Preconditions; import dalvik.system.VMRuntime; import java.lang.ref.WeakReference; Loading @@ -74,14 +77,21 @@ final class ApplicationPackageManager extends PackageManager { private final static boolean DEBUG = false; private final static boolean DEBUG_ICONS = false; UserManager mUserManager; private final Object mLock = new Object(); @GuardedBy("mLock") private UserManager mUserManager; @GuardedBy("mLock") private PackageInstaller mInstaller; UserManager getUserManager() { synchronized (mLock) { if (mUserManager == null) { mUserManager = UserManager.get(mContext); } return mUserManager; } } @Override public PackageInfo getPackageInfo(String packageName, int flags) Loading Loading @@ -1543,14 +1553,19 @@ final class ApplicationPackageManager extends PackageManager { } @Override public PackageInstaller getInstaller() { public PackageInstaller getPackageInstaller() { synchronized (mLock) { if (mInstaller == null) { try { return new PackageInstaller(this, mPM.getPackageInstaller(), mContext.getPackageName(), mContext.getUserId()); mInstaller = new PackageInstaller(this, mPM.getPackageInstaller(), mContext.getPackageName(), mContext.getUserId()); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } return mInstaller; } } @Override public boolean isPackageAvailable(String packageName) { Loading core/java/android/content/pm/IPackageInstaller.aidl +7 −5 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ package android.content.pm; import android.content.pm.IPackageDeleteObserver; import android.content.pm.IPackageInstallerObserver; import android.content.pm.IPackageInstallerCallback; import android.content.pm.IPackageInstallerSession; import android.content.pm.InstallSessionInfo; import android.content.pm.InstallSessionParams; Loading @@ -25,13 +25,15 @@ import android.os.ParcelFileDescriptor; /** {@hide} */ interface IPackageInstaller { int createSession(String installerPackageName, in InstallSessionParams params, int userId); int createSession(in InstallSessionParams params, String installerPackageName, int userId); IPackageInstallerSession openSession(int sessionId); List<InstallSessionInfo> getSessions(int userId); InstallSessionInfo getSessionInfo(int sessionId); List<InstallSessionInfo> getAllSessions(int userId); List<InstallSessionInfo> getMySessions(String installerPackageName, int userId); void registerObserver(IPackageInstallerObserver observer, int userId); void unregisterObserver(IPackageInstallerObserver observer, int userId); void registerCallback(IPackageInstallerCallback callback, int userId); void unregisterCallback(IPackageInstallerCallback callback); void uninstall(String packageName, int flags, in IPackageDeleteObserver observer, int userId); void uninstallSplit(String packageName, String splitName, int flags, in IPackageDeleteObserver observer, int userId); Loading Loading
Android.mk +1 −1 Original line number Diff line number Diff line Loading @@ -131,7 +131,7 @@ LOCAL_SRC_FILES += \ core/java/android/content/pm/IPackageInstallObserver.aidl \ core/java/android/content/pm/IPackageInstallObserver2.aidl \ core/java/android/content/pm/IPackageInstaller.aidl \ core/java/android/content/pm/IPackageInstallerObserver.aidl \ core/java/android/content/pm/IPackageInstallerCallback.aidl \ core/java/android/content/pm/IPackageInstallerSession.aidl \ core/java/android/content/pm/IPackageManager.aidl \ core/java/android/content/pm/IPackageMoveObserver.aidl \ Loading
api/current.txt +39 −35 Original line number Diff line number Diff line Loading @@ -8454,32 +8454,31 @@ package android.content.pm { public class InstallSessionInfo implements android.os.Parcelable { method public int describeContents(); method public android.graphics.Bitmap getIcon(); method public android.graphics.Bitmap getAppIcon(); method public java.lang.CharSequence getAppLabel(); method public java.lang.String getAppPackageName(); method public java.lang.String getInstallerPackageName(); method public java.lang.String getPackageName(); method public int getProgress(); method public float getProgress(); method public int getSessionId(); method public java.lang.CharSequence getTitle(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; } public class InstallSessionParams implements android.os.Parcelable { ctor public InstallSessionParams(); ctor public InstallSessionParams(int); method public int describeContents(); method public void setDeltaSize(long); method public void setIcon(android.graphics.Bitmap); method public void setAppIcon(android.graphics.Bitmap); method public void setAppLabel(java.lang.CharSequence); method public void setAppPackageName(java.lang.String); method public void setInstallLocation(int); method public void setModeFullInstall(); method public void setModeInheritExisting(); method public void setOriginatingUri(android.net.Uri); method public void setPackageName(java.lang.String); method public void setProgressMax(int); method public void setReferrerUri(android.net.Uri); method public void setSignatures(android.content.pm.Signature[]); method public void setTitle(java.lang.CharSequence); method public void setSize(long); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; field public static final int MODE_FULL_INSTALL = 1; // 0x1 field public static final int MODE_INHERIT_EXISTING = 2; // 0x2 } public class InstrumentationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable { Loading Loading @@ -8580,42 +8579,47 @@ package android.content.pm { } public class PackageInstaller { method public void addSessionCallback(android.content.pm.PackageInstaller.SessionCallback); method public void addSessionCallback(android.content.pm.PackageInstaller.SessionCallback, android.os.Handler); method public int createSession(android.content.pm.InstallSessionParams) throws java.io.IOException; method public java.util.List<android.content.pm.InstallSessionInfo> getActiveSessions(); method public java.util.List<android.content.pm.InstallSessionInfo> getAllSessions(); method public java.util.List<android.content.pm.InstallSessionInfo> getMySessions(); method public android.content.pm.InstallSessionInfo getSessionInfo(int); method public android.content.pm.PackageInstaller.Session openSession(int); method public void registerSessionObserver(android.content.pm.PackageInstaller.SessionObserver); method public void uninstall(java.lang.String, android.content.pm.PackageInstaller.UninstallResultCallback); method public void unregisterSessionObserver(android.content.pm.PackageInstaller.SessionObserver); method public void removeSessionCallback(android.content.pm.PackageInstaller.SessionCallback); method public void uninstall(java.lang.String, android.content.pm.PackageInstaller.UninstallCallback); } public static abstract class PackageInstaller.CommitResultCallback { ctor public PackageInstaller.CommitResultCallback(); method public abstract void onFailure(java.lang.String); method public void onFailureConflict(java.lang.String, java.lang.String); method public void onFailureIncompatible(java.lang.String); method public void onFailureInvalid(java.lang.String); method public void onFailureStorage(java.lang.String); public static abstract class PackageInstaller.CommitCallback { ctor public PackageInstaller.CommitCallback(); method public abstract void onFailure(int, java.lang.String, android.os.Bundle); method public abstract void onSuccess(); field public static final java.lang.String EXTRA_PACKAGE_NAME = "android.content.pm.extra.PACKAGE_NAME"; field public static final int FAILURE_CONFLICT = 2; // 0x2 field public static final int FAILURE_INCOMPATIBLE = 4; // 0x4 field public static final int FAILURE_INVALID = 1; // 0x1 field public static final int FAILURE_STORAGE = 3; // 0x3 field public static final int FAILURE_UNKNOWN = 0; // 0x0 } public static class PackageInstaller.Session implements java.io.Closeable { method public void abandon(); method public void close(); method public void commit(android.content.pm.PackageInstaller.CommitResultCallback); method public void destroy(); method public void commit(android.content.pm.PackageInstaller.CommitCallback); method public void fsync(java.io.OutputStream) throws java.io.IOException; method public java.io.OutputStream openWrite(java.lang.String, long, long) throws java.io.IOException; method public void setProgress(int); method public void setProgress(float); } public static abstract class PackageInstaller.SessionObserver { ctor public PackageInstaller.SessionObserver(); method public abstract void onCreated(android.content.pm.InstallSessionInfo); method public abstract void onFinalized(int, boolean); method public abstract void onProgress(int, int); public static abstract class PackageInstaller.SessionCallback { ctor public PackageInstaller.SessionCallback(); method public abstract void onCreated(int); method public abstract void onFinished(int, boolean); method public abstract void onProgressChanged(int, float); } public static abstract class PackageInstaller.UninstallResultCallback { ctor public PackageInstaller.UninstallResultCallback(); public static abstract class PackageInstaller.UninstallCallback { ctor public PackageInstaller.UninstallCallback(); method public abstract void onFailure(java.lang.String); method public abstract void onSuccess(); } Loading Loading @@ -8682,7 +8686,6 @@ package android.content.pm { method public abstract android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo); method public abstract java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int); method public abstract java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int); method public abstract android.content.pm.PackageInstaller getInstaller(); method public abstract java.lang.String getInstallerPackageName(java.lang.String); method public abstract android.content.pm.InstrumentationInfo getInstrumentationInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract android.content.pm.KeySet getKeySetByAlias(java.lang.String, java.lang.String); Loading @@ -8692,6 +8695,7 @@ package android.content.pm { method public android.content.pm.PackageInfo getPackageArchiveInfo(java.lang.String, int); method public abstract int[] getPackageGids(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract android.content.pm.PackageInfo getPackageInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract android.content.pm.PackageInstaller getPackageInstaller(); method public abstract java.lang.String[] getPackagesForUid(int); method public abstract java.util.List<android.content.pm.PackageInfo> getPackagesHoldingPermissions(java.lang.String[], int); method public abstract android.content.pm.PermissionGroupInfo getPermissionGroupInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; Loading Loading @@ -30130,7 +30134,6 @@ package android.test.mock { method public android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo); method public java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int); method public java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int); method public android.content.pm.PackageInstaller getInstaller(); method public java.lang.String getInstallerPackageName(java.lang.String); method public android.content.pm.InstrumentationInfo getInstrumentationInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; method public android.content.pm.KeySet getKeySetByAlias(java.lang.String, java.lang.String); Loading @@ -30139,6 +30142,7 @@ package android.test.mock { method public java.lang.String getNameForUid(int); method public int[] getPackageGids(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; method public android.content.pm.PackageInfo getPackageInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public android.content.pm.PackageInstaller getPackageInstaller(); method public java.lang.String[] getPackagesForUid(int); method public java.util.List<android.content.pm.PackageInfo> getPackagesHoldingPermissions(java.lang.String[], int); method public android.content.pm.PermissionGroupInfo getPermissionGroupInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
cmds/pm/src/com/android/commands/pm/Pm.java +22 −19 Original line number Diff line number Diff line Loading @@ -27,11 +27,12 @@ import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageDeleteObserver; import android.content.pm.IPackageInstaller; import android.content.pm.IPackageManager; import android.content.pm.InstallSessionInfo; import android.content.pm.InstallSessionParams; import android.content.pm.InstrumentationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageInstaller; import android.content.pm.PackageInstaller.CommitResultCallback; import android.content.pm.PackageInstaller.CommitCallback; import android.content.pm.PackageItemInfo; import android.content.pm.PackageManager; import android.content.pm.ParceledListSlice; Loading Loading @@ -157,8 +158,8 @@ public final class Pm { return; } if ("install-destroy".equals(op)) { runInstallDestroy(); if ("install-abandon".equals(op) || "install-destroy".equals(op)) { runInstallAbandon(); return; } Loading Loading @@ -770,7 +771,7 @@ public final class Pm { } } class LocalCommitResultCallback extends CommitResultCallback { class LocalCommitCallback extends CommitCallback { boolean finished; boolean success; String msg; Loading @@ -790,7 +791,7 @@ public final class Pm { } @Override public void onFailure(String msg) { public void onFailure(int failureReason, String msg, Bundle extras) { setResult(false, msg); } } Loading Loading @@ -996,10 +997,9 @@ public final class Pm { private void runInstallCreate() throws RemoteException { String installerPackageName = null; final InstallSessionParams params = new InstallSessionParams(); final InstallSessionParams params = new InstallSessionParams( InstallSessionParams.MODE_FULL_INSTALL); params.installFlags = PackageManager.INSTALL_ALL_USERS; params.setModeFullInstall(); params.setProgressMax(-1); String opt; while ((opt = nextOption()) != null) { Loading @@ -1021,11 +1021,9 @@ public final class Pm { } else if (opt.equals("-d")) { params.installFlags |= PackageManager.INSTALL_ALLOW_DOWNGRADE; } else if (opt.equals("-p")) { params.setModeInheritExisting(); params.mode = InstallSessionParams.MODE_INHERIT_EXISTING; } else if (opt.equals("-S")) { final long deltaSize = Long.parseLong(nextOptionData()); params.setDeltaSize(deltaSize); params.setProgressMax((int) params.deltaSize); params.setSize(Long.parseLong(nextOptionData())); } else if (opt.equals("--abi")) { params.abiOverride = checkAbiArgument(nextOptionData()); } else { Loading @@ -1033,7 +1031,7 @@ public final class Pm { } } final int sessionId = mInstaller.createSession(installerPackageName, params, final int sessionId = mInstaller.createSession(params, installerPackageName, UserHandle.USER_OWNER); // NOTE: adb depends on parsing this string Loading Loading @@ -1080,7 +1078,12 @@ public final class Pm { final int n = Streams.copy(in, out); session.fsync(out); session.addProgress(n); final InstallSessionInfo info = mInstaller.getSessionInfo(sessionId); if (info.sizeBytes > 0) { final float fraction = ((float) n / (float) info.sizeBytes); session.addProgress(fraction); } System.out.println("Success: streamed " + n + " bytes"); } finally { Loading @@ -1097,7 +1100,7 @@ public final class Pm { try { session = new PackageInstaller.Session(mInstaller.openSession(sessionId)); final LocalCommitResultCallback callback = new LocalCommitResultCallback(); final LocalCommitCallback callback = new LocalCommitCallback(); session.commit(callback); synchronized (callback) { Loading @@ -1118,13 +1121,13 @@ public final class Pm { } } private void runInstallDestroy() throws RemoteException { private void runInstallAbandon() throws RemoteException { final int sessionId = Integer.parseInt(nextArg()); PackageInstaller.Session session = null; try { session = new PackageInstaller.Session(mInstaller.openSession(sessionId)); session.destroy(); session.abandon(); System.out.println("Success"); } finally { IoUtils.closeQuietly(session); Loading Loading @@ -1743,7 +1746,7 @@ public final class Pm { System.err.println(" pm install-create [-lrtsfdp] [-i PACKAGE] [-S BYTES]"); System.err.println(" pm install-write [-S BYTES] SESSION_ID SPLIT_NAME [PATH]"); System.err.println(" pm install-commit SESSION_ID"); System.err.println(" pm install-destroy SESSION_ID"); System.err.println(" pm install-abandon SESSION_ID"); System.err.println(" pm uninstall [-k] [--user USER_ID] PACKAGE"); System.err.println(" pm set-installer PACKAGE INSTALLER"); System.err.println(" pm clear [--user USER_ID] PACKAGE"); Loading Loading @@ -1813,7 +1816,7 @@ public final class Pm { System.err.println(" -S: size in bytes of package, required for stdin"); System.err.println(""); System.err.println("pm install-commit: perform install of fully staged session"); System.err.println("pm install-destroy: destroy session"); System.err.println("pm install-abandon: abandon session"); System.err.println(""); System.err.println("pm set-installer: set installer package name"); System.err.println(""); Loading
core/java/android/app/ApplicationPackageManager.java +25 −10 Original line number Diff line number Diff line Loading @@ -61,7 +61,10 @@ import android.os.UserManager; import android.util.ArrayMap; import android.util.Log; import android.view.Display; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.Preconditions; import dalvik.system.VMRuntime; import java.lang.ref.WeakReference; Loading @@ -74,14 +77,21 @@ final class ApplicationPackageManager extends PackageManager { private final static boolean DEBUG = false; private final static boolean DEBUG_ICONS = false; UserManager mUserManager; private final Object mLock = new Object(); @GuardedBy("mLock") private UserManager mUserManager; @GuardedBy("mLock") private PackageInstaller mInstaller; UserManager getUserManager() { synchronized (mLock) { if (mUserManager == null) { mUserManager = UserManager.get(mContext); } return mUserManager; } } @Override public PackageInfo getPackageInfo(String packageName, int flags) Loading Loading @@ -1543,14 +1553,19 @@ final class ApplicationPackageManager extends PackageManager { } @Override public PackageInstaller getInstaller() { public PackageInstaller getPackageInstaller() { synchronized (mLock) { if (mInstaller == null) { try { return new PackageInstaller(this, mPM.getPackageInstaller(), mContext.getPackageName(), mContext.getUserId()); mInstaller = new PackageInstaller(this, mPM.getPackageInstaller(), mContext.getPackageName(), mContext.getUserId()); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } return mInstaller; } } @Override public boolean isPackageAvailable(String packageName) { Loading
core/java/android/content/pm/IPackageInstaller.aidl +7 −5 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ package android.content.pm; import android.content.pm.IPackageDeleteObserver; import android.content.pm.IPackageInstallerObserver; import android.content.pm.IPackageInstallerCallback; import android.content.pm.IPackageInstallerSession; import android.content.pm.InstallSessionInfo; import android.content.pm.InstallSessionParams; Loading @@ -25,13 +25,15 @@ import android.os.ParcelFileDescriptor; /** {@hide} */ interface IPackageInstaller { int createSession(String installerPackageName, in InstallSessionParams params, int userId); int createSession(in InstallSessionParams params, String installerPackageName, int userId); IPackageInstallerSession openSession(int sessionId); List<InstallSessionInfo> getSessions(int userId); InstallSessionInfo getSessionInfo(int sessionId); List<InstallSessionInfo> getAllSessions(int userId); List<InstallSessionInfo> getMySessions(String installerPackageName, int userId); void registerObserver(IPackageInstallerObserver observer, int userId); void unregisterObserver(IPackageInstallerObserver observer, int userId); void registerCallback(IPackageInstallerCallback callback, int userId); void unregisterCallback(IPackageInstallerCallback callback); void uninstall(String packageName, int flags, in IPackageDeleteObserver observer, int userId); void uninstallSplit(String packageName, String splitName, int flags, in IPackageDeleteObserver observer, int userId); Loading