Android: Могу ли я использовать команду adb в своем приложении?

все вот моя проблема, я хочу запустить Android TestProject в своем приложении, но я не знаю, как это сделать, и я обнаружил, что могу запустить его с помощью команды, например «adb shell am tool -w com.demo.test/android.test.InstrumentationTestRunner». Итак, я попытался использовать в своем приложении: Runtime.getRuntime().exec («adb shell am tool -w com.demo.test/android .test.InstrumentationTestRunner"); но иметь:

03-15 02:24:42.246: WARN/System.err(3597): java.io.IOException: Ошибка при запуске exec(). Команда: [adb, shell, am, Instrument, -w, com.demo.test/android.test.InstrumentationTestRunner] Рабочий каталог: null Среда: null ..... 03-15 02:24:42.246: WARN/System .err(3597): Причина: java.io.IOException: Отказано в доступе, где моя проблема?


person gino    schedule 15.03.2011    source источник
comment
Я не знаю, правильно ли я это понимаю, поэтому из своего приложения для Android вы пытаетесь запустить adb? Я не думаю, что это правильный способ делать то, что вы хотите.   -  person Robert Massaioli    schedule 15.03.2011
comment
да, но есть ли функция для запуска другого приложения, такого как TestProject или случая в TestProject? и спасибо за внимание к моему вопросу.   -  person gino    schedule 15.03.2011


Ответы (3)


Для этого уже существует API, Context.startInstrumentation:

Вот как реализована команда оболочки. Вы не можете сделать ничего большего, запустив команду оболочки, чем вы можете сделать в своем собственном процессе. Кроме того, команды оболочки не являются частью SDK, поэтому все, что вы делаете с ним, может в какой-то момент сломаться на разных устройствах или версиях платформы.

person hackbod    schedule 15.03.2011

Вы должны использовать Context.startInstrumentation вместо adb. Например, из вашей деятельности запустите

startInstrumentation(new ComponentName("com.example.aatg.tc.test", "android.test.InstrumentationTestRunner"), null, null);
person Diego Torres Milano    schedule 15.03.2011
comment
Большое спасибо! Это мне очень помогло - person gino; 15.03.2011

Краткий ответ - нет. Длинный ответ, вроде.

Часть после команды «adb shell» — это часть, которая выполняется, так же, как Runtime.getRuntime().exec(...)

Возможно, вы сможете добиться того, что вам нужно, используя Runtime.getRuntime().exec("instrument -w com.demo.test/android.test.InstrumentationTestRunner"). Я сам не использовал его, но вам может понадобиться передать аргументы в виде массива. Проверьте документация.

person Mark McDonald    schedule 15.03.2011
comment
Я могу использовать startInstrumentation() для достижения того, чего хочу, и спасибо за совет. - person gino; 15.03.2011
comment
это не будет работать в Android 4.2 и более поздних версиях, только системное приложение инструмента может вызывать Android 4.2 - person VISHAL VIRADIA; 16.01.2013
comment
Полезно знать @VISHAVIRADIA. Спасибо за разъяснения. Как я уже говорил, это не решение. Это неприятный взлом, и к нему следует относиться с осторожностью. - person Mark McDonald; 17.01.2013