概要
- 開発中に手が滑って
git checkout .
してしまい未コミットのコードが消えた - 実機で開発中だったため端末内にAPKが残っている
- APKからコードをサルベージする
APKのパスの確認
adbを使い端末にインストールされているAPKのパッケージパスを確認する。
$ adb shell pm list packages -f | grep horie1024
package:/data/app/horie1024.jp.sample-1/base.apk=horie1024.jp.sample
この場合、パスは/data/app/horie1024.jp.sample-1/base.apk
になる。
端末からAPKを取得
以下のコマンドを実行し端末からAPKを取り出す。
$ adb pull /data/app/horie1024.jp.sample-1/base.apk
[100%] /data/app/horie1024.jp.sample-1/base.apk
これでbase.apk
を取り出せる。
逆アセンブル
apktoolのインストール
apktoolをHomebrewでインストールする。
$ brew install apktool
逆アセンブルの実行
$ apktool decode base.apk
実行後にbase
ディレクトリが生成されるので、それ以下にファイルが出力されている。
サルベージ
AndroidManifestやlayoutなどのxmlはほぼそのままサルベージできる(match_parentがfill_parentになっていたりする)。Javaのコードについては、smali形式となっているので慣れないと読み取りにくい。
参考
- http://ibotpeaches.github.io/Apktool/
- http://techbooster.jpn.org/andriod/environment/7754/
- https://kanatoko.wordpress.com/2011/01/21/android%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%AA%E3%83%90%E3%83%BC%E3%82%B9%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0/