#java #sqlite #appium-android
#java #sqlite #appium-android
Вопрос:
Я хотел извлечь некоторый файл .db с устройства Android для тестирования автоматизации, для которого необходимо
- Откройте командную строку 2. введите команды оболочки adb, ниже приведены команды, которые я хотел написать в командной строке программно на JAVA,
adb shell
run-as com.sk.shaft
cd files
cp file.db /sdcard/download/sample.db3
exit
exit
adb pull /sdcard/download/sample.db3 C:/users/libin/desktop/sample.db
До сих пор я могу открыть командную строку, но я не могу ввести вышеуказанные команды в командной строке.
public class DBExtract {
public static void main(String[] args) throws IOException {
Process process= Runtime.getRuntime().exec("cmd /c start cmd.exe /k ");
}
}
кто-нибудь может подсказать, пожалуйста?
Ответ №1:
Запустите несколько команд. При открытии cmd
окна вы теряете контроль над ним. Вы можете создать пакетный скрипт, запустить его в новом cmd
окне и перенаправить ввод.
Вы можете передать пакетный скрипт после /k
параметра cmd.exe
. В командном файле вы можете использовать перенаправление из batch.
На самом деле вы выполняете две команды. adb shell
это одна команда, а adb pull
это другая. Чтобы выполнить «подкоманды» в оболочке из adb, используйте process.getOutputStream()
, создайте OutputStreamWriter
на ней и запишите в нее команды.
Итак, создайте процесс для оболочки adb, перенаправьте текст на вход программы, а затем используйте adb pull
в другом процессе.
Если вы хотите увидеть результат выполнения команд, используйте Process#getInputStream
.
Программа может выглядеть следующим образом:
public class DBExtract {
public static void main(String[] args) throws IOException {
Process process= Runtime.getRuntime().exec("adb shell");
try(PrintWriter pw=new PrintWriter(new BufferedWriter(new OutputStreamWriter(process,getOutputStream(),StandardCharsets.UTF_8)))){
pw.println("run-as com.sk.shaft");
pw.println("cd files");
pw.println("cp file.db /sdcard/download/sample.db3");
pw.println("exit");
pw.println("exit");
}
process=Runtime.getRuntime().exec("adb pull /sdcard/download/sample.db3 C:/users/libin/desktop/sample.db");
}
}
Комментарии:
1. да, это так, теперь он открыл оболочку adb, но другие команды не выполняются, т. е. Отсюда
run-as com.sk.shaft cd files cp file.db /sdcard/download/sample.db3 exit exit.
2. Вам нужно отправить эти команды в качестве входных
adb shell
данных команды, используя перенаправление ввода (process.getOutputStream()
) (Я отредактировал свой ответ)