如何在应用APK文件的情况下检测应用是否使用React Native?

Max*_*kov 9 android decompiling apk react-native react-native-android

我从Google Play下载了APK文件,想知道应用程序的开发是否使用了React Native库.什么是快速稳定的方法呢?(如果我以后可以自动化的话会更好 - 但这种自动化本身超出了这个问题的范围.)

Oli*_*erM 14

我可以为您提供2种解决方案:

  • 解决方案1

你可以使用dex2jar.当您打开生成的jar文件时,如果有文件夹,您可以检查它是否使用React Native /com/facebook/react/.

  • 解决方案2

    1. 将您的应用程序APK重命名app.apk为app.zip
    2. 解压缩您的zip文件
    3. 使用dexdumpAndroid SDK$ ANDROID_HOME/build-tools // dexdump :dexdump classes.dex`
    4. 搜索com/facebook/react在dexdump的输出

  • @ kojow7评论没有错.随意不回答. (3认同)
  • ✅ 提示:Android Studio 可以“分析 APK”,因此您可以在菜单中执行该选项,或者只需将 APK 拖放到其中即可。然后点击*.dex文件 (2认同)

jac*_*ack 6

接受的解决方案肯定会给你正确的答案,但它会很慢。这是我最初所做的,但它的速度不足以满足我的需求,因为我在数百个 APK 上运行这个脚本。我开发了一个替代解决方案,并在原始解决方案通过 5% 的 APK 之前执行了它。

我不喜欢检查名称中包含 com_facebook 的布局(另一个预先存在的解决方案)的原因是,应用程序使用另一个包含以该字符串开头的布局文件的 Facebook SDK 是完全合理的。我不知道有任何误报,但似乎很可能会有一些。

相反,我会检查是否存在,libreactnativejni.so我必须想象只有在使用 React Native 时才会使用它。(我最初是在寻找 libyoga.so,但我有一些误报,我想是因为有一个同名的日志库。)

具体来说,我正在 Mac 上的 bash 脚本中使用这种情况(我认为它是可移植的,但尚未测试):

if [ "$(unzip -l $apkfile | grep libreactnativejni.so | wc -l)" -gt "0" ]
then 
echo "Uses RN"
fi
Run Code Online (Sandbox Code Playgroud)


Har*_*jem 6

最简单的解决方案

在Android Studio中打开APK并检查-files(可以是多个文件)。您正在寻找的是:classes.dex

  • React Native - 你找到文件夹了吗com\facebook\react?
  • Flutter - 你找到文件夹了吗io\flutter?
  • Xamarin-你找到文件夹了吗com\xamarin\?

在 Android Studio 中它可能看起来像这样

Android Studio Apk 文件