产品分区-ProductFlavors(二)

1,467 阅读2分钟

更新说明

昨天晚上整理了一下关于ProductFlavors的使用,因为自己项目只用到了主模块的分区,关于依赖的分区,也根据网上的博客进行了整理,自己也没有进行详细的测试。今天在运行demo的过程中,发现项目并没有进行相应的分区打包,相应的方法根本没有效果,对此进行一下道歉,误导大家接受错误的结论。今天去查阅了官网文档,进行整理并打包测试,总结的成功部分的结论。

主模块分区

产品分区-ProductFlavors(一)

依赖分区

上一篇介绍了主模块产品分区的用法,但是我们实际开发过程中,总是会出现模块化,组件化的状况。我们需要做到组件也支持分区功能。

我们进入到lib的gradle文件,进行配置:

android {
    defaultConfig {
        flavorDimensions 'lib'
    }
    
    productFlavors{
        a {
            dimension 'lib'
        }
        b {
            dimension 'lib'
        }
    }
}

这个lib可能需要支持不同的依赖,我们就不能再像之前:

implementation 'com.android.support:appcompat-v7:28.0.0'

而是需要根据不同的产品,引用不同的包:

aImplementation 'com.android.support:appcompat-v7:28.0.0'
bImplementation 'com.android.support:appcompat-v7:28.0.0'

至此lib的配置就完成了,真相就是如此简单。

app分区配置

我们在 app 模块引用组合,将之前的

implementation project(path: ':base_library')

替换为下方的代码

aImplementation project(path: ':base_library')
bImplementation project(path: ':base_library')

之后会发现项目报错: ERROR: Unable to resolve dependency for ':app@ADebug/compileClasspath': Could not resolve project :base_library. 这是因为项目不能知道你想要引用的是哪个风味的维度,我们需要配置一下组合:

a {
    manifestPlaceholders = ["APP_NAME": "A"]
    applicationIdSuffix ".a"
    dimension 'app'
    missingDimensionStrategy "lib", "a"
}
b {
    manifestPlaceholders = ["APP_NAME": "B"]
    applicationIdSuffix ".b"
    dimension 'app'
    missingDimensionStrategy "lib", "b"
}

a 产品下使用 missingDimensionStrategy "lib", "a" ,在 b 产品下使用 missingDimensionStrategy "lib", "b"

在我们们切换 app 产品的时候,就可以看到,lib 的产品会同步变动了。

文件2

总结

好多方案,还是需要实践之后才能发现真相。

官网文档

Github

纸上得来终觉浅,绝知此事要躬行。