给定 APK 文件,我如何检测应用程序是不是使用 React Native?
Posted
技术标签:
【中文标题】给定 APK 文件,我如何检测应用程序是不是使用 React Native?【英文标题】:How do I detect if the app uses React Native, given APK file?给定 APK 文件,我如何检测应用程序是否使用 React Native? 【发布时间】:2017-11-02 06:59:40 【问题描述】:我从 Google Play 下载了 APK 文件,想知道应用程序的开发是否使用了 React Native 库。有什么快速稳定的方法来做到这一点? (如果它是我以后可能自动化的东西会更好 - 但这种自动化本身超出了这个问题的范围。)
【问题讨论】:
为什么不直接使用 dex2jar 反编译 apk 并查看应用程序内部使用的包。 知道这个细节的用例是什么? @suman 好奇心 【参考方案1】:我可以为您提供 2 个解决方案:
解决方案 1您可以使用dex2jar。
打开生成的jar文件时,如果有文件夹/com/facebook/react/
,可以查看是否使用React Native。
解决方案 2
-
将您的应用程序 APK
app.apk
重命名为 app.zip
解压缩您的 zip 文件
使用dexdump
from androidSDK
$ANDROID_HOME/build-tools//dexdump:
dexdump classes.dex`
在 dexdump 的输出中搜索com/facebook/react
【讨论】:
如果包名被混淆了? com.facebook.react 不会被混淆(正确地保护);否则它将无法被调用/初始化。 react native JS 可以反编译回 JS 吗? @kojow7 cmets 没有问题。随意不回答。 ✅ 提示:Android Studio 可以“分析 APK”,因此您可以在菜单中执行该选项,或者只需将 APK 拖放到其中。然后点击*.dex文件【参考方案2】:公认的解决方案肯定会为您提供正确的答案,但速度会很慢。这是我最初所做的,由于我在数百个 APK 上运行此脚本,因此速度不足以满足我的需求。我开发了一个替代解决方案并在原始解决方案通过 5% 的 APK 之前执行它。
我不喜欢检查名称中包含 com_facebook 的布局(另一个预先存在的解决方案)的原因是,应用程序使用另一个包含以该字符串开头的布局文件的 Facebook SDK 是完全合理的.我不知道有任何误报,但似乎很有可能会有一些误报。
相反,我检查libreactnativejni.so
的存在,我必须想象只有在使用 React Native 时才会使用它。 (我最初是在寻找 libyoga.so,但我有一些误报,我认为是因为有一个同名的日志库。)
具体来说,我正在使用 bash 脚本中的 Mac 上的这个条件(我认为它是可移植的,但尚未测试):
if [ "$(unzip -l $apkfile | grep libreactnativejni.so | wc -l)" -gt "0" ]
then
echo "Uses RN"
fi
【讨论】:
我不想更改已接受答案的唯一原因是因为我没有时间亲自检查它(就像我在提出原始问题并从事与它)。libreactnativejni.so
是做什么的?有些应用程序有那些/com/facebook/react/
的东西,但没有这个 SO 文件...
共享对象库为 React Native Android 的许多布局功能提供了动力(在幕后它实际上使用了libyoga.so
,但其他应用程序也可以在不使用 RN 的情况下包含它)。 com.facebook.react 包的内容不仅仅是 RN 的东西,虽然我自己没有见过这个案例。您有具有该属性的示例应用吗?【参考方案3】:
不确定这是否经过验证。
从商店下载apk到你的电脑,我用APK DownloaderFireFox扩展(如果你还没有应用apk的话)。
使用 Zip 软件打开 apk(我在 Linux 上,所以我使用了 Ark)。 现在您可以看到项目的部分内容了。
转到res->layout
并搜索com_facebook...
,在我的例子中是com_facebook_activity_layout.xml
。
如果你有一个带有com_facebook
的布局,那么这个 apk 是用 React 创建的。
【讨论】:
【参考方案4】:最简单的解决方案
在Android Studio中打开APK并检查classes.dex
-files(可以更多一个文件)。
您正在寻找的是:
com\facebook\react
了吗?
Flutter - 你找到文件夹 io\flutter
了吗?
Xamarin - 你找到文件夹 com\xamarin\
吗?
在 Android Studio 中可能看起来像这样
【讨论】:
以上是关于给定 APK 文件,我如何检测应用程序是不是使用 React Native?的主要内容,如果未能解决你的问题,请参考以下文章