[英]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");
因為你不想要shell
但pull
.
感謝這里的樂於助人的人,我終於讓它工作了。 我首先需要將 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.