【问题标题】:Add productFlavor to experimental Android gradle plugin library将 productFlavor 添加到实验性 Android gradle 插件库
【发布时间】:2015-10-05 20:23:53
【问题描述】:

我有一个使用实验性 gradle 插件的项目,即0.2.0。当我没有productFlavor 时,我可以在 Android Studio 中完美地集成一个库模块,并且一切正常。但是当库有productFlavor 时,我的主项目找不到库类。

这个fix 似乎不适用于实验性 gradle 插件。有谁知道如何使用新插件制作风味?

图书馆:

android.productFlavor {
    create ('flavor') {
        ...
    }
}

项目:

...

dependencies {
    compile project(':mylibrary')
}

【问题讨论】:

    标签: android android-gradle-plugin build.gradle gradle-experimental


    【解决方案1】:

    这可能有帮助吗?

    图书馆出版

    默认情况下,库仅发布其发布变体。这个变种 将被所有引用该库的项目使用,无论哪个 他们自己构建的变体。这是一个暂时的限制,因为 我们正在努力消除 Gradle 限制。

    您可以使用

    控制发布哪个变体
    android { defaultPublishConfig "debug" }
    

    请注意,此发布配置名称引用了完整的 变体名称。发布和调试只适用于没有 口味。如果您想更改默认发布的变体,同时 使用风味,你会写:

    android {defaultPublishConfig "flavor1Debug" }
    

    还可以发布库的所有变体。我们是 计划在使用正常的项目到项目时允许这样做 依赖项(如上所示),但由于现在这是不可能的 Gradle 中的限制(我们也在努力修复这些限制)。 默认情况下不启用所有变体的发布。要启用它们:

    android {publishNonDefault true } 
    

    重要的是要意识到发布多个变体意味着 发布多个 aar 文件,而不是发布一个包含 多种变体。每个 aar 包装都包含一个变体。 发布变体意味着将此 aar 用作输出 Gradle 项目的工件。然后可以在以下情况下使用 发布到 Maven 存储库,或者当另一个项目创建一个 对库项目的依赖。

    Gradle 有一个“默认”工件的概念。这是一个 写作时使用:

    compile project(':libraries:lib2')
    

    要创建对另一个已发布工件的依赖项,您需要 指定使用哪一个:

    dependencies {
        flavor1Compile project(path: ':lib1', configuration: 'flavor1Release')
        flavor2Compile project(path: ':lib1', configuration: 'flavor2Release') 
    }
    

    重要提示:请注意,发布的配置是完整的变体, 包括构建类型,并且需要这样引用。 重要提示:启用非默认发布时,Maven 发布插件将这些额外的变体作为额外的发布 包(带分类器)。这意味着这不是真的 与发布到 Maven 存储库兼容。你应该要么 将单个变体发布到存储库或启用所有配置 发布项目间依赖关系。

    来自here

    【讨论】:

    • 我已经尝试过this
    【解决方案2】:

    语法错误。

    对于实验性插件 (0.2.1),风格是在 android 块之外定义的,正确的语法是 android.productFlavors

    model {
        android {
    
        }
    
        android.productFlavors {
            create("flavor") {
    
            }
        }
    }
    

    【讨论】:

    • 这个例子在0.2.1 上对你有用吗?当然,使用正确的语法。 android.productFlavors 在库中,compile project(':mylibrary') 在主项目中。
    • 语法是正确的,它适用于应用程序模块。我不知道它如何与图书馆一起工作。在我看来,您应该在主模块中移动风味(我从未在库中见过风味)
    • 问题是我有一个包含一些本机 C 代码的库。此 C 代码在链接时使用静态库,我需要在 build.gradle 文件中指定它。我需要为每个架构都这样做,我知道的唯一方法是:github.com/googlesamples/android-ndk/blob/master/…
    • 在官方页面的已知限制中可以发现:不支持创建和依赖静态库。不确定问题是否与此有关。
    • 但它确实有效!他们有自己的官方示例。我编译了我的并且它有效。我需要的只是能够在图书馆中使用它。
    【解决方案3】:

    事情有点复杂。 我已经在 gradle experimental 0.8.0 上测试过

    关于你需要的库:

    model{
        android {
        ...
        publishNonDefault true
    
         productFlavors {
                    create("flavor1") {
                    }
                    create("flavor2") {
                    }
                }
        }
    }
    

    在您需要的应​​用上:

    model {
        android {
        ...
        publishNonDefault true
    
         productFlavors {
                    create("flavor1") {
                    }
                    create("flavor2") {
                    }
                }
        }
    }
    //after the model is closed !!
    configurations {
        flavor1DebugCompile
        flavor1ReleaseCompile
    
        flavor2DebugCompile
        flavor2ReleaseCompile
    }
    
    dependencies {
    ...
     flavor1DebugCompile project(path: ':mylibrary', configuration: 'flavor1Debug')
    
    flavor1ReleaseCompile project(path: ':mylibrary', configuration: 'flavor1Release')
    
     flavor2DebugCompile project(path: ':mylibrary', configuration: 'flavor2Debug')
    
    flavor2ReleaseCompile project(path: ':mylibrary', configuration: 'flavor2Release')
    
      }
    

    希望,如果您运行 full assemble,您将获得 2 个 apk,每种口味一个。 我从 cmd 中使用了“./gradlew build”并得到了它们。 请注意,对于您的 lib,您还将获得每种风味的 AAR

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 2016-02-17
      • 2022-10-15
      • 2019-08-23
      相关资源
      最近更新 更多