jing_install
静默安装与卸载
Android实现静默卸载与安装
静默安装简介:一般情况下,Android系统安装apk会出现一个安装界面,用户可以点击确定或者取消来进行apk的安装。
但在实际的项目需求中,有一种需求,就是希望apk在后台安装(不出现安装界面的提示),这种安装方式称为静默安装。
以下用两张方式实现静默安装与卸载:
一、PM命令实现静默安装与卸载
注:这种方法需要root权限
直接adb shell 命令卸载应用
adb shell pm uninstall -k (应用包名)
adb shell pm install -r (apk路径)
在Android程序代码中实现pm
Runtime.getRuntime().exec("sh");// 申请root权限
Runtime.getRuntime().exec("pm uninstall -k uninstallPackageName")//卸载
Runtime.getRuntime().exec("pm install -r unstallapkPath")//安装
安装可选的参数:
参数说明
-l锁定应用程序
-r重新安装应用,且保留应用数据
-t允许测试apk被安装
-i 指定安装包的包名
-s安装到sd卡
-f安装到系统 内置存储中(默认安装位置)
-d允许降级安装(同一应用低级换高级)
-g授予应用程序清单中列出的所有权限(只有6.0系统可用)
卸载可选的参数:
参数说明
-k卸载应用且保留数据与缓存(如果不加-k则全部删除)
声明权限:
在Manifest文件中加入如下语句:
二、调用PackageInstaller接口实现静默安装与卸载
注:需要系统签名
实现原理
android自带了一个安装程序—/system/app/PackageInstaller.apk.大多数情况下,我们手机上安装应用都是通过这个apk来安装的。.我们在应用程序中控制安装应用APP,其实就是发送一个如下的intent。去调用packageinstaller进行安装,具体的操作代码如下:
/* 安装apk */
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.parse("file://"+ fileName),
"application/vnd.android.package-archive");
context.startActivity(intent);
对比应用正常安装的流程,静默安装的本质就是去掉如下图