Android 静默安装应用程序

文/洪生鹏
今天在手机自带的应用商店下载一个应用,下载完后不用点击就悄然无息就自动安装了,发现使用的静默安装应用程序,很有意思,个人感觉体验还不错,从下载到安装这个过程,只需要打开就可以了。

《Android 静默安装应用程序》

下面我们看的基于手机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后放在本地上。如图:

《Android 静默安装应用程序》




/**
 * 静默安装 需要注意的是手机需要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()方法后,会出现

《Android 静默安装应用程序》 静默安装.jpg

选择允许后,应用宝就静默安装成功了。

《Android 静默安装应用程序》

这样我们就实现了 在手机root的情况下 静默情况下安装应用程序了。

PS:发现在没有root过的手机,应用商店也实现了静默安装,不知是如何做到的。

[END]

我是洪生鹏
热衷旅行、写作,目前白天到工地搬砖、晚上写故事。

如果你喜欢今天的文章,猜你喜欢:

为什么有的人工作多年还是老样子

如果你正处于焦虑,不妨看看这篇文章

怕出丑,只怕会错过更大的收获

能力不强时,请不要总是准时下班

你必须非常努力,才能看起来毫不费力

点赞