[英]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.