0

我已经system app在.rooted/customizedAOSP 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 命令之后。

问题:

  1. 为什么会卡在那里?我不应该期望从输入流中读取一些东西吗?
  2. 即使我删除了 readLines,它也不起作用。文件系统没有重新挂载,文件显然没有被复制。为什么?
  3. 有没有办法避免superuser提示请求权限?我的应用程序必须在无屏幕系统上运行。我无法得到用户的确认。
  4. 有更好的方法来做我需要的事情吗?

谢谢

4

1 回答 1

0

有更好的方法来做我需要的事情吗?

复制 APK 不会安装它。使用pm而不是cp.

有没有办法避免超级用户提示要求权限?

这取决于su应用程序,因此如果您需要一个无需询问或记住权限即可自动授予权限的应用程序。

于 2015-03-26T15:01:06.727 回答