我想在Java中做一個簡單的應用程序來在通過USB連接的android設備上安裝APK。使用ABD手動然後一切工作正常,但我想給一個簡單的單按鈕,單擊我的應用程序中的安裝選項,但由於某些原因的代碼心不是工作:Java應用程序在android上安裝APK
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管理亞行呼籲:
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中給出相同的結果)。編輯3:我也嘗試改變命令來推動apk,它沒有錯誤,它會毫無問題地推送到/mnt/sdcard/test/1.apk。
安迪
任何人都能夠提供對這個問題有所幫助? – andy