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é).

47
demandé sur Nate W. 2011-05-24 14:46:19

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
75
répondu Airsource Ltd 2014-01-28 11:13:39

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

12
répondu dljava 2017-05-23 12:02:00

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

[...]

6
répondu Imre Deák 2016-06-03 14:55:11

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é.

1
répondu Jonny 2015-07-24 00:56:27

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
1
répondu Verdigrass 2017-12-04 09:34:58

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 projet

si 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.

0
répondu Nishant. 2018-04-15 08:20:24