#背景
ついつい時間ができたらやってしまうAndroidのゲームを、
単に遊ぶだけではなく構造を理解して技術トレンドを追いつつ、
ゲームそのものに熱中しないように自動化してつまらなくしてやめるのが、
自身の習慣となっていますが、マシンを変えるたびに環境を揃えるのが面倒なので、
ここにまとめます。
#使うもの
- apktool (http://ibotpeaches.github.io/Apktool/)
- dex2jar (https://github.com/pxb1988/dex2jar)
- jad (http://varaneckas.com/jad/)
- オンラインデコンパイラー (https://retdec.com/decompilation/)
#やりかた
1.apkファイルをPCにコピーする
adb shell pm list packages -f | grep パッケージ名
package:アプリ保存先=パッケージ名
adb pull アプリ保存先 PC保存先
2.apktoolでapkを展開する(主にマニフェストとか、アセットとか、リソースファイルの確認)
apktool d アプリ
アプリのパッケージ名のフォルダに展開される
パッケージ名
|-AndroidManifest.xml
|-apktool.yml
|-assets
|-lib
|-original
|-res
`-smali
3.unzipでapkを展開する(ソースコード読みたい時の下準備)
unzip アプリ -d apk
./apk
|-AndroidManifest.xml
|-META-INF
|-assets
|-classes.dex
|-lib
|-res
`-resources.arsc
4.dex2jarでdexファイルをjarファイルに変換
dex2jar classes.dex
classes-dex2jar.jarが生成される
5.unzipでjarを展開する
unzip classes-dex2jar.jar -d output
6.jadでclassファイルをjavaに変換する
cd output; find . -name "*class" | xargs -IXXX jad -s java -r XXX
output以下にフォルダ構成を維持されたjavaファイルが出来上がる
7.必要に応じて.soファイルの内容を確認
対象のアプリのロジックが.soに入っている場合は、別途デコンパイラーが必要になるため、
環境構築が面倒な方はオンラインコンパイラーを使うのが無難
※主にUnityのコードとか見るのに使っている
#主に見ているもの
javaコードとか、layoutファイルとか見つつ、
libの中身見てどういうライブラリー使っているのか見つつ、
uiautomatorviewer使いながらアプリ動かしつつ、
Charles使って通信内容見つつ、
AppiumとかCalabashとかmonkeyrunner(未だに)とか使って自動化したり、
ゲームの裏ワザが本当なのか確認したりしてます。
最後に
内容的にここ5年ぐらい特に変わってないやり方のまとめになってしまっていますので、
是非より良い方法とか、他にもこういうの見たりしてまっせという情報があればコメント頂けると助かります。