簡體   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