Android静默安装和智能安装的实现方法

  

  

最近研究了Android的静默安装和智能安装,于是写博客记录一下。静默安装就是无声无息的在后台安装apk,没有任何界面提示。智能安装就是有安装界面,但全部是自动的,不需要用户去点击。
  

  

首先强调两点:静默安装必须要根权限智能安装必须要用户手动开启无障碍服务

  

  

静默安装、卸载的原理就是利用点安装命令来安装apk,点卸载来卸载apk。智能安装是利用android系统提供的无障碍服务AccessibilityService,来模拟用户点击,从而自动安装。

  

  

<强>(1)点安装

  

点安装命令的用法及参数解释如下:

        & lt;代码类=" hljs haml "祝辞点安装(- l) (- r) [t][我INSTALLER_PACKAGE_NAME] [s] [f]路径   选项:   与FORWARD_LOCK - l:安装包。   - r:重新安装一个现有应用程序,使其数据。   - t:允许测试. apk被安装。   我:指定安装程序包名称。   s:安装包>   & lt;代码类=" hljs livecodeserver”祝辞点卸载(- k)包   选项:   - k:保持数据和缓存目录。;/code>      

上面英语很简单,不解释了。

  

  

为了方便演示,我把爱奇艺的安装包重命名为test.apk后放在了sdcard上。你可以自己去爱奇艺官网去下载,也可以自己找一个apk放到sdcard上,但是要知道的apk的包名,后面卸载的时候要用到。

  

先上代码:

        & lt;代码类=" hljs cs "祝辞//静默安装   私人空间installSlient () {   字符串cmd="点安装- r/mnt/sdcard/test.apk”;   过程过程=零;   DataOutputStream os=零;   BufferedReader successResult=零;   BufferedReader errorResult=零;   StringBuilder successMsg=零;   StringBuilder errorMsg=零;   尝试{//静默安装需要根权限   过程=Runtime.getRuntime () .exec(“苏”);   操作系统=new DataOutputStream (process.getOutputStream ());   os.write (cmd.getBytes ());   os.writeBytes (“\ n”);   os.writeBytes(“退出\ n”);   os.flush ();//执行命令   process.waitFor ();//获取返回结果   successMsg=new StringBuilder ();   errorMsg=new StringBuilder ();   successResult=new BufferedReader(新InputStreamReader (process.getInputStream ()));   errorResult=new BufferedReader(新InputStreamReader (process.getErrorStream ()));   字符串年代;   而((s=successResult.readLine ()) !=null) {   successMsg.append(年代);   }   而((s=errorResult.readLine ()) !=null) {   errorMsg.append(年代);   }   }捕捉(异常e) {   e.printStackTrace ();   最后}{   尝试{   如果(os !=null) {   os.close ();   }   如果(过程!=null) {   process.destroy ();   }   如果(successResult !=null) {   successResult.close ();   }   如果(errorResult !=null) {   errorResult.close ();   }   }捕捉(异常e) {   e.printStackTrace ();   }   }//显示结果   tvt。setText(“成功消息:“+ successMsg.toString () +“\ n”+“错误消息:“+ errorMsg.toString ());   }& lt;/code>      

这段代码就是在程序中执行点命令,和在亚洲开发银行下执行<代码>点安装- r/mnt/sdcard/测试。apk> Runtime.getRuntime () .exec (su)>   

通过<代码> Runtime.getRuntime () .exec (su) 获取到过程对象后就可以写入命令了,每写入一条命令就要换行,写入“\ n”即可,最后写入退出后离开命令执行的环境。

  

  

静默卸载和静默安装是一样的,只是命令不同,静默卸载需要用到包名,同样,静默卸载也需要根权限
  看代码:

        & lt;代码类=" hljs java "祝辞//爱奇艺的apk的包名   私有静态最终字符串PACKAGE_NAME=癱om.qiyi.video”;//静默卸载   私人空间uninstallSlient () {   字符串cmd=暗阈对亍? PACKAGE_NAME;   过程过程=零;   DataOutputStream os=零;   BufferedReader successResult=零;   BufferedReader errorResult=零;   StringBuilder successMsg=零;   StringBuilder errorMsg=零;   尝试{//卸载也需要根权限   过程=Runtime.getRuntime () .exec(“苏”);   操作系统=new DataOutputStream (process.getOutputStream ());   os.write (cmd.getBytes ());   os.writeBytes (“\ n”);   os.writeBytes(“退出\ n”);   os.flush ();//执行命令   process.waitFor ();//获取返回结果   successMsg=new StringBuilder ();   errorMsg=new StringBuilder ();   successResult=new BufferedReader(新InputStreamReader (process.getInputStream ()));   errorResult=new BufferedReader(新InputStreamReader (process.getErrorStream ()));   字符串年代;   而((s=successResult.readLine ()) !=null) {   successMsg.append(年代);   }   而((s=errorResult.readLine ()) !=null) {   errorMsg.append(年代);   }   }捕捉(异常e) {   e.printStackTrace ();   最后}{   尝试{   如果(os !=null) {   os.close ();   }   如果(过程!=null) {   process.destroy ();   }   如果(successResult !=null) {   successResult.close ();   }   如果(errorResult !=null) {   errorResult.close ();   }   }捕捉(异常e) {   e.printStackTrace ();   }   }//显示结果   tvt。setText(“成功消息:“+ successMsg.toString () +“\ n”+“错误消息:“+ errorMsg.toString ());   }& lt;/code>

Android静默安装和智能安装的实现方法