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

时间:2016-03-06 07:52:20

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

我正在尝试将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() + "\"");

3 个答案:

答案 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)

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

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

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

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

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

    ii。将其另存为xyz.bat,然后窗口系统会将其视为批处理文件

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

    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是我要打开的活动包名称

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

    }

}