нет ответа при выполнении оболочки ADB на эмуляторе на Java - PullRequest
0 голосов
/ 05 марта 2019

Я использую Appium для тестирования автоматизации Android с Java, когда я запускаю команду cmd.exe /c adb shell getprop ro.build.version.release на Java, тестовый скрипт зависает. Env: Аппиум: 1,8, Эмулятор Android: Android 8, Платформа: Windows 7,

Вот оригинальный код:

public static String main(final String strCmd) throws Exception {
    String cmdResult = excuteCmd("adb shell getprop ro.build.version.release");
}
public static String excuteCmd(final String strCmd) throws Exception {
    String resultLine;
    String resultCmd = "";
    try {
        Process process = Runtime.getRuntime().exec(strCmd);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        while ((resultLine = bufferedReader.readLine()) != null) {
            System.out.println(resultLine);
            if (!(resultLine.equalsIgnoreCase(""))) {
                resultCmd = resultLine;
            }
        }
        process.destroy();
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println(resultCmd);
    return resultCmd;
}

Вот оригинальный код:

Может кто-нибудь помочь по этому вопросу?

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Как указано в моем комментарии, adpPath определен в другом месте в моем классе, так как он используется для различных методов.

/**
 * Get a property value, i.e. ro.build.version.release
 * @author Bill Hileman
 * @param String propName 
 * @return String value
 * @throws Exception
 */
public String getDevProp(String propName) throws Exception {

    String value = "";

    String[] getProp = new String[]{adbPath, "shell", "getprop", propName};
    //Execute the shell command
    Process process = new ProcessBuilder(getProp).start();

    BufferedReader inputStream = new BufferedReader(new InputStreamReader(process.getInputStream()));

    startTime = System.nanoTime();

    System.out.println("Getting device property " + propName);
    // wait till the property returns expected value

    value = inputStream.readLine();

    while ("".equals(value)) {
        process.waitFor(1, TimeUnit.SECONDS);
        process.destroy();
        process = new ProcessBuilder(getProp).start();
        inputStream = new BufferedReader(new InputStreamReader(process.getInputStream()));
        value = inputStream.readLine();
    }

    elapsedTime = System.nanoTime() - startTime;
    System.out.println("Returned '" + value + "' - " + 
                       TimeUnit.SECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS) + " seconds elapsed");
    process.destroy();

    return value;

}
0 голосов
/ 06 марта 2019

Я попробовал следующие коды, и это работает для меня как для эмулятора, так и для реальных устройств:

public static void main(String[] strCmd) throws Exception {
    String cmdResult = excuteCmd("adb shell getprop ro.build.version.release");
}

public static String excuteCmd(final String strCmd) throws Exception {
    String resultLine;
    String resultCmd = "";
    try {
        Process process = Runtime.getRuntime().exec(strCmd);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        while ((resultLine = bufferedReader.readLine()) != null) {
            System.out.println(resultLine);
            if (!(resultLine.equalsIgnoreCase(""))) {
                resultCmd = resultLine;
            }
        }
        process.destroy();
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println(resultCmd);
    return resultCmd;
}

Убедитесь, что ваш эмулятор работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...