web-dev-qa-db-ja.com

.apkファイルを使用してAndroidアプリケーションをインストールするだけでなく)実行する方法は?

cmd.exeには、特定のAndroidアプリケーションの.apkファイルを使用してアプリケーションのメインアクティビティを開始できるコマンドがあります。 Androidアプリケーションのみをインストールするこのコマンド:

adb install myapp.apk

このコマンドはmyappのみをエミュレーターにインストールし、エミュレーターからこのアプリケーションを手動で実行する必要があります(アイコンをシングルクリックして実行します)。

私がしたいのは、アプリケーションをインストールするだけでなく、そのメインアクティビティを開始するコマンドを使用することです(.apkファイルのみがあるため、パッケージ名やアクティビティ名がわからないことに注意してください) )。

52
Azeem

一度にインストールして実行することはできませんが、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)=@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)

これでメインアクティビティ(MainWindow)の名前がわかり、実行できるようになりました

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

「adb run myapp.apk」に相当するものを探している場合

次のスクリプトを使用できます answer

(LinuxおよびMacのみ-Windowsでcygwinを使用する場合があります)

linux/macユーザーは、次のようなapkを実行するスクリプトを作成することもできます。

次の3行で「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」を作成できます

注:これには、パスにaaptが必要です。 SDKの新しいビルドツールフォルダーにあります。

12
dljava

GUIからアプリを起動すると、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} from pid 1792
[...]

6
Imre Deák

これは、シェルスクリプトのソリューションです。

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
Verdigrass

adb install ...の直後の次の行のメイクファイルにこれを入れます

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

これが機能するためには、com.company.ourfirstappのようなアプリのバンドル識別子を含む.identifierファイルが必要です。

アクティビティ名を探す必要はありません。

2
Jonny

最初にアプリをインストールします:

adb install -r path\ProjectName.apk

-rの素晴らしい点は、まだインストールされていなくても機能することです。

MainActivityを起動するには、次のように起動できます。

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

0
Zakir Hussain

単一のコマンドを使用して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"

注:ここで、通常はパスにあるデバッグapkをビルド、インストール、起動します:./app/build/outputs/apk/debug/app-debug.apk、このコマンドがプロジェクトのルートから実行されるとき

他のapkをインストールして実行する場合は、debug apkのパスを独自のapkのパスに置き換えるだけです

これが Gist です。 Androidスタジオビルドが約28分に達するのに苦労していたので、これを作成しました。そのため、約3分であるターミナルビルドに切り替えました。詳細についてはこちらをご覧ください ここ

説明:

説明が必要だと思うエイリアスの1つは、launchDebugApkエイリアスです。分解方法は次のとおりです。

部分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からパッケージ名を取得する以前のコマンドに置き換えられます。

0
Nishant.