Как запустить действие конкретного приложения через терминал?

13

Мне нужно запустить мое приложение для Android с удаленного компьютера через SSH, но я не специалист по командной строке, поэтому я хотел бы знать: как запустить определенное действие приложения? (не просто открыть его) Что подразумевает: как ЗНАТЬ точный синтаксис возможных действий приложения?

Например: я хочу запустить приложение аудиозаписи на телефоне с моего компьютера И начать запись с пульта дистанционного управления. Является ли это возможным?

Спасибо Андреа

Andrea
источник

Ответы:

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из которой вы можете получить информацию о классе.

Android Quesito
источник
Не могли бы вы пояснить параметры <package_name>и <full_class_name>, как их получить? Для меня, по крайней мере, последнее не ясно.
Иззи
@Izzy Добавлено объяснение ... Еще раз просмотрите ответ.
Android Quesito
Благодарность! +1 от меня: D Компактно и легко понять. Я позволю себе добавить некоторые ссылки, если вы не возражаете, потому что apktools(не разработчики в противном случае могут подумать, что это часть SDK и потерялись;)
Иззи
@Izzy Вот моя проблема: я не могу запустить эту активность в настройках приложения: com.android.settings/.Settings$StorageSettingsActivity. Попробуй сам. На самом деле, что это за строка после $знака? Это как подкласс в действии Настройки?
Гокул 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
Вы сказали, что это удача, это не так. У вас есть источники для вашего утверждения? Почему это не должно поощряться?
Жиль Квено