当前位置: 首页 > news >正文

Android静默安装一(Root版)

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

```javapublic 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权限时,使用静默安装。没有权限时使用系统安装方法。
但是使用系统安装方法,明显时不符合项目需要的。所以我使用无障碍服务,辅助系统安装方法完成无操作安装。

下篇使用无障碍服务进行无操作安装应用。欢迎各位同学指导……

http://www.lryc.cn/news/322220.html

相关文章:

  • 【漏洞复现】2.Apache Log4j2远程代码执行漏洞(CVE-2021-44228)复现及分析
  • Simulink|局部遮荫下光伏组件多峰值PSO-MPPT控制
  • 今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 3月21日,星期四
  • 蓝桥杯Python B组练习——完美的代价
  • 分布式游戏服务器
  • idea中常见快捷键及插件操作
  • 理解树的结构-算法通关村
  • 金融知识分享系列之:支撑阻力
  • 如何使用Excel创建一个物品采购表
  • 容器中的大模型(三)| 利用大语言模型:容器化高效地部署 PDF 解析器实践...
  • java采集小程序联合航空官方
  • 【力扣每日一题】lc1793. 好子数组的最大分数(单调栈)
  • ES的集群节点发现故障排除指南(1)
  • 使用html+css制作一个发光立方体特效
  • 贵州省二级分类土地利用数据(矢量)
  • 通过nginx+xray服务搭建及本地配置
  • 第一节 Axure RP产品经理原型进阶学习
  • Linux实战笔记(三) 文件压缩
  • 树形递归模板
  • Python实战:Pandas数据合并与重塑
  • 如何理解 Linux 命令行参数与环境变量7
  • 奥特曼回应GPT5
  • QT----给程序添加上任务栏托盘图标和退出
  • arm地址对齐的总结
  • 就业班 2401--3.13 走进网络
  • SWIFT介绍和学习(简单入门级别)
  • 智慧城市:提升城市治理能力的关键
  • golang 对接第三方接口 RSA 做签(加密) 验签(解密)
  • Spring Data访问Elasticsearch----Elasticsearch存储库Repositories
  • 初探 Cocos Creator: 碰撞与物理系统