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

迁移至Gradle 3.0 Android插件后OSS许可证插件无法收集库模块许可证的解决方案咨询

解决OSS许可证插件仅识别App模块的问题

我之前在升级Gradle插件到3.0+时也碰到过一模一样的问题,折腾了好几种方案,这里分享几个可行的解决思路:

方案1:自定义Gradle任务合并所有模块的许可证资源

默认情况下,只有App模块的res/raw资源会被打包进APK,所以我们可以写一个Gradle任务,把所有库模块生成的许可证文件复制到App模块的raw目录下,这样打包时就能包含所有内容。

在App模块的build.gradle中添加以下任务:

task copyLibraryLicenses(type: Copy) {
    // 遍历所有子库模块
    subprojects.each { subproject ->
        def licenseDir = subproject.file("src/main/res/raw")
        if (licenseDir.exists()) {
            from licenseDir
            include "third_party_licenses*"
            // 重命名文件避免冲突,比如加上模块名前缀
            rename { String fileName ->
                "${subproject.name}_${fileName}"
            }
        }
    }
    // 将文件复制到App模块的raw目录
    into "${projectDir}/src/main/res/raw"
}

// 确保合并任务在资源预处理前执行
preBuild.dependsOn copyLibraryLicenses

执行这个任务后,所有库模块的许可证文件都会被复制到App模块,OSS插件就能读取到所有依赖的许可证信息了。

方案2:升级到最新版的OSS Licenses库

你当前使用的0.9.1和11.8.0版本比较老旧,Google在后续版本中修复了跨模块识别的问题。建议直接升级依赖版本,只在App模块应用插件即可自动收集所有模块的依赖许可证。

首先更新依赖:

implementation 'com.google.android.gms:play-services-oss-licenses:17.0.0'

(可以根据需要选用更高的稳定版本)

然后只在App模块的build.gradle中应用插件,不需要在库模块中添加:

apply plugin: 'com.google.gms.oss-licenses-plugin'

新版本的插件会自动扫描整个项目的所有依赖(包括库模块的依赖),生成完整的许可证数据,无需额外配置。

方案3:手动整合许可证信息(适合小项目)

如果不想修改Gradle配置或者升级版本,也可以手动处理:

  • 先构建所有库模块,找到每个模块src/main/res/raw下的third_party_licenses和third_party_licenses_metadata.xml文件
  • 将这些文件的内容合并到App模块的对应文件中(注意不要覆盖App模块自身的许可证内容)

不过这个方法比较繁琐,每次依赖变更都需要重新手动更新,只适合依赖较少的小项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:39:56