4

我想通过 BusyBox 命令在后台静默安装 .apk。我已经看到了一些类似的问题,例如THIS,但我仍然无法正常工作我的代码......

我有:

  1. 我的 .apk 我需要安装在 /sdcard/download/app.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”,它会很好地复制文件。

上面的 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

3

也许这段代码会帮助你

Process p = null;
try
{
    p = Runtime.getRuntime().exec("su");
    DataOutputStream outs=new DataOutputStream(p.getOutputStream());

    String cmd="pm install /mnt/sdcard/app.apk";
    outs.writeBytes(cmd+"\n");
}
catch (IOException e)
{
    e.printStackTrace();
}
于 2013-10-04T12:20:27.557 回答
1

在对许多 android 设备进行大量调查后,我意识到这段代码是正确的并且有效!

一台设备(Samsung Galaxy Tab 2 7.0 - 4.0.3 ICS)出现了一些问题。也许这是 ICS 的一些奇怪特性。将固件更新到 4.1.2 (Jelly Bean) 后问题已解决。

于 2013-02-27T15:36:07.243 回答
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 回答