繁体   English   中英

在Linux上使用Java程序通过ADB在Android设备上安装APK

[英]Installing apk on android device via ADB with Java program on Linux

我试图通过Java程序在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);
    }
}

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

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

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

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

    一世。 打开文本编辑器记事本或记事本++

    ii。 将其另存为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

    ii。 com.xyz.app是一个Android应用程序包名称,com.xyz.b2c.Activity.SplashScreen是一个我要打开的活动包名称

  5. 保存文件并关闭它,然后使用平台工具复制该文件并将其粘贴到目录中。 并且不要忘记将APK文件也放置在此目录中

cd进入platform目录,并运行以下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);
        }

    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM