【问题标题】:Installing apk on android device via ADB with Java program on Linux在 Linux 上使用 Java 程序通过 ADB 在 android 设备上安装 apk
【发布时间】:2024-01-07 21:57:01
【问题描述】:

我正在尝试使用 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 = chooser.getSelectedFile()
  • 你有一个空文件...File file = new File("");你为什么不使用文件选择器中的那个?
  • 还是不行@ritesht93
  • 还是不行@cricket_007

标签: java android linux adb android-sdk-tools


【解决方案1】:

换行

File file = new File("");

File file = chooser.getSelectedFile();

另外,别忘了检查

if(file.exists()) {

验证文件。

【讨论】:

  • 我试过了,还是不行,请问还有什么建议吗?
【解决方案2】:

我自己弄明白了,代码如下:

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

【讨论】:

    【解决方案3】:

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

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

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

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

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

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

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

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

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

      我。 b2c.apk 是我想在手机上安装的 android APK

      二。 com.xyz.app 是 android 应用程序包名,com.xyz.b2c.Activity.SplashScreen 是我要打开的活动包名

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

    【讨论】:

    • 这太复杂了。如果 Android SDK 与平台工具一起安装,/path/to/the/sdk/platform-tools 可以添加到 PATH 中,效果相同 - 并在全局范围内工作。
    • 是的,你可以添加与android studio一起的路径,但是在这个java程序中它得到了效果,你必须在你的批处理文件中添加更多的命令才能找到这个/ path/to/the/sdk/platform-tools 特定路径
    最近更新 更多