dex2jarでは精度がいまいちだったので精度の良かった物を紹介します
Bytecode Viewer
dex2jarの代わり。
GUI操作です。JD-GUIのような類ですね。
普通に便利です。apkやdex、jar、zip、classがデコンパイルできます。
デコンパイル後は好きなデコンパイラーで見れます。
apkから出たclassの保存とか、デコンパイラーでデコンパイルしたjavaの出力とか出来ます。
ただjavaへの出力は不安定です。
これをダウンロードして起動すすると「Drag class/jar/APK/DEX here」と書いてあるところがあるのでそこに.apkをドラッグ・アンド・ドロップしてください。
そしたら処理が終わると完成品が出てくるのでFile->Save As Zipからzipで保存してください。
Procyon
Bytecode Viewer内臓のデコンパイラーですね。
安定していると思います。
デコンパイル方法は、Bytecode Viewerで出力したzipの拡張子をjarに変更し
java -jar procyon-decompiler-x.x.xx.jar -jar myJar.jar -o out
Procyonのjarファイル名は自分のものに合わせて変えてください。
myJar.jarはBytecode Viewerで出力したファイル名です。
そしてこれを実行。outは出力先ディレクトリですね。ここにjavaファイルが入ります。予め作る必要はありません。
デコンパイラの比較
私は普段Fernflower派なのですが(普段使ってるIDEがIntellij IDEAなので)出来たソースコードを見て比較とかしましたがFernflowerより良いなと思った点が2つ。
- ソースコードの書き方が簡略化されている
- class内に書かれていない変数名がわかりやすいネーミング
精度としてはほぼFernflowerと同じで、Fernflowerでは書いてあってProcyonでは書いてなかったり、その逆もあったり。
結構精度は高いと思います。
for文比較
Fernflower
ServiceApiEnvironment[] var1 = values();
int var2 = var1.length;
for(int var3 = 0; var3 < var2; ++var3) {
ServiceApiEnvironment var4 = var1[var3];
if (var4.equals(var0)) {
return var4;
}
}
Procyon
for (final ServiceApiEnvironment serviceApiEnvironment : values()) {
if (serviceApiEnvironment.equals(s)) {
return serviceApiEnvironment;
}
}
圧倒的にProcyonのほうが見やすいですよね。
なのでProcyonが一番最適かと思います。
エラーの数はFernflowerが大量に吐いてましたがProcyonは1回だけ。