読者です 読者をやめる 読者になる 読者になる

clock-up-blog

go-mi-tech

Android 実機から apk を探して取得

Android

概要

Android のアプリケーション本体であるところの apk ファイルを Android 実機から取り出す。

環境について

Windows 環境からの接続を試したが、他の環境でも同様の手順が使えるはず。

準備:adb の導入

  1. Android SDK をインストールしておく。
  2. どこかに adb の実行ファイルがあるはずなので、それが実行できるように PATH を通しておく。一般的には「~~\sdk\platform-tools」というディレクトリに PATH を通すことになると思う。
  3. コマンドプロンプトから adb が実行できるようになっていれば OK。

準備:さらにあると良いもの

grep コマンドが使えるようにしておくと良い。Cygwin とかで。

準備:実機とUSBケーブル

当然ながら作業マシンと Android 実機を USB ケーブルで繋いでおく。
ドライバ周りはメーカーごとに設定が違ったりするのでググって設定。

端末に入っているパッケージ一覧を確認する

以下コマンドで、端末に入っている全パッケージ一覧を取得できる。

> adb shell pm list packages -f


以下は僕の端末で試してみた結果

> adb shell pm list packages -f
package:/system/framework/framework-res.apk=android
package:/vendor/overlay/android-res.apk=android.res.overlay
package:/data/app/app.game.rentaapps-2.apk=app.game.rentaapps
package:/data/app/com.DanielBach.FrequenSee-1.apk=com.DanielBach.FrequenSee
package:/data/app/com.amazon.kindle-1.apk=com.amazon.kindle
package:/system/app/Tag.apk=com.android.apps.tag
package:/system/app/BackupRestoreConfirmation.apk=com.android.backupconfirm
package:/system/app/Bluetooth.apk=com.android.bluetooth
…

たとえば「package:/system/app/Tag.apk=com.android.apps.tag」の行は、パッケージファイル名が「/system/app/Tag.apk」でパッケージ名が「com.android.apps.tag」って感じ。

とにかくいっぱい出るので絞り込みたい。

パッケージ絞込み

grep があれば、grep で絞るのが良い。

たとえば以下のように grep でフィルタすれば、指定のキーワードに一致するものだけを確認できる。

> adb shell pm list packages -f | grep -i reversi
package:/data/app/com.mysamp.reversi-1.apk=com.mysamp.reversi

apk のダウンロード(プル)

上記手順でパッケージのファイル名が分かったことと思う。
adb の pull コマンドに対してパッケージのファイル名を指定すれば、指定のパッケージ (apk) を手元にダウンロード(プル)することができる。

> adb pull /data/app/com.mysamp.reversi-1.apk
2188 KB/s (298120 bytes in 0.133s)

ファイルサイズが小さければほぼ一瞬で終わる。これで手元(カレントディレクトリ)にファイルが転送できたはずだ。
f:id:kobake:20150228145441p:plain

おしまい

後は好きに料理すれば良い。



});