Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:仅添加特定风格的库模块_Android_Android Gradle Plugin_Build.gradle_Android Library_Android Flavors - Fatal编程技术网

Android:仅添加特定风格的库模块

Android:仅添加特定风格的库模块,android,android-gradle-plugin,build.gradle,android-library,android-flavors,Android,Android Gradle Plugin,Build.gradle,Android Library,Android Flavors,在我的android应用程序中,我有两个库模块,需要根据味道有条件地包含它们。以下是应用程序结构 :app:library1:library2 该应用程序有两种风格,所以它将生成两个apk,一个免费版本,另一个付费版本。因此,相应地将app build.gradle配置如下: android { flavorDimensions("billing_type") productFlavors { free { dimension "billi

在我的android应用程序中,我有两个库模块,需要根据味道有条件地包含它们。以下是应用程序结构
:app

:library1

:library2

该应用程序有两种风格,所以它将生成两个apk,一个免费版本,另一个付费版本。因此,相应地将app build.gradle配置如下:

android {
    flavorDimensions("billing_type")
    productFlavors {
        free {
            dimension "billing_type"
        }

        paid {
            dimension "billing_type"
        }
    }
}
dependencies {
    implementation project(path: 'flavor1')
    implementation project(path: 'flavor2')
}
正如我们所看到的,这两个库模块将包含在两种风格中(免费和付费)。但是我只想把图书馆2收录在付费的风味中。那么,我如何才能有条件地只在付费风味中添加library2?我遵循了本文中提到的一些方法

并进行了以下更改:

android {
    flavorDimensions("billing_type")
    productFlavors {
        free {
            dimension "billing_type"
        }

        paid {
            dimension "billing_type"
        }
    }
}
configurations {
    freeImplementation
    paidImplementation
}
dependencies {
    freeImplementation implementation project(path: 'flavor1')
    paidImplementation implementation project(path: 'flavor2')
}
所有在线参考资料均适用于使用compile添加库模块的较旧grdale版本,
但自从gradle plugin 3.0.0以来,它就被弃用了。那么,有谁能帮我弄清楚如何在最新的选项1:
中有条件地添加特定风格的库模块吗

最后,我发现了如何做到这一点,我将在这里向面临同样问题的其他人解释:

关键部分是在library build.gradle中将publishNonDefault设置为true,然后必须按照用户指南的建议定义依赖项

整个项目将是这样的:

库构建。渐变:

项目构建。渐变:

现在,您可以选择AppFlavor和BuildVariants面板,相应地选择库,所有构建和运行都将基于所选的flavor完成

如果你有多个基于库的应用程序模块,Android Studio会抱怨变量选择冲突,没关系,忽略它

选项2:

示例解决方案:

Lib build.gradle

App build.gradle


适用于Gradle 3.0及更高版本

当您的主项目使用具有风格维度的模块或库模块(AAR)时,您的应用程序不知道使用哪一个。您应该在应用程序的build.gradle文件的defaultConfig块中使用missingDimensionStrategy来指定默认风格。例如:

missingDimensionStrategy 'dimension', 'flavor1', 'flavor2'
请查看链接以了解更多详细信息

apply plugin: 'com.android.application'

android {
    ....
    productFlavors {
        market1 {}
        market2 {}
    }
}

dependencies {
    ....
    market1Compile project(path: ':lib', configuration: 'market1Release')
    market2Compile project(path: ':lib', configuration: 'market2Release')
}
android {

    publishNonDefault true

    buildTypes {
        release {
        }
        debug {
        }
    }
    productFlavors {
        free {
        }
        paid {
        }
    }
}
android {

    buildTypes {
        debug {
        }
        release {
        }
    }
    productFlavors {
        free {
        }
        paid {
        }
    }
}

configurations {
    freeDebugCompile
    paidDebugCompile
    freeReleaseCompile
    paidReleaseCompile
}

dependencies {

    freeDebugCompile project(path: ':lib', configuration: 'freeDebug')
    paidDebugCompile project(path: ':lib', configuration: 'paidDebug')
    freeReleaseCompile project(path: ':lib', configuration: 'freeRelease')
    paidReleaseCompile project(path: ':lib', configuration: 'paidRelease')

}
missingDimensionStrategy 'dimension', 'flavor1', 'flavor2'