实现静默安装APK的方法
2024-08-30 18:11:59
需要满足的条件:
内置到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;
}
}
最新文章
- java程序性能优化
- 【Java 基础篇】【第二课】基本数组类型
- 我眼中BA(业务需求分析师)的技能广度和深度
- Visual Studio2015 Community一些必备插件
- OGG &;quot;Loading data from file to Replicat&;quot;table静态数据同步配置过程
- supervisor 安装配置
- 三种方法实现PCA算法(Python)
- CentOS 6 RPM安装包下载地址
- 【css】常用css
- Python全栈开发之路 【第六篇】:Python基础之常用模块
- eclipse中tomcat可以start启动,无法debug启动的解决
- laravel创建资源路由控制器
- ubuntu 17.10 安装后的应用软件安装
- SQL实用札记【SQL Sever篇】
- [转帖]SQLSERVER 查看服务器信息的命令
- Active Directory PowerShell模块收集AD信息
- Docker学习笔记(一):在本地安装和配置Docker
- sql server获取插入记录后的ID
- 【BZOJ】2406 矩阵
- Oracle初始安装内存设置参考
热门文章
- python014 Python3 迭代器与生成器
- Oracle中有关字符串操作的语法
- Leetcode 309.最佳买卖股票时机含冷冻期
- 【思维+贪心】codeforces Game of the Rows
- windows下安装使用WGET
- Codeforces Round #296 (Div. 2) C. Glass Carving [ set+multiset ]
- django学习之- Ajax
- django学习之- Models笔记
- POJ 1470 Closest Common Ancestors【LCA Tarjan】
- 洛谷—— P1785 漂亮的绝杀