cmd.exe
には、特定のAndroidアプリケーションの.apk
ファイルを使用してアプリケーションのメインアクティビティを開始できるコマンドがあります。 Androidアプリケーションのみをインストールするこのコマンド:
adb install myapp.apk
このコマンドはmyapp
のみをエミュレーターにインストールし、エミュレーターからこのアプリケーションを手動で実行する必要があります(アイコンをシングルクリックして実行します)。
私がしたいのは、アプリケーションをインストールするだけでなく、そのメインアクティビティを開始するコマンドを使用することです(.apk
ファイルのみがあるため、パッケージ名やアクティビティ名がわからないことに注意してください) )。
一度にインストールして実行することはできませんが、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
「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の新しいビルドツールフォルダーにあります。
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
[...]
これは、シェルスクリプトのソリューションです。
apk="$apk_path"
adb install "$apk"
sleep 1
pkg_info=`aapt dump badging "$apk" | head -1 | awk -F " " '{print $2}'`
eval $pkg_info > /dev/null
pkg_name=$name
adb Shell monkey -p "${pkg_name}" -c Android.intent.category.LAUNCHER 1
adb install ...
の直後の次の行のメイクファイルにこれを入れます
adb Shell monkey -p `cat .identifier` -c Android.intent.category.LAUNCHER 1
これが機能するためには、com.company.ourfirstapp
のようなアプリのバンドル識別子を含む.identifierファイルが必要です。
アクティビティ名を探す必要はありません。
最初にアプリをインストールします:
adb install -r path\ProjectName.apk
-rの素晴らしい点は、まだインストールされていなくても機能することです。
MainActivityを起動するには、次のように起動できます。
adb Shell am start -n com.other.ProjectName/.MainActivity
単一のコマンドを使用して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からパッケージ名を取得する以前のコマンドに置き換えられます。