いろんな apk を何度も手軽に実行したい
ってことで apk ファイルをダブルクリックで実機に転送&実行ができると嬉しいなと思ったのです。
単純に最新ビルドを実行したいというだけであれば HockeyApp で良いと思います。
が、自分の用途としては「hoge-v1.apk」「hoge-v2.apk」「hoge-v3.apk」みたいないろんなバージョンの apk があって、これらをとっかえひっかえ実機実行したい(※)、という感じでありまして、その要件を満たすためにはやはり apk ダブクリが最も手軽で良いなーと思ったのです。
apk-launcher
既に何かしらソリューションがあるかと思って探したのですが見つかりませんでした(良いのがあったら教えてください)。
で、とりあえず apk-launcher というものを作ってみました。
使い方
Android実機をUSB接続した上で、apk_launcher.bat または apk_launcher.sh の第1引数へ apk ファイル名を渡すと、自動的にインストールと実行をしてくれます。
署名の食い違い等があった場合でも全力でスルー(自動アンインストール&インストール)してくれるので楽ですが少し危険かもしれません。あくまでも開発用途ということで。
個人的なオススメ設定としては **.apk ファイルを apk_launcher.bat に関連付けしておくといろいろ捗ります。**つまりはダブルクリックで apk が実行できるようになります。
(Mac の場合は Automator でシェルへの関連付けみたいなことができるんでしたっけ。。ちょっとこのあたりは詳しくなくて試せてないです。。)
やってること
以下を代理実行してくれているだけです。これを手打ちで毎回打ち込むのはなかなか辛い。
- インストール …
adb install <apk file>
- アンインストール …
adb uninstall <package name>
- 実行 …
adb shell am start -n <package name>/<activity name>
アプリのパッケージ名やアクティビティ名が必要になるのですが、そのあたりは Build-tools の aapt
コマンドで apk から情報を抽出しています。
※ユースケース説明
そんなユースケースあるの?って思われるかもしれませんが、v1, v2, v3 が順繰りのバージョンではなく、いわゆるブランチ名に該当するようなケースを考えていただければ想定ケースの想像が付きやすいのではないかと思います。
実際のところ自分のケースはそういうケースです。
おまけ
Stack Overflow にピンポイントな回答があるのだけど。
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
個人利用としてはこれで十分すぎるのだけど、人にも使われることを考えてツールを作るときには環境の前提をどこまで考えるべきか迷いあぐねています。
awk とか grep とかね、そういうの Windows でも標準で使えれば良いんだけど。。
Cygwin 入れろとか MinGW 入れろとか Git Bash を入れろとか、そういうハードルできるだけなくしたいんですよね。。
Android SDK は仕方ないとして、結局 Python に依存する形にはなってしまったのだけど。。迷走中。Chocolatey みたいなものが良い感じに普及して、依存関係全部カプセル化できる未来を切望。