我试图使一个简单的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安装-r自己从终端然后一切工作正常)。
找遍了周围的计算器,但只找到线程从一个Android应用程序中安装的APK,而不是从桌面Java应用程序。
谢谢您的帮助;
编辑:新的代码现在看起来是这个样子的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文件的心不是可用。 我也得到了同样的结果,如果我试图用一个APK比我700MB的应用程序要小得多(如在一个500KB的apk给出相同的结果)。
EDIT3:我也试图改变命令推APK和它的作品没有错误,APK将推没有问题/mnt/sdcard/test/1.apk。
安迪