як запустити певну дію програми через термінал?


13

Мені потрібно запустити додаток для Android з віддаленого комп’ютера через SSH, але я не експерт командного рядка, тому хотів би знати: як запустити певну дію програми? (а не просто відкривати його) Що означає: як ЗНАЙТИ точний синтаксис можливих дій програми?

наприклад: Я хочу запустити програму аудіозапису на своєму телефоні зі свого комп'ютера, а також розпочати запис із віддаленого. Це можливо?

Дякую, Андреа

Відповіді:


12

Використовуй це:

am start -a android.intent.action.MAIN -n <package_name>/<full_class_name>

Щоб керувати додатком, вам потрібно буде ввести правильні значення <package_name>та <full_class_name>в команді. Наприклад, ви можете використовувати com.google.gmail/com.google.gmail.check_mail(Гіпотетичні імена) як останню частину команди.

Отримати назву пакета програми просто , але отримати назву класу дії не так. Є дві проблеми:

  1. Багато розробників додатків зберігають інформацію про клас приватною.

  2. Не всі розробники займаються розумним модульним програмуванням. Його корисна звичка ділити додаток на кілька класів, які можуть бути викликані намірами, але не всі розробники розумні.

Вирішення першої проблеми: Декомпілюйте додаток за допомогою apktool і перегляньте всю інформацію. Є й інші способи, але цей метод завжди працює (якщо додаток не базується на NDK замість SDK).

Рішення 2-ї проблеми: Нічого.

Не хвилюйтесь, більшість популярних додатків дотримуються найкращої практики програмування, і вони надають Public APIінформацію про клас.


Чи можете ви додати деякі пояснення щодо параметрів <package_name>та <full_class_name>та як їх отримати? Мені, принаймні, останнє не зрозуміло.
Izzy

@Izzy Додав пояснення ... Ще раз переглянути відповідь.
Android Quesito

Спасибі! +1 від мене: D Компактний і легкий для розуміння. Я візьму свободу додати кілька посилань, якщо ви не заперечуєте, тому що apktools(не розробники інакше можуть подумати, що це частина SDK і загубиться;)
Izzy

@Izzy Ось моя проблема: я не можу запустити цю активність в налаштуваннях програми: com.android.settings/.Settings$StorageSettingsActivity. Спробуйте самі. Власне, що це за рядок після $знака? Це як підклас у діяльності "Налаштування"?
Гокуль NC NC

@GokulNC вам може знадобитися цитувати всю річ (окремі лапки), або вона $StorageSettingsActivityможе розглядатися як змінна і "розширена" на порожню рядок (якщо немає змінної, визначеної цим іменем).
Іззі

9

Як сказав Сахін Шехар, ви повинні використовувати таку команду:

am start -a android.intent.action.MAIN -n <package_name>/<full_class_name>

Дивіться конкретний приклад:

  • отримання файлу apk з вашого пристрою Android або будь-якого місця на ринку
  • запуск цієї команди:

aapt dump xmltree com.android.settings*.apk AndroidManifest.xml

Я хотів би запустити меню "прив’язання", тому я шукаю активність у вихідних даних:

(...)
   E: activity (line=190)
    A: android:name(0x01010003)=".TetherSettings" (Raw: ".TetherSettings")
(...)

Отже, остаточна команда:

am start -a android.intent.action.MAIN -n com.android.settings/.TetherSettings

aaptКоманда є частиною Android SDK


1
: D Тестуй це, він працює як шарм. Це робочий приклад у реальному житті © ® ™.
Жилль Кінот

2
Удача та інформатика є зовсім протилежними. Це відносний шлях.
Жилль Кінот

2
Ні, ви можете опустити com.android.settingsПАТ, тому я сказав, що це відносно. Перевірте це в будь-якому додатку, яке вам захочеться.
Жилль Кінот

2
Я не сказав, що це не працюватиме з іншими програмами. Крапка перед назвою класу виконує магію. Але це не слід заохочувати.
Android Quesito

1
Ви сказали, що це удача, це не так. Чи є у вас джерела для твердження? Чому цього не слід заохочувати?
Жилль Кінот
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.