繁体   English   中英

Java应用程序可在Android上安装APK

[英]Java Application to install APK on android

我正在尝试使用Java创建一个简单的应用程序,以在通过USB连接的Android设备上安装APK。 手动使用ABD,然后一切正常,但是我想在应用程序中提供一个简单的单击安装选项,但是由于某些原因,代码无法正常工作:

    try {
        abdsourcesync = apkpath;
        progress.setString("sync in progress");
        System.out.println("Starting Sync via adb with command " + "adb"
                + " install -r " + apkpath);

        Process process = Runtime.getRuntime().exec(
                "adb" + " install -r " + apkpath);
        InputStreamReader reader = new InputStreamReader(
                process.getInputStream());
        Scanner scanner = new Scanner(reader);
        scanner.close();
        int exitCode = process.waitFor();
        System.out.println("Process returned: " + exitCode);

该进程以状态141退出,但没有看到其他错误,但是在平板电脑上查看时,尚未安装.APK。 我已经检查以确保植根于设备上的空间并支持第三方应用程序等,因此我确定问题出在我的Java而不是android设备(正如我自己说的,如果我自己运行ADB install -r从终端,然后一切正常)。

我在stackoverflow周围进行了搜索,但是只发现了从Android应用程序而不是桌面Java应用程序安装APK的线程。

谢谢您的帮助;

编辑:现在,使用ProcessBuilder管理adb调用,新代码看起来像这样:

        try {
            abdsourcesync = apkpath;
            progress.setString("sync in progress");
            System.out.println("Starting Sync via adb with command " + "adb"
                    + " install -r " + apkpath);

            ProcessBuilder apksync = new ProcessBuilder("adb",  " install -r ",  apkpath);

            apksync = apksync.redirectErrorStream(true);
/*          Process process = Runtime.getRuntime().exec(
                    "adb" + " install -r " + apkpath);*/
            Process process = apksync.start();
            InputStreamReader reader = new InputStreamReader(
                    process.getInputStream());
            Scanner scanner = new Scanner(reader);
            scanner.close();
            int exitCode = process.waitFor();
            System.out.println("Process returned: " + exitCode);

apk同步立即失败,并且状态1返回控制台。

如果我手动指定apk位置

ProcessBuilder apksync = new ProcessBuilder("adb","install","/home/geeky/Desktop/1.apk");

然后我得到与原始代码相同的错误,该过程返回状态141,并在一段时间后完成同步过程,但是表上没有.apk。 如果尝试使用比我的700mb应用程序小得多的APK,我也会得到相同的结果(例如,在500kb .apk中给出的结果相同)。

EDIT3:我还尝试过更改命令来推送apk,并且该命令可以正常运行,而apk则可以推送到/mnt/sdcard/test/1.apk而不会出现问题。

安迪

我想这是因为您的Java应用程序无法解析adb二进制文件。 请尝试在您的环境变量中添加adb二进制文件,以便可以从任何位置进行访问。

尝试这个:

    ProcessBuilder pb = new ProcessBuilder("cmd","arg1");
pb = pb.redirectErrorStream(true);
    Process proc = pb.start();
    InputStream is = proc.getInputStream();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM