Gradle - 使用DependencySubstitution为带有库的Android应用程序进行依赖项替换

6
我有一个 Android 应用项目,其中包含一个单独的 Android 库模块,已经作为二进制文件发布。我想添加一种能力,可以在源代码构建库和使用已发布的构件之间切换 Gradle。 Android 应用默认依赖于二进制构件: compile "com.example.konstantin.mylibrary:mylibrary:${mylibraryVersion}" 现在,我想用源代码替换我的二进制构件,所以我在根 build.gradle 文件中添加了以下代码:
configurations.all {
resolutionStrategy {
    dependencySubstitution {
        substitute module("com.example.konstantin.mylibrary:mylibrary:${mylibraryVersion}") with project(':mylibrary')
    }
}

然而,当我试图构建gradle时,它仍然使用二进制构件。这里有什么问题? 这是完整的源代码 另外有趣的一点是,如果我将依赖项替换代码移到allprojects部分或应用程序模块build.gradle文件中,则Gradle构建会失败,并显示以下消息:
Error:Module version MyApplication:app:unspecified, configuration '_debugCompile' declares a dependency on configuration 'default' which is not declared in the module descriptor for MyApplication:mylibrary:unspecified

1
好像这个Android插件的bug可能与问题有关。 - akd005
1个回答

4
最终我找到了一个可行的解决方案。以某种方式,如果我反过来做,它就能起作用。而不是用项目模块替换二进制。
substitute module("com.example.konstantin.mylibrary:mylibrary:${mylibraryVersion}") with project(':mylibrary')

我可以用二进制替换项目模块:
substitute project(':mylibrary') with module("com.example.konstantin.mylibrary:mylibrary:${mylibraryVersion}")

然后魔法就起作用了。完整的工作代码可以在示例仓库的单独分支中找到。

然而,这并不是一个理想的解决方案,因为我必须始终在settings.gradle中链接项目模块,并且不能在没有检出它的情况下构建。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接