Android 如何检测应用程序是否使用给定APK文件的React Native?
我从GooglePlay下载了APK文件,想知道应用程序的开发是否使用了React本机库。快速而稳定的方法是什么?(如果我以后可以实现自动化,那就更好了,但这种自动化本身超出了这个问题的范围。)我可以为您提供两种解决方案:Android 如何检测应用程序是否使用给定APK文件的React Native?,android,react-native,apk,react-native-android,decompiling,Android,React Native,Apk,React Native Android,Decompiling,我从GooglePlay下载了APK文件,想知道应用程序的开发是否使用了React本机库。快速而稳定的方法是什么?(如果我以后可以实现自动化,那就更好了,但这种自动化本身超出了这个问题的范围。)我可以为您提供两种解决方案: 解决方案1 你可以用。 当您打开生成的jar文件时,您可以检查它是否使用React-Native,如果有一个文件夹/com/facebook/React/ 解决方案2 将应用程序APKapp.APK重命名为app.zip 解压缩你的zip文件 使用AndroidSDK$
- 解决方案1
/com/facebook/React/
- 解决方案2
- 将应用程序APK
重命名为app.APK
app.zip
- 解压缩你的zip文件
- 使用Android
$Android\u HOME/build tools//dextumpSDK
dextump classes.dex>中的:
`dextump
- 在dexdump的输出中搜索
com/facebook/react
res->layout
并搜索com\u facebook…
,在我的例子中是com\u facebook\u activity\u layout.xml
。
如果你有一个布局中有
com\u facebook
,那么这个apk是用React创建的 公认的解决方案肯定会为您提供正确的答案,但速度会非常缓慢。这是我最初做的,但速度不够快,因为我在数百个APK上运行这个脚本。我开发了一个替代解决方案,并在原始解决方案通过5%的APK之前执行它
我不喜欢检查名称中有com_facebook的布局(另一个预先存在的解决方案)的原因是,应用程序使用另一个facebook SDK(包含以该字符串开头的布局文件)是完全合理的。我不知道有什么误报,但似乎有一定的可能
相反,我检查是否存在libreactnativejni。因此,我必须想象只有在使用React Native时才会使用。(我最初是在寻找libyoga.so,但我有一些误报,我想是因为有一个同名的日志库。)
具体来说,我使用的是bash脚本中Mac上的这种情况(我认为它是可移植的,但尚未测试):
为什么不使用dex2jar反编译apk并查看应用程序中使用的包。了解此详细信息的用例是什么?@suman curiosityand如果包名被混淆了?com.facebook.react不会被混淆(当然是正确的);否则它将无法被调用/初始化。是否可以将react native JS反编译回JS?@kojow7注释没有问题。请不要回答。✅ 提示:AndroidStudio可以“分析APK”,因此您可以在菜单中执行该选项,或者将APK拖放到其中。然后单击*.dex文件我不想更改已接受的答案的唯一原因是因为我没有时间亲自检查它(就像我问原始问题和从事与之相关的项目时那样)。libreactnativejni.so
做什么?一些应用程序有那些/com/facebook/react/
东西,但没有这个SO文件…共享对象库是react原生Android的许多布局功能的动力(在幕后它实际上使用libyoga.SO
,但其他应用程序也可以包括这些,而不使用RN)。com.facebook.react软件包不仅仅是RN的东西,尽管我自己还没有见过这个案例。您是否有具有该属性的示例应用程序?
if [ "$(unzip -l $apkfile | grep libreactnativejni.so | wc -l)" -gt "0" ]
then
echo "Uses RN"
fi