hack のためのネタ帳, etc,,,

状況

某ソフトを使いたいのだが PC 版がないみたいなので Android Studio 付属の Emulator 上で動かそうと思ったら対応してない機種と言われる。
そこで、adb で実機から apk 抜いて emulator に移植しようと画策。
実機を USB で繋ぎ USB Debug を有効にしたら Android Studio の SDK Tools に含まれてる adb に PATH を通しておく。
PATH="$(cygpath "$LOCALAPPDATA"'\Android\Sdk\platform-tools'):$PATH"
まず接続を確認
adb devices -l
例えば以下のような結果が得られる。
************           device product:X3-KC model:X3_KC device:X3-KC_sprout transport_id:2
emulator-****          device product:sdk_gphone_x86 model:Android_SDK_built_for_x86 device:generic_x86 transport_id:1
unauthorized だと、USB Debug の許可が出てないので実機側で OK しておく。

package 一覧を得るには以下のようにする。
adb -d shell pm list package
adb -e shell pm list package
オプション -d で USB 接続のデバイス(実機)、-e で TCP 接続のデバイス(エミュレーター)が対象になる。
adb -d shell pm list package \
| grep $PATTERN
で目的のパッケージを1つに絞れたらとりあえず
read PKG < <(adb -d shell pm list package | grep $PATTERN | sed -E 's/^package://g;s/[\r\n]//g' ); \
echo $PKG
として PKG にパッケージ名保存しといて
read PKGPATH < <(adb -d shell pm path "$PKG" | sed -E 's/^package://g;s/[\r\n]//g'); \
echo $PKGPATH
のようにして PKGPATH にパッケージのパスを得る。

これで目的のパッケージ名と apk の場所が分かったので、
adb -d pull "$PKGPATH" "$PKG.apk"
とすれば $PKG.apk が得られる。

エミュレーターへのインストールは以下のようにすれば良い。
adb -e install "$PKG.apk"

今回の場合、実機は ARM、エミュレーターは x86 なので
Performing Streamed Install
adb: failed to install $PKG.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]
とか言われてしまった。

どうやら、ネイティブライブラリ使ってて ARM 版バイナリーしか生成してないので x86 のエミュレーターだと Google Play で非対応扱いされるってことか。
成程、これが Zenfone2 とかで噂に聞いてた Android x86 辛味ってやつか。

参考

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

編集にはIDが必要です