给定 APK 文件,如何检测应用程序是否使用 React Native?
How do I detect if the app uses React Native, given APK file?
我从GooglePlay下载了APK文件,想知道应用程序的开发是否使用了React Native库。什么是快速稳定的方法呢? (如果它是我以后可以自动化的东西会更好 - 但这种自动化本身超出了这个问题的范围。)
我可以为您提供 2 种解决方案:
- 解决方案 1
您可以使用 dex2jar。
打开生成的jar文件,如果有文件夹/com/facebook/react/
.
,可以查看是否使用了React Native
解决方案 2
- 将您的应用程序 APK
app.apk
重命名为 app.zip
- 解压缩您的 zip 文件
- 使用
dexdump
来自 AndroidSDK
$ANDROID_HOME/build-tools//dexdump:
dexdump classes.dex`
- 在 dexdump
的输出中搜索 com/facebook/react
Not sure if this proven way.
从商店将 apk 下载到您的 PC,我使用了 APK Downloader FireFox 扩展(如果您还没有应用 apk)。
用Zip软件打开apk(我在Linux所以用的是方舟)。
现在您可以看到项目的部分内容。
转到 res->layout
并搜索 com_facebook...
,在我的例子中是 com_facebook_activity_layout.xml
。
如果您的布局中包含 com_facebook
,则此 apk 是使用 React 创建的。
接受的解决方案肯定会给您正确的答案,但速度会很慢。这是我最初所做的,它的速度不足以满足我的需求,因为我 运行 这个脚本跨越了数百个 APK。我开发了一个替代解决方案并在原始解决方案通过 5% 的 APK 之前执行了它。
我不喜欢检查名称中有 com_facebook 的布局(另一个预先存在的解决方案)的原因是,应用程序完全有可能使用另一个包含以该字符串开头的布局文件。我不知道有没有误报,但似乎很可能会有一些。
相反,我检查 libreactnativejni.so
是否存在,我不得不想象只有在使用 React Native 时才会使用它。 (我最初是在寻找 libyoga.so,但我有一些误报,我想是因为有一个同名的日志库。)
具体来说,我正在使用 bash 脚本中 Mac 的条件(我认为它是可移植的,但尚未测试):
if [ "$(unzip -l $apkfile | grep libreactnativejni.so | wc -l)" -gt "0" ]
then
echo "Uses RN"
fi
最简单的解决方案
在Android Studio中打开APK 并检查 classes.dex
文件(可以是多个文件)。
您正在寻找的是:
- React Native - 你找到文件夹
com\facebook\react
了吗?
- Flutter - 你找到文件夹
io\flutter
了吗?
- Xamarin - 找到文件夹
com\xamarin\
了吗?
在 Android Studio 中可能看起来像这样
我从GooglePlay下载了APK文件,想知道应用程序的开发是否使用了React Native库。什么是快速稳定的方法呢? (如果它是我以后可以自动化的东西会更好 - 但这种自动化本身超出了这个问题的范围。)
我可以为您提供 2 种解决方案:
- 解决方案 1
您可以使用 dex2jar。
打开生成的jar文件,如果有文件夹/com/facebook/react/
.
解决方案 2
- 将您的应用程序 APK
app.apk
重命名为app.zip
- 解压缩您的 zip 文件
- 使用
dexdump
来自 AndroidSDK
$ANDROID_HOME/build-tools//dexdump:
dexdump classes.dex` - 在 dexdump 的输出中搜索
com/facebook/react
- 将您的应用程序 APK
Not sure if this proven way.
从商店将 apk 下载到您的 PC,我使用了 APK Downloader FireFox 扩展(如果您还没有应用 apk)。
用Zip软件打开apk(我在Linux所以用的是方舟)。 现在您可以看到项目的部分内容。
转到 res->layout
并搜索 com_facebook...
,在我的例子中是 com_facebook_activity_layout.xml
。
如果您的布局中包含 com_facebook
,则此 apk 是使用 React 创建的。
接受的解决方案肯定会给您正确的答案,但速度会很慢。这是我最初所做的,它的速度不足以满足我的需求,因为我 运行 这个脚本跨越了数百个 APK。我开发了一个替代解决方案并在原始解决方案通过 5% 的 APK 之前执行了它。
我不喜欢检查名称中有 com_facebook 的布局(另一个预先存在的解决方案)的原因是,应用程序完全有可能使用另一个包含以该字符串开头的布局文件。我不知道有没有误报,但似乎很可能会有一些。
相反,我检查 libreactnativejni.so
是否存在,我不得不想象只有在使用 React Native 时才会使用它。 (我最初是在寻找 libyoga.so,但我有一些误报,我想是因为有一个同名的日志库。)
具体来说,我正在使用 bash 脚本中 Mac 的条件(我认为它是可移植的,但尚未测试):
if [ "$(unzip -l $apkfile | grep libreactnativejni.so | wc -l)" -gt "0" ]
then
echo "Uses RN"
fi
最简单的解决方案
在Android Studio中打开APK 并检查 classes.dex
文件(可以是多个文件)。
您正在寻找的是:
- React Native - 你找到文件夹
com\facebook\react
了吗? - Flutter - 你找到文件夹
io\flutter
了吗? - Xamarin - 找到文件夹
com\xamarin\
了吗?
在 Android Studio 中可能看起来像这样