You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何列出Expo项目构建产物包含的所有Android原生依赖?

获取Expo项目Android原生全量依赖的可靠方案

所有从最终二进制反编译推依赖的方式都存在误差,最准确的数据源来自Gradle构建阶段的依赖解析结果——这是打包流程中唯一决定哪些依赖会被打进最终产物的环节,结果100%和你构建出的aab/apk内包含的依赖一致,不存在遗漏或误判。

操作步骤

  • 首先在Expo项目根目录执行命令生成原生构建骨架:
expo prebuild --platform android --clean

这个命令会自动执行所有config plugin的注入逻辑,把package.json中引用的所有Expo模块、React Native核心、第三方原生模块的依赖配置全部落地到android目录的Gradle文件中。你之前看到的Gradle里调用Node解析模块路径的代码,会在prebuild阶段和后续Gradle执行阶段自动求值,不需要手动运行。

注意:prebuild操作不会修改你的JS/TS业务代码,执行完成后如果不需要原生目录,直接删除android文件夹即可恢复原有Expo项目结构。

  • 进入生成的android目录,执行Gradle内置的依赖查询命令,拉取正式发布构建变体下的全量依赖:
cd android
./gradlew app:dependencies --configuration releaseRuntimeClasspath > raw_deps.log

这里用releaseRuntimeClasspath配置的原因是,这个配置项就是Gradle打包release版aab/apk时,用来筛选所有要打入包内依赖的官方配置,所有传递依赖、版本冲突仲裁后的最终结果都会完整输出,包括你提到的com.facebook.react相关依赖、所有Expo SDK自带的原生依赖、你手动接入的第三方原生库,没有遗漏。

  • 如果需要直接输出你要的com.company.example:identifier:x.y.z格式的去重列表,直接执行过滤命令即可:
./gradlew app:dependencies --configuration releaseRuntimeClasspath | grep -E '^[|+\\ ]+[a-zA-Z0-9.]+:[a-zA-Z0-9.-]+:[a-zA-Z0-9.-]+' | sed 's/^[|+\\ ]*//g' | sort -u > final_android_deps.txt

生成的final_android_deps.txt就是可以直接使用的全量依赖清单。

常见误区说明

  • 反编译aab后通过包名抓取依赖的方式不可靠:代码混淆会篡改类的包名路径,多个依赖可能存在包名交叉,同时自动生成的R类、BuildConfig类的包名和依赖实际Maven坐标并不一一对应,结果必然存在误差。
  • AndroidManifest.xml不会列出所有依赖:只有声明了四大组件、权限等配置的依赖才会在合并后的Manifest里留痕,大量基础工具类依赖不会出现在Manifest中,用它统计必然缺项。
  • 如果你使用EAS云端构建,不需要本地跑prebuild,只需要在eas.json的构建hook中添加上述Gradle依赖查询命令,把生成的依赖清单作为构建产物导出即可,结果和本地执行完全一致。

内容的提问来源于stack exchange,提问作者devGG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:03:28