system app 静默安装

静默安装

Posted by qkmin on October 9, 2018

前言

最近用到静默安装,在这里记录一下。

常见安装

调用系统PackageInstaller安装,7.0以下版本


  Intent intent = new Intent();
  intent.setAction(Intent.ACTION_VIEW);
  intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  context.startActivity(intent);

Root后执行shell命令安装

"pm install -r  /sdcard/new.apk"
"cp /sdcard/new.apk /data/app"

System app静默安装

使用PackageManager.installPackage(),需要系统权限

 public abstract void installPackage(
            Uri packageURI, IPackageInstallObserver observer, int flags,
            String installerPackageName);

packageURI是apk的路径uri,observer是安装完成后的回调,flags有以下标准,1是普通,2是覆盖,4是测试的apk;installerPackageName 是安装的包名

 public static final int INSTALL_FORWARD_LOCK = 0x00000001;
 public static final int INSTALL_REPLACE_EXISTING = 0x00000002;
 public static final int INSTALL_ALLOW_TEST = 0x00000004;

IPackageInstallObserver可以写个类继承

static class PackageInstallObserver extends IPackageInstallObserver.Stub {
		public void packageInstalled(String packageName, int returnCode) {
		}
	}

最后别忘记加权限

<uses-permission android:name="android.permission.INSTALL_PACKAGES" />

通过adb协议实现静默安装

app和127.0.0.1:5555 会建立连接,模拟adb 命令就能实现静默安装,在4.4.2可以,其他版本未试