4

BusyBox コマンドで .apk をバックグラウンドでサイレント インストールしたい。THISのような同様の質問を見たことがありますが、それでもコードを適切に動作させることができません...

私は持っている:

  1. /sdcard/download/app.apk にインストールする必要がある私の .apk
  2. BusyBoxを搭載

コード (動かない):

String sss = Environment.getExternalStorageDirectory() + "/download/" + "app.apk";
Process install;
install = Runtime.getRuntime().exec("/system/xbin/busybox pm install " + sss); 
int success = install.waitFor();

「pm install」の代わりに「install」を使用すると、ファイルが適切にコピーされます。

上記の PS コードは AsyncTask で実行されています。エラーはありませんが、何も起こりません...助けてください!

また、これを試しましたが、終了値139が返され、結果が得られません:

        Process process;
        process = Runtime.getRuntime().exec("su");
        DataOutputStream os = new DataOutputStream(process.getOutputStream());
        os.writeBytes("pm install /mnt/sdcard/app.apk\n");
        os.flush();
        os.writeBytes("exit\n");
        os.flush();

        int i = process.waitFor();
4

3 に答える 3

1

adb install コマンドを使用するだけで、APK をサイレント モードでインストール/更新できます。サンプルコードは以下

public static void InstallAPK(String filename){
    File file = new File(filename); 
    if(file.exists()){
        try {   
            String command;
            filename = StringUtil.insertEscape(filename);
            command = "adb install -r " + filename;
            Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command });
            proc.waitFor();
        } catch (Exception e) {
        e.printStackTrace();
        }
     }
  }
于 2013-08-29T10:35:56.297 に答える
1

多くの Android デバイスで多くの調査を行った結果、このコードが正しく機能することがわかりました。

1 つのデバイス (Samsung Galaxy Tab 2 7.0 - 4.0.3 ICS) に問題がありました。多分それはICSのいくつかの奇妙な機能です。ファームウェアを 4.1.2 (Jelly Bean) に更新した後、問題は解決されました。

于 2013-02-27T15:36:07.243 に答える