【问题标题】:Gradle - DependencySubstitution for Android App with a LibraryGradle - 带有库的 Android 应用程序的 DependencySubstitution
【发布时间】:2016-04-22 12:32:01
【问题描述】:

我有一个 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 时,仍在使用二进制工件。这里有什么问题?

here is the full source code

另外有趣的是,如果我将依赖替换代码移动到 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

【问题讨论】:

标签: android gradle android-gradle-plugin dependency-management


【解决方案1】:

我终于找到了一个可行的解决方案。如果我反其道而行之,那会以某种方式起作用。而不是用项目模块替换二进制文件

substitute module("com.example.konstantin.mylibrary:mylibrary:${mylibraryVersion}") with project(':mylibrary')

我可以用二进制替换项目模块:

substitute project(':mylibrary') with module("com.example.konstantin.mylibrary:mylibrary:${mylibraryVersion}")

而且比魔法更有效。 完整的工作代码在separate branch of an example repo

但这不是一个理想的解决方案,因为我必须始终在 settings.gradle 中链接项目模块,并且不检查就无法构建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2012-11-04
    • 2013-06-17
    相关资源
    最近更新 更多