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

React Native Expo应用第三方开源许可证合规上报问题咨询

React Native + Expo 应用开源依赖合规指南

一、核心义务与许可证要求

开源依赖的合规义务完全取决于其附带的许可证类型,核心要求分为以下几类:

  • 宽松许可证(MIT、Apache 2.0、BSD等):
    • 必须保留原库的版权声明和许可证文本
    • 分发应用时,需在文档或应用内(如「关于」页面)注明使用了这些开源库
    • 可自由修改、闭源分发,无需开源你的应用代码
  • Copyleft许可证(GPLv3、LGPLv3、AGPLv3等):
    • GPLv3:如果你的应用静态链接了该库,且以闭源商业形式分发,必须开源整个应用的代码
    • LGPLv3:若以动态链接方式使用,可豁免开源你的应用,但需允许用户替换该库的版本;若静态链接,仍需遵循GPL类要求
    • AGPLv3:若应用提供网络服务,即使闭源也需开源相关代码
  • 其他特殊许可证(MPL、CC等):需严格遵循许可证内的条款,比如MPL要求修改后的库代码需以MPL许可证开源,但你的应用其他部分不受限

所有场景下,都不得篡改原库的版权标识或许可证文本,若修改了开源库代码,需在分发时注明修改内容。

二、需要上报的依赖范围

必须覆盖所有被应用实际打包使用的依赖——包括直接依赖和间接子依赖,但无需包含未被使用的开发依赖或构建临时依赖:

  • 仅上报npm ls --depth=0的顶层依赖是不够的:子依赖可能带有高风险的Copyleft许可证,会直接影响应用合规
  • 排除开发依赖:执行npm ls --production可只列出生产环境依赖(即最终打包进应用的部分),这是核心排查范围
  • 过滤未使用的依赖:package-lock.json中的2万余个库,很多是Expo构建过程中临时下载但未实际打包的冗余依赖,可使用depcheck工具检测并移除未被应用引用的依赖,减少合规工作量

三、Expo Android构建的Java依赖处理

npm ls确实无法覆盖Expo构建Android时自动下载的Java/Kotlin原生依赖,这类依赖的合规处理方式:

  1. 执行expo prebuild生成Android原生项目,查看android/app/build.gradle和gradle.lockfile中的依赖列表
  2. Expo官方模块(如expo-camera、expo-location)大多采用MIT许可证,可直接查看其GitHub仓库的LICENSE文件确认
  3. Android SDK相关依赖的许可证,可在Android Studio的SDK管理器中查看对应组件的许可协议

四、高效获取合规清单(版本+许可证)

推荐用自动化工具替代手动整理:

  • 生成许可证清单:执行npx license-checker --production --csv --out licenses.csv,该命令会自动扫描生产依赖,输出包含库名称、版本、许可证、版权信息的CSV文件,直接用于上报
  • 清理冗余依赖:执行npx depcheck,识别并移除package.json中未被应用使用的依赖,缩小合规范围
  • 补充原生依赖:通过expo prebuild生成原生项目后,分别提取iOS(Podfile.lock)和Android的依赖信息,补充到合规清单中

五、关键避坑点

  • 优先排查许可证为GPLv3、AGPLv3的依赖,若应用是闭源商业产品,需替换为宽松许可证的替代库
  • 对于标注为UNLICENSED或SEE LICENSE IN <file>的依赖,必须找到对应的许可证文件确认条款,避免潜在风险
  • 留存所有依赖的许可证文本和版权声明,若许可证要求,需在应用的「关于」页面或随附文档中公示开源依赖信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:02:58