我已经system app
在.rooted/customized
AOSP Android
我可能需要从我的个人网站下载我的应用程序的新版本,并在 Android 系统上用新版本替换它。
这必须由应用程序本身自动完成,而不是使用 adb 命令手动完成。
我尝试了什么
假设我已经下载了我的 apk fpath
。
使用以下代码段,我尝试重新安装/system/
具有read/write
权限的文件夹,然后将我更新的 apk 移动到该文件夹上。
try {
String line;
Process p = Runtime.getRuntime().exec("su");
// open input/output facilities
OutputStreamWriter osw = new OutputStreamWriter(p.getOutputStream());
BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream()) );
// output the command
osw.write("mount -o rw,remount /system");
osw.flush();
// read the response
while ((line = in.readLine()) != null) {
Log.i("UPDATE", "output mount rw " + line);
}
// output the command
osw.write("cp " + fpath + " /system/app/myapp.apk");
osw.flush();
// read the response
while ((line = in.readLine()) != null) {
Log.i("UPDATE", "output cp " + line);
}
// output the command
osw.write("mount -o ro,remount system");
osw.flush();
// read the response
while ((line = in.readLine()) != null) {
Log.i("UPDATE", "output mount ro " + line);
}
} catch (Exception e) {
Log.e("UPDATE", "error in executing shell commands: " + e.getMessage());
}
这个片段卡在第一个 readLine 处,就在 mount 命令之后。
问题:
- 为什么会卡在那里?我不应该期望从输入流中读取一些东西吗?
- 即使我删除了 readLines,它也不起作用。文件系统没有重新挂载,文件显然没有被复制。为什么?
- 有没有办法避免
superuser
提示请求权限?我的应用程序必须在无屏幕系统上运行。我无法得到用户的确认。 - 有更好的方法来做我需要的事情吗?
谢谢