【问题标题】: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 好奇心

标签: android react-native apk react-native-android decompiling


【解决方案1】:

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

  • 解决方案 1

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

  • 解决方案 2

    1. 将您的应用程序 APK app.apk 重命名为 app.zip
    2. 解压缩您的 zip 文件
    3. 使用dexdump from AndroidSDK$ANDROID_HOME/build-tools//dexdump:dexdump classes.dex`
    4. 在 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(可以更多一个文件)。 您正在寻找的是:

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

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

    【讨论】:

      猜你喜欢
      • 2018-11-07
      • 2020-05-14
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多