迁移到Gradle 3.0的Android插件后,OSS许可插件(https://developers.google.com/android/guides/opensource)不再包含项目库模块依赖项中的许可。只有“app”模块。
我正在使用com.google.gms:oss-licenses:0.9.1
和com.google.android.gms:play-services-oss-licenses:11.8.0
如果我将'插件'应用于我的所有模块,则会在每个模块的原始文件夹中生成third_party_license
数据。但最终只有来自app模块的数据最终会出现在APK中。
此问题是否有解决方法?
答案 0 :(得分:1)
是的,这是正确的。
根据我对插件工作原理的搜索,插件会将数据生成到工件的res/raw
文件夹中(aar
或apk
,但不会生成jar
文件)基于它可以从库中获取的POM
文件。然后剩余的合并由Gradle Android插件完成,而不是由OSS许可插件完成,后者合并来自所有源(依赖库,模块,主应用程序等)的res
文件夹。然而,这是问题,在合并时,Android Gradle插件会选择一个,如果有相同资源的重复(link到解释),并且所选择的一个基于优先级,这意味着app模块和lib模块正在生成重复的R.raw.third_party_license
资源,来自app模块的资源比模块中的资源具有更高的优先级,因此不包括来自模块的许可信息。< / p>
有几种解决方法:
implementation 'com.mygroup:library:1.0'
文件中删除。这将生成库模块的build.settings
文件,从而使插件读取并包含它的库许可证。这意味着在编译应用程序模块之前应该编译和发布库,但是当发生错误时,它可能会导致一些奇怪的编译问题和混淆。不幸的是,我认为还有一种方法可行,但事实并非如此。通过将库模块中的依赖项更改为POM
而不是api
。这会将库依赖项暴露给app模块依赖项,但会增加项目的构建时间。但最后它没有正确生成原始资源,因为OSS许可插件似乎只从库的POM文件中读取依赖项,在这种情况下,即使库模块依赖项,也不生成implementation
文件暴露了。可能应该将此作为增强或错误请求发布给插件的开发人员。