# RDP
RDP(Ratel Decompile Project)是类似APKTool的一套android apk代码修改工具，构建在ratel framework之上，通过重打包的方法修改apk代码文件，但是RDP和apktool有很大不同。RDP主要关注在java代码的修改和注入，对资源文件、AndroidManifest的修改并不支持。和APKtool对比如下

1. 弱化功能，RDP的功能类似APKTool ``-r,--no-res             Do not decode resources.``参数，所以apk修改范围是APKTool功能子集，另一方面这也是强化功能。RDP相比APKtool来说，不存在``资源混淆对抗``，理论上不会重打包失败。就目前而言，绝大部分头部app由于APKtool资源混淆对抗问题无法构建成功
2. RDP不需要考虑签名问题，一般来说APKtool修改之后，需要手动bypass signature check，RDP工作之前已经被ratel改包，之后已经完成apk常规检查的破解
3. ratel插件机制，还是因为RDP工作在ratel framework之上，所以依然享受ratel本身提供的所有功能。包括一机多号、设备指纹、hook插件

所以，如果你只是想修改apk的java代码逻辑，那么RDP相比APKtool更加适合你，但是如果你还想修改资源文件，或者添加新的activity之类的，那么只能使用apktool。

## 使用
在ratel构建过程中，使用``-D --decompile``即可产生RDP项目，此时参数``-o --output``指向输出的RDP的输出文件夹，无``-o``会自动计算。如果使用RatelWebAPI操作，那么在``extend parameter``中加入上述参数即可


产生的文件夹包括，所有非代码文件解压文件、所有dex反编译为smali文件、apk重编译脚本文件。使用AndroidStudio或者idea打开这个文件夹，并标记所有smali文件夹为``source directory``,即可通过IDE进行代码修改，甚至可通过``smali idea``插件进行源码调试

代码修改完成后，执行apk重编译脚本文件夹下的脚本，即可产生新的apk，该apk可以直接安装


## 其他
1. 如果想类似apktool一样开启debug，ratel本身就支持开启debug，在ratel构建过程加入``-d --debug``参数即可。
