需要满足的条件:

内置到ROM。即APK包的安装位置是/system/app下。

下面以 test.apk 为例,演示这个操作。需要准备一台已经获得 Root 权限的手机。

  1、通过 USB 连接手机和电脑。

  2、使用 adb 控制手机。

  1. $ adb push test.apk /sdcard/ // 上传要安装的文件,为安装做准备。
  2. $ adb shell
  3. $ su // 切换到 root 用户。如果没有获得 Root 权限,这一步不会成功。
  4. # mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system // 让分区可写。
  5. # cat /sdcard/test.apk > /system/app/test.apk // 这一步可以用 cp 实现,但一般设备中没有包含该命令。如果使用 mv 会出现错误:failed on '/sdcard/NetWork.apk' - Cross-device link。
  6. # mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system // 还原分区属性,只读。
  7. # exit
  8. $ exit

代码如下:

package aax.b.activity;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream; public class ApkInstall { /**
* 代码执行后,如果安装成功的话获取到的result值是
* “ pkg: /data/local/tmp/Calculator.apk /nSuccess”,
* 如果是失败的话,则没有结尾的“Success”。
* @param apkAbsolutePath
* @return
*/
public static String quietInstall(String apkAbsolutePath) {
String[] args = { "pm", "install", "-r", apkAbsolutePath };
String result = "";
ProcessBuilder processBuilder = new ProcessBuilder(args);
Process process = null;
InputStream errIs = null;
InputStream inIs = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int read = -1;
process = processBuilder.start();
errIs = process.getErrorStream();
while ((read = errIs.read()) != -1) {
baos.write(read);
}
// baos.write('/n');
inIs = process.getInputStream();
while ((read = inIs.read()) != -1) {
baos.write(read);
}
byte[] data = baos.toByteArray();
result = new String(data);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (errIs != null) {
errIs.close();
}
if (inIs != null) {
inIs.close();
}
} catch (IOException e) {
e.printStackTrace();
}
if (process != null) {
process.destroy();
}
}
return result;
}
}

最新文章

  1. java程序性能优化
  2. 【Java 基础篇】【第二课】基本数组类型
  3. 我眼中BA(业务需求分析师)的技能广度和深度
  4. Visual Studio2015 Community一些必备插件
  5. OGG "Loading data from file to Replicat"table静态数据同步配置过程
  6. supervisor 安装配置
  7. 三种方法实现PCA算法(Python)
  8. CentOS 6 RPM安装包下载地址
  9. 【css】常用css
  10. Python全栈开发之路 【第六篇】:Python基础之常用模块
  11. eclipse中tomcat可以start启动,无法debug启动的解决
  12. laravel创建资源路由控制器
  13. ubuntu 17.10 安装后的应用软件安装
  14. SQL实用札记【SQL Sever篇】
  15. [转帖]SQLSERVER 查看服务器信息的命令
  16. Active Directory PowerShell模块收集AD信息
  17. Docker学习笔记(一):在本地安装和配置Docker
  18. sql server获取插入记录后的ID
  19. 【BZOJ】2406 矩阵
  20. Oracle初始安装内存设置参考

热门文章

  1. python014 Python3 迭代器与生成器
  2. Oracle中有关字符串操作的语法
  3. Leetcode 309.最佳买卖股票时机含冷冻期
  4. 【思维+贪心】codeforces Game of the Rows
  5. windows下安装使用WGET
  6. Codeforces Round #296 (Div. 2) C. Glass Carving [ set+multiset ]
  7. django学习之- Ajax
  8. django学习之- Models笔记
  9. POJ 1470 Closest Common Ancestors【LCA Tarjan】
  10. 洛谷—— P1785 漂亮的绝杀