Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android通过busybox命令行静默安装apk_Android_Busybox_Android Install Apk - Fatal编程技术网

Android通过busybox命令行静默安装apk

Android通过busybox命令行静默安装apk,android,busybox,android-install-apk,Android,Busybox,Android Install Apk,我想通过BusyBox命令在后台静默安装.apk。我见过一些类似的问题,如,但我仍然无法正确地使用我的代码 我有: My.apk我需要安装在/sdcard/download/app.apk上 根 已安装BusyBox 代码(不工作): 如果我使用“安装”而不是“pm安装”,它可以很好地复制文件 上面的p.S.代码正在AsyncTask中执行。没有错误,但也没有发生任何事情。。。 请帮忙 我也试过了,但是我得到了退出值139,没有结果: Process process;

我想通过BusyBox命令在后台静默安装.apk。我见过一些类似的问题,如,但我仍然无法正确地使用我的代码

我有:

  • My.apk我需要安装在/sdcard/download/app.apk上
  • 已安装BusyBox
  • 代码(不工作):

    如果我使用“安装”而不是“pm安装”,它可以很好地复制文件

    上面的p.S.代码正在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();
    

    在对许多android设备进行了大量调查之后,我意识到这段代码是正确的,并且可以工作


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

    您只需使用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();
            }
         }
      }
    

    也许这段代码会对你有所帮助

    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();
    }
    

    应用程序无法安装其他应用程序。您需要使用root权限(su)执行install命令。这已经在您链接到您的问题的答案中提到。@Robert我只是在安装之前尝试执行su:install=Runtime.getRuntime().exec(“su”);它检查root权限,但不安装。apkIt通过PC ADB:1“ADB外壳”工作;2.“pm安装/mnt/sdcard/download/app.apk”。但我不能通过执行命令以编程方式重复它。我的Android操作系统是ICS。你的应用程序没有通过执行
    su
    获得root权限。您必须创建一个包含su和您的命令的命令行:
    su-c“pm install…”
    @Robert我理解这一点,但我不能编写正确的命令。你能帮助我吗?我试过:process=Runtime.getRuntime().exec(“su”);os.writeBytes(“pm安装/mnt/sdcard/app.apk\n”);但是它不起作用。请,您能发布StringUtil.insertEscape(文件名)实现吗?您能解释一下哪些代码对您有效吗?如果可能的话,你能发布工作代码吗?
    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();
    }