将productFlavor添加到实验性Android gradle插件库中

时间:2015-10-05 20:23:53

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

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

fix似乎不适用于实验性gradle插件。有没有人知道如何使用新插件制作口味?

库:

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

项目:

...

dependencies {
    compile project(':mylibrary')
}

3 个答案:

答案 0 :(得分:10)

这可能有帮助吗?

  

图书馆出版

     

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

     

您可以使用

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

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

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存储库。你也应该   将单个变体发布到存储库或启用所有配置   发布项目间依赖关系。

从这里: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library

答案 1 :(得分:0)

语法错误。

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

model {
    android {

    }

    android.productFlavors {
        create("flavor") {

        }
    }
}

答案 2 :(得分:0)

事情有点复杂。 我已经测试了gradle实验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')

  }

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