@Override public void onCreate() { super.onCreate(); // get internal methods via reflection try { Class<?>[] installTypes = { Uri.class, IPackageInstallObserver.class, int.class, String.class, }; Class<?>[] deleteTypes = { String.class, IPackageDeleteObserver.class, int.class, }; PackageManager pm = getPackageManager(); mInstallMethod = pm.getClass().getMethod("installPackage", installTypes); mDeleteMethod = pm.getClass().getMethod("deletePackage", deleteTypes); } catch (NoSuchMethodException e) { Log.e(TAG, "Android not compatible!", e); stopSelf(); } }
public SystemInstaller(Context context, PackageManager pm, InstallerCallback callback) throws AndroidNotCompatibleException { super(context, pm, callback); // create internal callbacks mInstallObserver = new PackageInstallObserver(); mDeleteObserver = new PackageDeleteObserver(); try { Class<?>[] installTypes = new Class[] { Uri.class, IPackageInstallObserver.class, int.class, String.class }; Class<?>[] deleteTypes = new Class[] { String.class, IPackageDeleteObserver.class, int.class }; mInstallMethod = mPm.getClass().getMethod("installPackage", installTypes); mDeleteMethod = mPm.getClass().getMethod("deletePackage", deleteTypes); } catch (NoSuchMethodException e) { throw new AndroidNotCompatibleException(e); } }
/** * 适配 5.0以下系统 * * @param path * @param iInstallerCallback * @throws Exception */ private void installPackageLowApi(String path, final IInstallerCallback iInstallerCallback) throws Exception { final Uri uri = Uri.parse(path); final int flags = PMFlags.INSTALL_REPLACE_EXISTING; final PackageInstallObserver observer = new PackageInstallObserver(iInstallerCallback); final IPackageManager ipm = getIPackageManager(); RefInvoke.invokeMethodWithException(ipm.getClass(), "installPackage", ipm, new Class[] { Uri.class, IPackageInstallObserver.class, int.class, String.class }, new Object[] { uri, observer, flags, null }); }
public ApplicationManager(Context context) throws SecurityException, NoSuchMethodException { observer = new PackageInstallObserver(); observerdelete = new PackageDeleteObserver(); pm = context.getPackageManager(); Class<?>[] types = new Class[] {Uri.class, IPackageInstallObserver.class, int.class, String.class}; Class<?>[] uninstalltypes = new Class[] {String.class, IPackageDeleteObserver.class, int.class}; method = pm.getClass().getMethod("installPackage", types); uninstallmethod = pm.getClass().getMethod("deletePackage", uninstalltypes); }
@Override public void call(Subscriber<? super Void> subscriber) { final IPackageInstallObserver.Stub silentObserver = new IPackageInstallObserver.Stub() { @Override public void packageInstalled(String packageName, int returnCode) throws RemoteException { if (returnCode == INSTALL_SUCCEEDED) { if (!subscriber.isUnsubscribed()) { subscriber.onNext(null); subscriber.onCompleted(); } } else { if (!subscriber.isUnsubscribed()) { subscriber.onError( new InstallationException("Package not installed with error code: " + returnCode)); } } } }; if (isSystem(context)) { try { Method installPackage = packageManager.getClass() .getMethod("installPackage", Uri.class, IPackageInstallObserver.class, int.class, String.class); Object[] params = new Object[] { packageUri, silentObserver, INSTALL_REPLACE_EXISTING, "" }; installPackage.invoke(packageManager, params); } catch (Exception e) { if (!subscriber.isUnsubscribed()) { subscriber.onError(new InstallationException(e)); } } } else { if (!subscriber.isUnsubscribed()) { subscriber.onError(new InstallationException("Aptoide does not hold system privilege!")); } } }
public ApplicationManager(Context context) throws SecurityException, NoSuchMethodException { observer = new PackageInstallObserver(); pm = context.getPackageManager(); // 파라미터 설정 Class<?>[] types = new Class[]{Uri.class, IPackageInstallObserver.class, int.class, String.class}; // installPackage 이름 붙은거와 위 types 라는 파라미터를 담은 메소드를 찾음 method = pm.getClass().getMethod("installPackage", types); }
public static void installPackage(Context paramContext, Uri paramUri, PackageInstallObserver paramPackageInstallObserver, int paramInt) { IPackageInstallObserver.Stub local1 = new IPackageInstallObserver.Stub() { public final void packageInstalled(String paramAnonymousString, int paramAnonymousInt) { if (this.val$observer != null) { this.val$observer.packageInstalled(paramAnonymousString, paramAnonymousInt); } } }; try { Class[] arrayOfClass = new Class[4]; arrayOfClass[0] = Uri.class; arrayOfClass[1] = IPackageInstallObserver.class; arrayOfClass[2] = Integer.TYPE; arrayOfClass[3] = String.class; Method localMethod = PackageManager.class.getMethod("installPackage", arrayOfClass); PackageManager localPackageManager = paramContext.getPackageManager(); Object[] arrayOfObject = new Object[4]; arrayOfObject[0] = paramUri; arrayOfObject[1] = local1; arrayOfObject[2] = Integer.valueOf(paramInt); arrayOfObject[3] = "com.android.vending"; localMethod.invoke(localPackageManager, arrayOfObject); return; } catch (NoSuchMethodException localNoSuchMethodException) { FinskyLog.d("Cannot install packages on this platform", new Object[0]); return; } catch (SecurityException localSecurityException) { FinskyLog.wtf(localSecurityException, "Cannot install packages due to security exception", new Object[0]); return; } catch (IllegalAccessException localIllegalAccessException) { FinskyLog.wtf(localIllegalAccessException, "Cannot install packages due to reflection access exception", new Object[0]); return; } catch (InvocationTargetException localInvocationTargetException) { FinskyLog.wtf(localInvocationTargetException, "Cannot install packages due to reflection invocation exception", new Object[0]); } }
@Override public void installPackage(Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName) { }
@Override public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName, Uri verificationURI, ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) { }
@Override public void installPackageWithVerificationAndEncryption(Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName, VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) { }