如何从React Native应用获取Java/Kotlin源码及从RN构建的APK提取源代码?
React Native 源码获取相关问题解答
问题1:如何从React Native应用中获取对应的Java或Kotlin源代码
React Native项目的原生代码默认存储在项目根目录的android文件夹下:
- 如果你持有完整的React Native项目开发源码,直接打开
android/app/src/main/java/路径,即可找到项目对应的Java或Kotlin业务源码,android目录下的其他子文件夹也包含React Native框架本身、第三方原生依赖的原生代码。 - 如果只有打包后的应用产物,无法直接获取开发阶段的原始原生代码,只能通过反编译手段尝试还原代码逻辑。
问题2:从React Native构建的APK中提取源代码的解决方案
你用dex2jar、apktool反编译后找不到对应源码,是因为React Native应用的核心业务逻辑大多基于JS/TS开发,打包后会被编译为index.android.bundle文件存放在APK的assets目录下,并不存储在dex文件中,所以反编译dex只能拿到React Native框架、第三方原生插件的原生代码,无法找到业务层源码。具体提取方法如下:
提取原生Java/Kotlin代码
- 先执行
apktool d 你的目标APK文件名.apk命令解压APK,得到对应的解压文件夹 - 找到文件夹内的
classes.dex文件(部分APK会存在多个dex文件,全部提取即可),使用dex2jar执行命令d2j-dex2jar classes.dex得到对应的jar包 - 用jd-gui等反编译工具打开生成的jar包,即可查看还原后的Java代码。如果APK开启了代码混淆,还原后的代码会显示无意义的变量名、类名,只能还原逻辑无法得到和原始源码完全一致的内容。
提取JS/TS业务层代码
- 解压APK后进入
assets目录,找到index.android.bundle文件,这就是打包后的JS业务代码包 - 如果该bundle未做混淆加密,可直接用文本编辑器打开查看逻辑,也可以用
prettier等工具格式化后阅读 - 如果bundle做了混淆处理,可先用js-beautify工具格式化代码,再结合业务逻辑反向推导功能实现,无法100%还原为开发阶段的原始TS/JS源码。
注意:对他人所有的APK进行反编译、提取源码的行为需要符合当地法律法规以及对应软件的使用许可协议,请勿用于非法用途。
内容的提问来源于stack exchange,提问作者Horando
相关产品推荐
相关产品推荐

