Как запустить (не только установить) приложение для Android с использованием файла .apk?
Есть ли какая-либо команда в cmd.exe
, которая позволила бы мне запустить основное действие конкретного приложения для Android с помощью файла .apk
этого приложения. Обратите внимание, что я знаю эту команду, которая только устанавливает приложение для Android:
adb install myapp.apk
Эта команда будет устанавливать только myapp
на эмулятор, и я должен вручную запустить это приложение из эмулятора (одним щелчком мыши по его значку).
Что я хочу сделать, это использовать команду, которая не только устанавливает приложение, но и начинает его основное действие (обратите внимание, что у меня есть только его файл .apk
, поэтому я не знаю, что имя пакета или какое-либо название деятельности есть).
Ответы
Ответ 1
Вы не можете устанавливать и запускать за один раз - но вы можете использовать adb для запуска уже установленного приложения. Используйте оболочку adb, чтобы начать умышленное намерение - вам нужно будет использовать правильное намерение для своего приложения. Несколько примеров:
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings
запустится Настройки и
adb shell am start -a android.intent.action.MAIN -n com.android.browser/.BrowserActivity
запустит браузер.
Если вы хотите указать браузер на определенной странице, сделайте это
adb shell am start -a android.intent.action.VIEW -n com.android.browser/.BrowserActivity http://www.google.co.uk
Если вы не знаете название деятельности в APK, сделайте это
aapt d xmltree <path to apk> AndroidManifest.xml
выходной контент будет содержать такой раздел:
E: activity (line=32)
A: android:theme(0x01010000)[email protected]
A: android:label(0x01010001)[email protected]
A: android:name(0x01010003)="com.anonymous.MainWindow"
A: android:launchMode(0x0101001d)=(type 0x10)0x3
A: android:screenOrientation(0x0101001e)=(type 0x10)0x1
A: android:configChanges(0x0101001f)=(type 0x11)0x80
E: intent-filter (line=33)
E: action (line=34)
A: android:name(0x01010003)="android.intent.action.MAIN"
XE: (line=34)
Это указывает вам имя основного действия (MainWindow), и теперь вы можете запустить
adb shell am start -a android.intent.action.MAIN -n com.anonymous/.MainWindow
Ответ 2
если вы ищете эквивалент "adb run myapp.apk"
вы можете использовать script, указанный в этом ,
(только linux и mac - возможно, с cygwin на окнах)
Пользователи linux/mac также могут создать script для запуска apk с чем-то вроде следующего:
создайте файл с именем "adb-run.sh" с этими тремя строками:
pkg=$(aapt dump badging $1|awk -F" " '/package/ {print $2}'|awk -F"'" '/name=/ {print $2}')
act=$(aapt dump badging $1|awk -F" " '/launchable-activity/ {print $2}'|awk -F"'" '/name=/ {print $2}')
adb shell am start -n $pkg/$act
затем "chmod + x adb-run.sh", чтобы сделать его выполнимым.
теперь вы можете просто:
adb-run.sh myapp.apk
Преимущество здесь в том, что вам не нужно знать имя пакета или имя запускаемой программы. Аналогичным образом вы можете создать "adb-uninstall.sh myapp.apk"
Примечание. Это требует, чтобы у вас был доступ к вашему пути. Вы можете найти его в новой папке инструментов сборки в SDK
Ответ 3
Когда вы запускаете приложение из графического интерфейса пользователя, adb logcat
может показать вам соответствующее действие/категорию/компонент:
$adb logcat
[...]
I/ActivityManager (1607): START {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10200000 cmp = com.android.browser/.BrowserActivity} из pid 1792
[...]
Ответ 4
Это решение в оболочке script:
apk="$apk_path"
1. Установите apk
adb install "$apk"
sleep 1
2. Получить имя пакета
pkg_info=`aapt dump badging "$apk" | head -1 | awk -F " " '{print $2}'`
eval $pkg_info > /dev/null
3. Запустить приложение
pkg_name=$name
adb shell monkey -p "${pkg_name}" -c android.intent.category.LAUNCHER 1
Ответ 5
Я помещаю это в свой make файл, вправо следующую строку после adb install ...
adb shell monkey -p `cat .identifier` -c android.intent.category.LAUNCHER 1
Для этого в файле должен быть файл .identifier с идентификатором пакета приложения, например com.company.ourfirstapp
Не нужно искать название активности.
Ответ 6
Я создал терминальные псевдонимы для установки и запуска apk с использованием одной команды.
// I use ZSH, here is what I added to my .zshrc file (config file)
// at ~/.zshrc
// If you use bash shell, append it to ~/.bashrc
# Have the adb accessible, by including it in the PATH
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:path/to/android_sdk/platform-tools/"
# Setup your Android SDK path in ANDROID_HOME variable
export ANDROID_HOME=~/sdks/android_sdk
# Setup aapt tool so it accessible using a single command
alias aapt="$ANDROID_HOME/build-tools/27.0.3/aapt"
# Install APK to device
# Use as: apkinstall app-debug.apk
alias apkinstall="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X install -r $1"
# As an alternative to apkinstall, you can also do just ./gradlew installDebug
# Alias for building and installing the apk to connected device
# Run at the root of your project
# $ buildAndInstallApk
alias buildAndInstallApk='./gradlew assembleDebug && apkinstall ./app/build/outputs/apk/debug/app-debug.apk'
# Launch your debug apk on your connected device
# Execute at the root of your android project
# Usage: launchDebugApk
alias launchDebugApk="adb shell monkey -p 'aapt dump badging ./app/build/outputs/apk/debug/app-debug.apk | grep -e 'package: name' | cut -d \' -f 2' 1"
# ------------- Single command to build+install+launch apk------------#
# Execute at the root of your android project
# Use as: buildInstallLaunchDebugApk
alias buildInstallLaunchDebugApk="buildAndInstallApk && launchDebugApk"
Примечание. Здесь я ./app/build/outputs/apk/debug/app-debug.apk
, устанавливаю и запускаю debug apk, который обычно находится на пути: ./app/build/outputs/apk/debug/app-debug.apk
, когда эта команда выполняется из корня проекта
Если вы хотите установить и запустить любой другой apk, просто замените путь для debug apk на путь вашего собственного apk
Вот суть для этого. Я создал это, потому что у меня возникли проблемы с работой с установкой Android Studio, достигающей примерно 28 минут, поэтому я перешел на сборки терминалов, которые составляли около 3 минут. Вы можете узнать больше об этом здесь
Объяснение:
Один псевдоним, который, как мне кажется, нуждается в объяснении, - это псевдоним launchDebugApk
. Вот как он разбит:
aapt dump badging./app/build/outputs/apk/debug/app-debug.apk | grep -e 'package: name
частичного aapt dump badging./app/build/outputs/apk/debug/app-debug.apk | grep -e 'package: name
aapt dump badging./app/build/outputs/apk/debug/app-debug.apk | grep -e 'package: name
основном использует инструмент aapt
для извлечения имени пакета из apk.
Далее, это команда: adb shell monkey -p com.package.name 1
, которая в основном использует инструмент monkey
, чтобы открыть действие запуска по умолчанию установленного приложения на подключенном устройстве. Часть com.package.name
заменяется нашей предыдущей командой, которая заботится о получении имени пакета из apk.
Ответ 7
Сначала установите приложение:
adb install -r path\ProjectName.apk
Самое замечательное в -r - он работает, даже если он еще не установлен.
Чтобы запустить MainActivity, вы можете запустить его следующим образом:
adb shell am start -n com.other.ProjectName/.MainActivity