我正在尝试将Java的内置文件管理器中的路径传递给ADB,使用Linux上的java程序在Android设备上安装apk。执行代码时,使用文件管理器选择的apk永远不会安装。
以下是代码:
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"APK Files", "apk");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(getParent());
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You choose to open this file: " + chooser.getSelectedFile().getName());
File file = new File("");
System.out.println(file.getAbsolutePath().toString());
try {
Process p1 = Runtime.getRuntime().exec("adb kill-server"); //for killing old adb instance
Process p2 = Runtime.getRuntime().exec("adb start-server");
Process p3 = Runtime.getRuntime().exec("adb install \"" + file.getAbsolutePath() + "\"");
p3.waitFor();
Process p4 = Runtime.getRuntime().exec("adb kill-server");
} catch (Exception e1) {
System.err.println(e1);
}
以下代码应安装apk:
Process p3 = Runtime.getRuntime().exec("adb install \"" + file.getAbsolutePath() + "\"");
答案 0 :(得分:1)
更改行
File file = new File("");
到
File file = chooser.getSelectedFile();
另外,不要忘记检查
if(file.exists()) {
验证文件。
答案 1 :(得分:1)
我自己想出来了,这是代码:
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("APK Files", "apk");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(getParent());
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
String filename = chooser.getSelectedFile().getName();
try {
String[] commands = new String[3];
commands[0] = "adb";
commands[1] = "install";
commands[2] = file.getAbsolutePath();
Process p1 = Runtime.getRuntime().exec(commands, null);
p1.waitFor();
} catch (Exception e1) {
System.err.println(e1);
}
}
答案 2 :(得分:0)
我花了一个星期的时间来完成与窗口系统相同的任务,我找到了一个简单的解决方案来完成此任务,这是我在项目中应用的以下一些步骤
第一步是从this URL下载ADB工具(称为平台工具),并将下载的文件提取到您的工作区目录中。
打开将平台工具下载到的目录
如果您不知道如何创建批处理文件,请按照以下步骤创建批处理文件
i。打开文本编辑器记事本或记事本++
ii。将其另存为xyz.bat,然后窗口系统会将其视为批处理文件
在文本编辑器中打开批处理文件,然后粘贴以下命令
adb install "b2c.apk" && adb shell am start -n com.xyz.app/com.xyz.b2c.Activity.SplashScreen**
(这里有两个ADB命令,它们之间用&符号隔开。 第一个命令是在Android设备上安装APK 第二个是打开应用程序)
i。 b2c.apk是我要安装在手机上的android APK
ii。 com.xyz.app是android应用程序包名称,com.xyz.b2c.Activity.SplashScreen是我要打开的活动包名称
保存文件并关闭它,然后使用平台工具复制该文件并将其粘贴到目录中。并且不要忘记将APK文件也放置在此目录中
cd
进入平台目录,然后运行以下Java程序:
import java.io.DataInputStream;
import java.io.File;
import java.io.InputStreamReader;
import java.util.Scanner;
public class TestClass {
static int progress = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
String ls_str;
Process p = Runtime.getRuntime().exec("cmd /c xyz.bat", null, new File("E:\\Arun_Java_Workspace\\TestApplication\\platform-tools"));
DataInputStream ls_in = new DataInputStream(
p.getInputStream());
while ((ls_str = ls_in.readLine()) != null) {
System.out.println(ls_str);
}
} catch (Exception e) {
System.out.println("Exception e: " + e);
}
}
}