使用 Linux 上的 Java 程序通过 ADB 在 android 设备上安装 apk

Installing apk on android device via ADB with Java program on Linux

我正在尝试通过 Linux 上的 java 程序将 Java 的内置文件管理器的路径传递给 ADB,以便在 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() + "\"");

换行

File file = new File("");

File file = chooser.getSelectedFile();

另外,别忘了查看

if(file.exists()) {

验证文件。

我自己弄明白了,这里是代码:

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);
    }
}

我花了一周的时间为 window 系统完成相同的任务我找到了一个简单的解决方案来完成这个任务,以下是我在我的项目中应用的一些步骤

  1. 第一步是从 this URL 下载 ADB 工具(称为平台工具),并将下载的文件解压缩到您的工作区目录中。

  2. 打开平台工具下载到的目录

  3. 如果您不知道如何创建批处理文件,请按照以下步骤创建批处理文件

    我。打开你的文本编辑器记事本或记事本++

    二。将其保存为 xyz.bat 然后它将被 window 系统视为批处理文件

  4. 在文本编辑器中打开批处理文件并粘贴以下命令

    adb install "b2c.apk" && adb shell am start -n com.xyz.app/com.xyz.b2c.Activity.SplashScreen**
    

    (这里有两条ADB命令,用&符号分隔。 第一个命令用于在 Android 设备中安装 APK 第二个是打开应用程序)

    我。 b2c.apk 是我要安装在 phone

    上的 android APK

    二。 com.xyz.app 是一个 android 应用程序包名称, com.xyz.b2c.Activity.SplashScreen 是一个 activity 我要打开的包名称

  5. 保存文件并关闭,然后复制该文件并将其粘贴到带有平台工具的目录中。并且不要忘记将您的 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);
        }

    }

}