文/洪生鹏
今天在手机自带的应用商店下载一个应用,下载完后不用点击就悄然无息就自动安装了,发现使用的静默安装应用程序,很有意思,个人感觉体验还不错,从下载到安装这个过程,只需要打开就可以了。
下面我们看的基于手机root的情况下如何实现静默安装应用。
静默安装、卸载的原理其实就是利用pm install命令来安装apk,pm uninstall 来卸载apk。
我们来先来看pm install 命令的用法及参数说明:
pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH
Options:
-l: install the package with FORWARD_LOCK.
-r: reinstall an exisiting app, keeping its data.
-t: allow test .apks to be installed.
-i: specify the installer package name.
-s: install package on sdcard.
-f: install package on internal flash.
卸载的参数的用法
pm uninstall 命令的用法及参数说明:
pm uninstall [-k] PACKAGE
Options:
-k: keep the data and cache directories around.
为了方便测试,我把应用宝的安装包yingyongbao.apk后放在本地上。如图:
/**
* 静默安装 需要注意的是手机需要root权限
*/
private String silenceInstall() {
String cmd = "pm install -r /storage/emulated/0/download/yingyongbao.apk";
Process process = null;
DataOutputStream os = null;
BufferedReader successResult = null;
StringBuilder successMsg = null;
try {
process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutputStream());
os.write(cmd.getBytes());
os.writeBytes("\n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();
successMsg = new StringBuilder();
successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));
String s;
while ((s = successResult.readLine()) != null) {
successMsg.append(s);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (os != null) {
os.close();
}
if (process != null) {
process.destroy();
}
if (successResult != null) {
successResult.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return successMsg.toString();
}
我们来简单了解这段代码,下在程序中执行pm命令和在adb下执行 pm install -r /storage/emulated/0/download/yingyongbao.apk
其实效果是一样的, 需要注意的是Runtime.getRuntime().exec(“su”)
需要获取root权限,手机必须root,我这里是在模拟器中运行的。用Runtime.getRuntime().exec(“su”)
获取到 process 对象写入命令,每写入一条命令 ‘\n’ 即可,后写入exit后离开命令执行的环境。
效果:
当我们执行silenceInstall()方法后,会出现
选择允许后,应用宝就静默安装成功了。
这样我们就实现了 在手机root的情况下 静默情况下安装应用程序了。
PS:发现在没有root过的手机,应用商店也实现了静默安装,不知是如何做到的。
[END]
我是洪生鹏
热衷旅行、写作,目前白天到工地搬砖、晚上写故事。
如果你喜欢今天的文章,猜你喜欢: