Android静默安装软件app代码(测试可用)

android手机在获得root权限之后,可以调用命令的方式静默安装软件,这一点体验是很不错,但是目前网络上关于android静默安装app的代码均出自一人之手,其中有一个非常sb的bug,借用代码的人居然都没有发现,导致网络上几乎所有关于android app静默安装的代码都是错误的。

 代码如下 复制代码

new Thread() { 
    public void run() { 
    Process process = null; 
    OutputStream out = null; 
    InputStream in = null; 
    try { 
    // 请求root 
    process = Runtime.getRuntime().exec("su");  
    out = process.getOutputStream(); 
    // 调用安装 
    out.write(("pm install -r " + currentTempFilePath + "
").getBytes()); 
    in = process.getInputStream(); 
    int len = 0; 
    byte[] bs = new byte[256]; 
    while (-1 != (len = in.read(bs))) { 
        String state = new String(bs, 0, len); 
        if (state.equals("Success
")) { 
           //安装成功后的操作 
         } 
       } 
    } catch (IOException e) { 
        e.printStackTrace(); 
    } catch (Exception e) { 
        e.printStackTrace(); 
    } finally { 
        try { 
            if (out != null) { 
                out.flush(); 
                out.close(); 
            } 
            if (in != null) { 
                in.close(); 
            } 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
  } 
}.start();

这个代码实际上也可以运行起来,在root的手机中,也可以静默安装成功,但是代码有问题就是bug,不知道哪一天这个有问题的代码就会出现错误

下面是修改之后的代码,修改了上面的bug

 代码如下 复制代码

new Thread() {
    public void run() {
        Process process = null;
        OutputStream out = null;
        InputStream in = null;
        try {
            // 请求root
            process = Runtime.getRuntime().exec("su");
            out = process.getOutputStream();
            // 调用安装
            System.out.println(apkFile.getAbsolutePath());
            out.write(("pm install -r " + apkFile.getAbsolutePath() + "
").getBytes());
            in = process.getInputStream();
            int len = 0;
            int readLen = 0;
            byte[] bs = new byte[256];
            //读出所有的输出数据
            while (-1 != (readLen = in.read(bs))) {
                len = len + readLen;
                //如果读的数据大于缓存区。则停止
                if (len > bs.length) {
                    len -= readLen;
                    break;
                }
            }
            String state = new String(bs, 0, len);
            if (state.startsWith("Success")) {
            // 安装成功后的操作
            } 
             else {
                //静默安装失败,使用手动安装
                installByUser();
            } 
         } catch (IOException e) {
             e.printStackTrace();
         } catch (Exception e) {
            e.printStackTrace();
         } finally {
            try {
                if (out != null) {
                out.flush();
                out.close();
            }
            if (in != null) {
                in.close();
            }
            } catch (IOException e) {
            e.printStackTrace();
            }
        }
    }
}.start();

修改的地方就在于从输出流中读取输出数据,可以看出如果输出的数据大于缓存区大小(256),就会导致安装后的操作多次执行,上面这段错误的代码之所以可以运行,是在于输出流的输出为Success ,小于256,但是如果运行指令出错,返回一大推的错误,那么上面的那一段将读取所有的数据,读逐一进行比较。

时间: 2024-10-13 23:39:23

Android静默安装软件app代码(测试可用)的相关文章

Android静默安装实现方案 仿360手机助手秒装和智能安装功能_Android

之前有很多朋友都问过我,在Android系统中怎样才能实现静默安装呢?所谓的静默安装,就是不用弹出系统的安装界面,在不影响用户任何操作的情况下不知不觉地将程序装好.虽说这种方式看上去不打搅用户,但是却存在着一个问题,因为Android系统会在安装界面当中把程序所声明的权限展示给用户看,用户来评估一下这些权限然后决定是否要安装该程序,但如果使用了静默安装的方式,也就没有地方让用户看权限了,相当于用户被动接受了这些权限.在Android官方看来,这显示是一种非常危险的行为,因此静默安装这一行为系统是

BAT批处理全自动(静默)安装软件的方法

  这篇文章主要介绍了BAT批处理全自动(静默)安装软件的方法(包含4种常见安装包格式),本文讲解了常用应用软件的封装类型.测试方法与安装类型分析.在批处理文件中的要求等内容,需要的朋友可以参考下 利用批处理安装常用软件,我们需要对以下几个知识点进行掌握: 一.常用应用软件的封装类型: 1.installshield型: installshield是一款商业级别的安装程序封装工具,许多大型商业软件都用它进行封装.例如:macromedia flash. pgtoshop等 安装参数:-R 用于记

android静默安装问题,求大神们进来指点。

问题描述 android静默安装问题,求大神们进来指点. 最新公司需求写一个静默安装的功能,本人在网上找了很多代码,也都在root过的手机里面实验过.但是没有用现在贴上代码Process process = Runtime.getRuntime().exec(""sh""); DataOutputStream dos = new DataOutputStream(process.getOutputStream()); cmd = String.valueOf(cmd

Android 静默安装实现方法

Android静默安装的方法,静默安装就是绕过安装程序时的提示窗口,直接在后台安装. 注意:静默安装的前提是设备有ROOT权限. 代码如下: /** * 静默安装 * @param file * @return */ public boolean slientInstall(File file) { boolean result = false; Process process = null; OutputStream out = null; try { process = Runtime.ge

android 静默安装-android 定制系统下的静默安装

问题描述 android 定制系统下的静默安装 目前的要求是在ACER-Z120手机上(该手机应该是基于android 4.1.1的定制系统)实现软件的静默安装.就是我要写一个控制软件来下载被控制软件,下载完了静默安装被控制软件.我的控制软件要执行 pm install 命令是不是要先得到该操作系统的platform..pk8 platform.x509.pem signapk.jar三个文件,用命令来对我的控制软件进行签名,在安装进入该手机?整个过程这样对吗? 解决方案 放在/system/a

android --静默安装

[此篇文章为转载文章] 最近需要实现Android应用的静默安装,在网上看了不少帖子,最后在root权限下实现对应用的静默安装和卸载,现在就整个实现的过程做一个总结. 一.第一种方案第一种方案参考了源码中/packages/apps/PackageInstaller的实现方式,实现的主要代码如下: importjava.io.File; importjava.io.FileNotFoundException; importjava.io.FileOutputStream; importjava.

BAT批处理全自动(静默)安装软件的方法(包含4种常见安装包格式)_DOS/BAT

利用批处理安装常用软件,我们需要对以下几个知识点进行掌握: 一.常用应用软件的封装类型:    1.installshield型:    installshield是一款商业级别的安装程序封装工具,许多大型商业软件都用它进行封装.例如:macromedia flash. pgtoshop等    安装参数:-R   用于记录安装过程              -s 用于进行软件的自动安装              -f1 指定setup.iss应答文件的路径    使用方法: 1).先用在命令行

Android中安装软件到模拟器时提示:INSTALL_FAILED_INSUFFICIENT_STORAGE 解决办法

原文:http://hi.baidu.com/merry6046/blog/item/b36d15807b3fb3af6d811949.html 最近在用模拟器调试android项目时,频繁出现以下错误提示: Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE Please check logcat output for more details. Launch canceled! 也知道这是空间不够用,可是就是不知道怎么解决这个问题.

php zend解密软件绿色版测试可用_php技巧

 zend解密   php zend  我们WwW.DeZend.cc是一个专业对用Zend Encoder/SafeGuard, ionCube, SourceGuardian,phpcipher.codelock或SourceCop加密过的PHP文件进行破解的网站, 它主要运用密码分析.解压缩和反编译技术将经编码/加密过的PHP文件还原为可阅读.可执行的PHP源文件.网页版地址www.dezend.cc 绿色版zend解密工具下载