Android静默安装一(Root版)

	近期开发上线一个常驻app,项目已上线,今天随笔记录一下静默安装相关内容。我分三篇静默安装(root版)、静默安装(无障碍版)、监听系统更新、卸载、安装。
	先说说我的项目需求:要求app一直运行,通过指令进行自动安装并在安装成功后自动开启。行业人事都了解,非root权限不可能无声无息的完成此要求。我分两步完成了此功能开发。今天记录一下root权限下实现静默安装app。
	本文使用RunTime执行pm install安装指定文件。
	一、获取权限

```java

public class SilentInstall {

    
    /**
     * root权限下,静默安装apk
     * @param apkPath 目标文件
     * @return true 安装成功; false 安装失败
     */
    public boolean install(String apkPath) {

        boolean result =false;
        DataOutputStream dataOutputStream =null;
        BufferedReader errorStream =null;
        try{
            // 申请su权限
            Process process = Runtime.getRuntime().exec("su");
            dataOutputStream =new DataOutputStream(process.getOutputStream());
            // 执行pm install命令
            String command ="pm install -r "+ apkPath +"\n";
            dataOutputStream.write(command.getBytes(Charset.forName("utf-8")));
            dataOutputStream.flush();
            dataOutputStream.writeBytes("exit\n");
            dataOutputStream.flush();
            process.waitFor();
            errorStream =new BufferedReader(new InputStreamReader(process.getErrorStream()));
            String msg ="";
            String line;
            // 读取命令的执行结果
            while((line = errorStream.readLine()) !=null) {
                msg += line;
            }
            // 如果执行结果中包含Failure字样就认为是安装失败,否则就认为安装成功
            if(!msg.contains("Failure")) {
                result =true;
            }
        }catch(Exception e) {
            Log.e("install",e.getMessage(),e);
        }finally{
            try{
                if(dataOutputStream !=null) {
                    dataOutputStream.close();
                }
                if(errorStream !=null) {
                    errorStream.close();
                }
            }catch(IOException e) {
                Log.e("install",e.getMessage(),e);
            }
        }
        return result;

    }

}

调用

				if (!new SilentInstall().install(absolutePath)) {
                  		// 调用系统安装方法
                            Intent install = new Intent(Intent.ACTION_VIEW);
                            Uri uri = Uri.fromFile(new File(apkPath));
                            install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            install.setDataAndType(uri,
                                    "application/vnd.android.package-archive");
                            context.startActivity(install);
                        }

有root权限时,使用静默安装。没有权限时使用系统安装方法。
但是使用系统安装方法,明显时不符合项目需要的。所以我使用无障碍服务,辅助系统安装方法完成无操作安装。

下篇使用静默安装成功后应用自启动。欢迎各位同学指导……

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值