如何从apk文件中获取React Native代码

15

我用React Native写了一个应用程序,但在开发快结束时,我的硬盘崩溃了,现在我只有APK文件,我是否可以从APK文件中恢复React Native代码呢?


3
大多数人在某个时候都会以艰难的方式学习到为什么远程代码库很重要。 - Kai
哈哈,上面的评论 - Rohit Mahto
3个回答

39

当您解压apk文件时,在assets文件夹内,index.android.bundle文件是打包的React源代码。将index.android.bundle重命名为something.js。

由于something.js是一个打包的文件(经过压缩/混淆),请使用一些JavaScript美化工具(例如unuglifier/jsbeautifier)使其易读。(也可以尝试jsnice)

虽然不完美,但总比没有好。


8

不,您无法检索实际的代码,但可以获取一些反编译的代码。

安装apktool:

适用于Macbook:

brew install apktool

Linux系统

apt-get install -y apktool

针对Windows

你可以查看文档来了解在Windows上的安装步骤。

使用方法

在安装apktool后,通过在终端中运行以下命令来解压缩apk文件:

apktool  d /pathOfApkFile.apk

接下来,您将在 pathOfApkFile/assets/index.android.bundle 找到 index.android.bundle 文件。

然后,您可以使用react-native-decompiler 来反编译index.android.bundle文件。

反编译index.android.bundle文件

您可以通过运行此命令来反编译index.android.bundle

npx react-native-decompiler -i ./index.android.bundle -o ./output

完成后,你将在./output目录中获得JS反编译文件


4
很抱歉,您不能检索React Native代码,因为如果您反编译apk文件,它将返回Android的Java代码,但没有React Native代码。
因为React Native会将代码转换为本地语言,具体取决于您要构建的操作系统是Android还是iOS。

2
是的,那是真的,但我希望我能以某种方式把它找回来 :( - ristapk
8
如 @GnoStiC 的回答所述,所有内容都打包并压缩在 assets/index.android.bundle 文件中。请 @ristapk 修改您已接受的答案,以便未来到达此处的每个人能够理解。 - Pablo Recalde
你有参考资料能够证明这就是实际发生的吗?从其他答案中我了解到,它并不是将你的代码转换成Java,而是在现有解释器的基础上添加另一个解释器来读取JavaScript,将其解释为Java,然后再解释为本地代码。 - AaA
我们可以反编译 assets/index.android.bundle 文件。 - Hu Zhi Xing
这是错误的,React Native并不会将JavaScript代码转译成原生平台,相反它会将JavaScript代码打包到最终的应用程序中,并运行该JavaScript代码。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接