你好,游客 登录 注册 搜索
背景:
阅读新闻

在Android中静默安装应用

[日期:2013-05-23] 来源:Linux社区  作者:yutel [字体: ]

首先,说明,为了安全是无法在所有的Android 系统中进行静默安装的,我下面所讲的静默安装的前提是必须是系统的签名才行,好了,不多了,直接上代码。
 
第一步,添加一个安装回调接口

public interface OnInstalledPackaged {
 
 public void packageInstalled(String packageName, int returnCode);

}

第二步,定义一个系统不可见的接口IPackageInstallObserver,所以包名是不能变的

package android.content.pm;

public interface IPackageInstallObserver extends android.os.IInterface {
 
 public abstract static class Stub extends android.os.Binder implements android.content.pm.IPackageInstallObserver {
  public Stub() {
   throw new RuntimeException("Stub!");
  }

  public static android.content.pm.IPackageInstallObserver asInterface(android.os.IBinder obj) {
   throw new RuntimeException("Stub!");
  }

  public android.os.IBinder asBinder() {
   throw new RuntimeException("Stub!");
  }

  public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags)
    throws android.os.RemoteException {
   throw new RuntimeException("Stub!");
  }
 }

 public abstract void packageInstalled(java.lang.String packageName, int returnCode)
   throws android.os.RemoteException;
}

第三步,实现ApplicationManager功能

import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import android.content.Context;
import android.content.pm.IPackageInstallObserver;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.RemoteException;

public class ApplicationManager {
 public final int INSTALL_REPLACE_EXISTING = 2;
    public static final int INSTALL_SUCCEEDED = 1;

 private PackageInstallObserver observer;
 private PackageManager pm;
 private Method method;
 
 private OnInstalledPackaged onInstalledPackaged;
 
    class PackageInstallObserver extends IPackageInstallObserver.Stub {

  public void packageInstalled(String packageName, int returnCode) throws RemoteException {
   if (onInstalledPackaged != null) {
    onInstalledPackaged.packageInstalled(packageName, returnCode);
   }
  }
 }
 
 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};
  method = pm.getClass().getMethod("installPackage", types);
 }
 
 public void setOnInstalledPackaged(OnInstalledPackaged onInstalledPackaged) {
  this.onInstalledPackaged = onInstalledPackaged;
 }

 public void installPackage(String apkFile) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
  installPackage(new File(apkFile));
 }
 
 public void installPackage(File apkFile) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
  if (!apkFile.exists()) throw new IllegalArgumentException();
  Uri packageURI = Uri.fromFile(apkFile);
  installPackage(packageURI);
 }
 
 public void installPackage(Uri apkFile) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
  method.invoke(pm, new Object[] {apkFile, observer, INSTALL_REPLACE_EXISTING, null});
 }
 
}

linux
相关资讯       Android静默安装 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款