Android Gradle productFlavors基础

productFlavors

打包不同的定制产品,实现部分代码与属性的定制化。

可使用场景:

  • 需要更改APP名称、包名、图标、版本信息等资源更改产生一个新的APP。
  • 需要增加渠道发布等。
  • 需要进行小部分代码定制,且影响原有功能逻辑。
  • 需要使用不同版本库。

productFlavors在application和library中的配置

在build.gradle文件下创建特性,如下:

android {
    //...
    productFlavors {
        productA {
            //...
            //示例
            versionCode 1
            versionName "1.0.0 A"
        }
        productB {
            //...
            //示例
            buildTypes {
                debug {
                    //可自定义BuildConfig属性
                    buildConfigField "boolean", "ISOPEN", "false"
                    //...
                }
                release {
                    buildConfigField "boolean", "ISOPEN", "true"
                    versionCode 1
                    versionName "1.0.0 B"
                    //...
                }
            }
        }
        productC {
            //...
        }
    }
}

在当前的application下可以使用Gradle面板的build进行打包,可以打包相对应的特性版本,如:assembleProductA,也可以打包全部debug版本和release版本,如:assembleDebugassembleRelease

productFlavors在application和library中的依赖使用

ModuleA 和 ModuleB 分别有以上3个product特性版本,如果需要在ModuleA的productA特性依赖ModuleB 的productA特性,在ModuleA 的build.gradle文件下

dependencies {
    productACompile project(path: ':moduleB', configuration: 'productA')
}

在ModuleB的build.gradle文件下需要配置属性publishNonDefault true

publishNonDefault true
productFlavors {
}

productFlavors 在Gradle 3.0.0上的使用

在build.gradle文件下

android {
    flavorDimensions "product"  //flavorDimensions "product","color" 多维度的使用
    productFlavors {
        productA {
            dimension "sdk"
        }
        productB {
            dimension "sdk"
        }
//        productC{
//            dimension "ndk"
//        }
    }
}

dependencies {
    productAImplementation project(':moduleB')
    productBImplementation project(':moduleB')
}

如果ModuleB中也存在productFlavors ,并且在ModuleA的dependencies 中有依赖特性,则ModuleB中的特性必须与依赖它的特性一致,如上,ModuleB必须也有productA,productB两种特性

疑问:在多维度的特性下,只能打包维度结合的版本,如上面:productAProductC , productBProductC 的版本,不能单独打包productA、productB、productC的特性版本?

在多维度的依赖中需预先配置configurations

configurations {
    productAProductCImplementation
    productBProductCReleaseImplementation
}

dependencies {
    productAProductCImplementationproject(':moduleB')
    productBProductCReleaseImplementationproject(':moduleB')
}

疑问:依赖Module无法使用CompileOnly ?

    原文作者:vivekwo
    原文地址: https://www.jianshu.com/p/aba6fd40c705
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞