Comment exécuter (pas seulement installer) une application android en utilisant.le dossier apk?
y a-t-il une commande sur cmd.exe
qui me permettrait de commencer l'activité principale d'une application android particulière en utilisant le fichier .apk
de cette application. Veuillez noter que je connais cette commande qui n'installe qu'une application android:
adb install myapp.apk
cette commande installera seulement myapp
sur l'émulateur et je dois exécuter manuellement cette application à partir de l'émulateur (en effectuant un simple clic sur son icône).
ce que je veux faire, c'est utiliser une commande qui non seulement installe l'application, mais aussi démarre son activité principale (veuillez noter que je n'ai que son fichier .apk
donc je ne sais pas quel est le nom du paquet ou de l'activité).
6 réponses
Vous ne pouvez pas installer et exécuter en une seule fois - mais vous pouvez certainement utiliser adb pour démarrer votre application déjà installée. Utilisez adb shell am commencer à tirer une intention - vous aurez besoin d'utiliser la bonne intention pour votre application cependant. Quelques exemples:
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings
lancera les paramètres, et
adb shell am start -a android.intent.action.MAIN -n com.android.browser/.BrowserActivity
lancera le navigateur. Si vous voulez pointer le navigateur vers une page particulière, faites ceci
adb shell am start -a android.intent.action.VIEW -n com.android.browser/.BrowserActivity http://www.google.co.uk
si vous ne connaissez pas le nom des activités dans L'APK, alors faites-le
aapt d xmltree <path to apk> AndroidManifest.xml
le contenu de sortie comprendra une section comme celle-ci:
E: activity (line=32)
A: android:theme(0x01010000)=@0x7f080000
A: android:label(0x01010001)=@0x7f070000
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)
Qui vous indique le nom de l'activité principale (MainWindow), et vous pouvez maintenant exécuter
adb shell am start -a android.intent.action.MAIN -n com.anonymous/.MainWindow
si vous cherchez l'équivalent de "adb, Lancez myapp.apk "
vous pouvez utiliser le script montré dans ce réponse
(linux et mac seulement - peut-être avec cygwin sur windows)
les utilisateurs linux/mac peuvent aussi créer un script pour exécuter un apk avec quelque chose comme:
créer un fichier nommé "adb-run.sh" avec ces 3 lignes:
pkg=$(aapt dump badging |awk -F" " '/package/ {print }'|awk -F"'" '/name=/ {print }')
act=$(aapt dump badging |awk -F" " '/launchable-activity/ {print }'|awk -F"'" '/name=/ {print }')
adb shell am start -n $pkg/$act
alors "chmod +x adb-run.sh" pour le rendre exécutable.
maintenant vous pouvez simplement:
adb-run.sh myapp.apk
L'avantage ici est que vous n'avez pas besoin de connaître le nom du paquet ou projetables nom de l'activité. De même, vous pouvez créer "adb-uninstall.sh myapp.apk "
Note: cela nécessite que vous ayez aapt dans votre chemin. Vous pouvez le trouver sous le nouveau dossier build tools dans le SDK
lorsque vous démarrez l'application à partir de L'interface graphique, adb logcat
pourrait vous montrer l'action/catégorie/composant correspondant:
$ ADB logcat
[...]
I / ActivityManager (1607): START {act=android.intention.action.Cat principal=[android.intention.catégorie.Lanceur] flg=0x10200000 cmp = com.Android.navigateur./BrowserActivity} from pid 1792
[...]
j'ai mis ceci dans mon makefile, à droite la ligne suivante après adb install ...
adb shell monkey -p `cat .identifier` -c android.intent.category.LAUNCHER 1
Pour que cela fonctionne, il doit y avoir un .fichier d'identification avec l'Identificateur de faisceau de l'application, comme com.company.ourfirstapp
pas besoin de chasser le nom de l'activité.
C'est une solution en shell script:
apk="$apk_path"
1. Installer apk
adb install "$apk"
sleep 1
2. Obtenir le nom du paquet
pkg_info=`aapt dump badging "$apk" | head -1 | awk -F " " '{print }'`
eval $pkg_info > /dev/null
3. Démarrer l'application
pkg_name=$name
adb shell monkey -p "${pkg_name}" -c android.intent.category.LAUNCHER 1
j'ai créé des alias de terminaux pour installer et exécuter un apk en utilisant une seule commande.
// 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 "
# 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"
Note: Me voici à construire, installer et lancer le debug apk qui est habituellement dans le chemin:
./app/build/outputs/apk/debug/app-debug.apk
, lorsque cette commande est exécutée à partir de la racine du projetsi vous souhaitez installer et exécuter n'importe quel autre apk, remplacez simplement le chemin pour debug apk par le chemin de votre propre apk
voici le gist pour le même. J'ai créé cela parce que j'avais du mal à travailler avec Android Studio build atteignant environ 28 minutes, donc je suis passé à des constructions de terminaux qui étaient environ 3 minutes. Vous pouvez en savoir plus sur ce ici
explication:
le seul alias qui, je pense, nécessite une explication est le launchDebugApk
alias.
Voici comment il est cassé vers le bas:
la partie aapt dump badging ./app/build/outputs/apk/debug/app-debug.apk | grep -e 'package: name
utilise essentiellement l'outil aapt
pour extraire le nom du paquet de l'apk.
suivant, est la commande: adb shell monkey -p com.package.name 1
, qui utilise essentiellement l'outil monkey
pour ouvrir l'activité de lancement par défaut de l'application installée sur le périphérique connecté. La partie de com.package.name
est remplacée par notre commande précédente qui prend soin d'obtenir le nom du paquet de l'apk.