webentwicklung-frage-antwort-db.com.de

Wie kann ich eine Android-Anwendung mit der .apk-Datei ausführen (nicht nur installieren)?

Gibt es einen Befehl in cmd.exe, mit dem ich die Hauptaktivität einer bestimmten Android-Anwendung mit der .apk-Datei dieser Anwendung starten kann. Bitte beachten Sie, dass ich diesen Befehl kenne, der nur eine Android-Anwendung installiert:

adb install myapp.apk

Mit diesem Befehl wird nur myapp auf dem Emulator installiert, und ich muss diese Anwendung manuell über den Emulator ausführen (durch Klicken auf das entsprechende Symbol). 

Ich möchte einen Befehl verwenden, der nicht nur die Anwendung installiert, sondern auch seine Hauptaktivität startet (bitte beachten Sie, dass ich nur die .apk-Datei habe, damit ich nicht weiß, wie der Paketname oder der Aktivitätsname ist).

49
Azeem

Sie können nicht gleichzeitig installieren und ausführen - Sie können jedoch mit adb Ihre bereits installierte Anwendung starten. Verwenden Sie adb Shell und fangen Sie an, eine Absicht auszulösen - Sie müssen jedoch die richtige Absicht für Ihre Anwendung verwenden. Einige Beispiele:

adb Shell am start -a Android.intent.action.MAIN -n com.Android.settings/.Settings 

startet Einstellungen und

adb Shell am start -a Android.intent.action.MAIN -n com.Android.browser/.BrowserActivity 

startet den Browser. Wenn Sie den Browser auf eine bestimmte Seite richten möchten, tun Sie dies

adb Shell am start -a Android.intent.action.VIEW -n com.Android.browser/.BrowserActivity http://www.google.co.uk

Wenn Sie den Namen der Aktivitäten in der APK nicht kennen, tun Sie dies

aapt d xmltree <path to apk> AndroidManifest.xml

der Ausgabeinhalt enthält einen Abschnitt wie folgt:

   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)

Dadurch wird der Name der Hauptaktivität (MainWindow) angezeigt, und Sie können jetzt ausführen

adb Shell am start -a Android.intent.action.MAIN -n com.anonymous/.MainWindow
78
Airsource Ltd

wenn Sie nach dem Äquivalent von "adb run myapp.apk" suchen

sie können das in dieser/abgebildete Skript verwenden -

(nur linux und mac - vielleicht mit cygwin unter windows)

linux Mac-Benutzer können auch ein Skript erstellen, um eine apk mit etwa dem folgenden auszuführen:

erstellen Sie eine Datei mit dem Namen "adb-run.sh" mit diesen 3 Zeilen:

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

dann "chmod + x adb-run.sh", um es ausführbar zu machen.

jetzt kannst du einfach:

adb-run.sh myapp.apk

Der Vorteil hierbei ist, dass Sie den Paketnamen oder den Namen der startbaren Aktivität nicht kennen müssen. Ebenso können Sie "adb-uninstall.sh myapp.apk" erstellen.

Hinweis: Dies erfordert, dass Sie sich in Ihrem Pfad befinden. Sie finden es unter dem neuen Build-Tools-Ordner im SDK

12
dljava

Wenn Sie die App über die grafische Benutzeroberfläche starten, zeigt Ihnen adb logcat möglicherweise die entsprechende Aktion/Kategorie/Komponente an:

$ adb logcat
[...]
I/ActivityManager (1607): START {act = Android.intent.action.MAIN cat = [Android.intent.category.LAUNCHER] flg = 0x10200000 cmp = com.Android.browser/.BrowserActivity} aus pid 1792
[...]

6
Imre Deák

Dies ist eine Lösung im Shell-Skript:

apk="$apk_path"

1. Installieren Sie apk

adb install "$apk"
sleep 1

2. Paketnamen abrufen

pkg_info=`aapt dump badging "$apk" | head -1 | awk -F " " '{print $2}'`
eval $pkg_info > /dev/null

3. Starten Sie die App

pkg_name=$name
adb Shell monkey -p "${pkg_name}" -c Android.intent.category.LAUNCHER 1
2
Verdigrass

Ich lege dies in mein Makefile, gleich in der nächsten Zeile nach adb install ...

adb Shell monkey -p `cat .identifier` -c Android.intent.category.LAUNCHER 1

Damit dies funktioniert, muss eine .identifier-Datei mit der Bundle-ID der App vorhanden sein, z. B. com.company.ourfirstapp

Keine Notwendigkeit, den Namen der Aktivität zu suchen.

1
Jonny

Installieren Sie zuerst Ihre App:

adb install -r path\ProjectName.apk

Das Tolle an -r ist, dass es funktioniert, auch wenn es nicht bereits installiert wurde.

So starten Sie MainActivity:

adb Shell am start -n com.other.ProjectName/.MainActivity

0
Zakir Hussain

Ich habe Terminal-Aliasnamen erstellt, um eine apk mit einem einzigen Befehl zu installieren und auszuführen.

// 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"

Hinweis: Hier wird das Debug-Apk erstellt, installiert und gestartet, das sich normalerweise im Pfad befindet: ./app/build/outputs/apk/debug/app-debug.apk, wenn dieser Befehl vom Stammverzeichnis des Projekts ausgeführt wird

Wenn Sie andere apk installieren und ausführen möchten, ersetzen Sie einfach den Pfad für debug apk durch den Pfad Ihrer eigenen apk

Hier ist das Gist für das gleiche ..__ Ich habe es erstellt, weil ich Probleme hatte, mit Android Studio Build zu arbeiten und etwa 28 Minuten dauerte. Daher wechselte ich zu Terminal-Builds, die etwa 3 Minuten lang waren. Sie können mehr darüber lesen hier

Erklärung:

Das eine Alias, das meiner Meinung nach erklärungsbedürftig ist, ist das launchDebugApk-Alias ​​..__ So wird es zerlegt:

Der Teil aapt dump badging ./app/build/outputs/apk/debug/app-debug.apk | grep -e 'package: name verwendet grundsätzlich das Werkzeug aapt, um den Paketnamen aus der apk zu extrahieren.

Als Nächstes folgt der Befehl: adb Shell monkey -p com.package.name 1, der im Wesentlichen das Tool monkey verwendet, um die Standardstartaktivität der auf dem verbundenen Gerät installierten App zu öffnen. Der Teil von com.package.name wird durch unseren vorherigen Befehl ersetzt, der dafür sorgt, dass der Paketname von der apk abgerufen wird.

0
Nishant.