簡體   English   中英

在Java程序中使用adb pull命令

[英]Using ADB pull command in a Java program

我無法在 Java 中使用 ADB 命令。直接在命令行中輸入 adb 命令即可。 但是在 Java 中運行時,出現錯誤

Cannot run program "adb -s shell": CreateProcess error=2,file not found

從 Java 運行 Windows 命令行的正確語法是什么? adb 命令"adb devices"在 Java 應用程序中工作。 我嘗試運行的命令是"adb pull sdcard/Download/symmetri.txt C:/Users/myUsername/Downloads/Sources" ,它在命令提示符下有效,但在 Java 應用程序中無效。 我的代碼是:

public void FilePush() {
            try{

    String androidFilePath = "sdcard/Download/symmetri.txt ";
    String windowsFilePath = "C:\\Users\\myUsername\\Downloads\\Sources\"";

        List<String> cmd = new LinkedList<>();
        cmd.add("adb -s shell");
        cmd.add("adb");
        cmd.add("pull");
        cmd.add(androidFilePath);
        cmd.add(windowsFilePath);

        ProcessBuilder builder = new ProcessBuilder(cmd);
        builder.redirectErrorStream(true);
        Process p = builder.start();


    }
catch (IOException e) {
        e.printStackTrace();
    }
    }

我也試過沒有adb -s shell"

String androidFilePath = "\"/storage/sdcard0/Download/symmetri.txt\"";
String windowsFilePath = "\"C:\\Users\\myUsername\\Downloads\\Sources\\"";

但是得到了同樣的錯誤

刪除線

cmd.add("adb -s shell");

因為你不想要shellpull .

感謝這里的樂於助人的人,我終於讓它工作了。 我首先需要將 adb,exe 作為命令運行。 在我可以運行任何 adb 命令之前。 我需要從命令列表中刪除("adb -s shell") 我試圖訪問外部存儲中的文件而不是需要 root 訪問的內部文件(盡管我不知道為什么我可以在命令提示符 window 中訪問完全相同的文件而不允許 root 訪問)。 如果要訪問外部文件,請添加 root 訪問權限

adb root

適用於可能面臨相同問題的任何人的完整代碼:

public void FilePush() {
        try{

        String androidFilePath = "/storage/emulated/0/Android/data/com.example.myapp/files/myfile.txt";

        String windowsFilePath = "C:\\Users\\myUsername\\Downloads\\Sources";

        List<String> cmd = new LinkedList<>();

        cmd.add("C:\\Users\\myUsername\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe");
        cmd.add("pull");
        cmd.add(androidFilePath);
        cmd.add(windowsFilePath);

        ProcessBuilder pb = new ProcessBuilder(cmd);
        pb.redirectErrorStream(true);
      

        String line = "null";



        pb.redirectErrorStream(true); // can use these 2 line if you want to see output or errors in file.
         pb.redirectOutput(new File("C:\\Users\\myUsername\\Downloads\\Sources\\logs.txt"));

        Process p = pb.start();

        while(p == null)
            Thread.sleep(1000);

        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));

        Pattern pattern = Pattern.compile("^([a-zA-Z0-9\\-]+)(\\s+)(device)");
        Matcher matcher;


        while ((line = in.readLine()) != null) {
            if (line.matches(pattern.pattern())) {
                matcher = pattern.matcher(line);
                if (matcher.find()) ;
            }

        }

    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM