Android笔记之利用系统权限下命令安装apk
来源:互联网 发布:《疯狂java讲义》 编辑:程序博客网 时间:2024/06/05 00:29
我们在定制Android系统的时候,应用商店是很重要的部分,市面上大部分的应用商店都采用了静默安装的方式来安装升级应用,这是怎么做到的呢?两点:
1.具有系统权限
2.使用pm install来安装
/** * 静默安装的实现类,调用install()方法执行具体的静默安装逻辑。 */ public class SilentInstall { /** * 执行具体的静默安装逻辑,需要手机ROOT。 * @param apkPath 要安装的apk文件的路径 * @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; } Log.d("TAG", "install msg is " + msg); // 如果执行结果中包含Failure字样就认为是安装失败,否则就认为安装成功 if (!msg.contains("Failure")) { result = true; } } catch (Exception e) { Log.e("TAG", e.getMessage(), e); } finally { try { if (dataOutputStream != null) { dataOutputStream.close(); } if (errorStream != null) { errorStream.close(); } } catch (IOException e) { Log.e("TAG", e.getMessage(), e); } } return result; } }
1 0
- Android笔记之利用系统权限下命令安装apk
- Android 使用系统限制的权限的apk应安装到 /system/app 目录下
- mac 使用命令下安装android apk
- Android下pm 命令详解 - 安装APK
- Android常用代码之普通及系统权限静默安装APK
- Android常用代码之普通及系统权限静默安装APK
- Android常用代码之普通及系统权限静默安装APK
- Android常用代码之普通及系统权限静默安装APK
- Android常用代码之普通及系统权限静默安装APK
- Android常用代码之普通及系统权限静默安装APK
- Android常用代码之普通及系统权限静默安装APK
- 利用adb命令安装apk
- Android apk获取系统权限
- Android APK 签名系统权限
- 如何利用root权限静默安装APK
- Android常用代码之APK root权限静默安装
- Android常用代码之APK root权限静默安装
- Android常用代码之APK root权限静默安装
- memset效率
- Project configuration is not up-to-date with pom.xml.
- Scala之Traits
- 缓解近视眼方法
- servlet中xml跟注解的区别
- Android笔记之利用系统权限下命令安装apk
- 路由引入(重分发)
- IntelliJ IDEA 2016注册方法和注册码
- LeetCode笔记:435. Non-overlapping Intervals
- CppSQLite3Statement用法和得到数据库表的某一字段的最大值或一张表数据的条数
- DriverManager.registerDriver(new com.mysql.jdbc.Driver())为什么Driver会创建两次
- java事务处理
- linux kernel 4.10.0-19-generic 解决vmware问题(略加修改)
- Windows10 Bugs Fix