在反编译之前我们需要两个工具助手:
1.apktool 此工具可以帮助我们把apk文件拆包并且打包
2.jadx 查看apk文件代码
3.java 1.8 版本(1.8版本可以进行重签名)
反编译需要的步骤:
一、拆包
首先拆包需要一个重要的文件就是上面的apktool助手
下载安装好apktool之后我们就可以开始进行apk拆包工作了
1.将需要反编译的apk文件挪到你的apktool文件夹同级文件夹里面去
2.打开终端 cd 到你apktool的文件夹里面去 :cd ..../Desktop/androidUntie
3. 执行: apktool -f d xxx.apk -o xxx_file --only-main-classes
4.这个时候你会得到在apktool文件同级文件夹里面有个xxx_file的文件夹,这个文件夹里面都是应用程序的所有资源和代码
二、打开smali文件修改代码
在我们得到了xxx_file 这个文件夹之后我们就可以点击进去,找到smali文件,可能会存在smaili_classes2... 等等文件夹,那是分包得到的文件夹,原因是因为应用程序方法数量超出了限制,继续点击到你的smali文件夹里面去,里面包含了各种名称的文件夹,点开里面的文件夹,这些文件夹都是你的jar包和你的程序文件,找到你你程序包文件夹之后点击进去里面就是以你的代码文件名称命名的.smali文件,这个.smali 文件可以拖到你的AS编译器里面查看和修改,待修改完成后,保存起来就行。
三、重新打包(此时是未签名状态)
1.继续打开终端执行:apktool b xxx_file -o xxx_no.apk
2.此时,xxx_no.apk 文件是暂未签名的文件还不可以安装到手机,需要进行签名操作之后就可以安装到你的手机
四、重新签名
1.签名需要你的签名文件,签名文件是从AS编译器里面得到的文件,因此可以直接去AS里面去制作一个签名文件,这里 我的前面文件名称是 game.jks
2.在签名之前你可以查看一下你的电脑是否安装java环境,查看电脑是否安装java环境,直接在终端执行 java -version 就能查看到你的电脑是否安装了java环境
3.安装完 java 环境后我们就能签名了
4.终端执行下面的命令:
jarsigner -verbose -keystore [你的jks文件路径] -signedjar [你签好名的文件路径] [未签名的apk路径] [jks文件名称]
例如: jarsigner -verbose -keystore .../Desktop/androidUntie/xxx_sin.apk .../Desktop/androidUntie/xxx_no.apk game (省略号是路径)
5.点击回车后会让你输入你的jks文件的密码,输入密码即可签名,待签名完成后你的文件夹里面会出现你的签好名的apk文件,借助adb将它安装到手机即可