Gradle 多维度使用,h5 开发移动端
}}
可以看到在Build Variants
中多了一个international
注意
目前这 3 个变体都是在一个维度。那如果我想将国内版和国际版变成一个新的维度该如何呢?
在 [官网](
)中能够知道。当需要配置多个维度的时候。可以采用 productFlavors
//需要指明维度 flavorDimensions "nation"productFlavors{//国际版 international{
}//国内版 domestic{
}}
buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}
当完成如上的配置以后。那么目前就存在两个维度。一个是 debug
或者是release
这个也是 AS 给我们提供的默认维度。还有一个是
我们自己创建的维度nation
。来确认是否是国际版还是国内版。
现在在看一下我们的Build Variants
小总结
从上面的小示例。我们能够知道。维度不过是将我们的变种进行分类。形成 维度1
乘以维度2
的变种。方便我们在实际开发中做到不同功能不同的 apk.就如同我们最上面的需求。
国际版只有且仅有 google 支付 SDK
国内版只有且仅有微信支付的 SDK
更多维度如何使用
之前仅仅演示了 2 个维度。但是实际项目中我还需要更多的维度。例如我们项目中遇到的一个实际问题。台湾版本虽然也规划为国际版。因为使用的都是 google 支付。但是这个功能仅仅部分放出。并没有全部放出。这个时候我就需要更多的一个维度。去判断是否需要放开支付功能。
flavorDimensions "nation","pay"productFlavors{//国际版 international{dimension "nation"}//国内版 domestic{dimension "nation"}
//显示支付 showpay{dimension "pay"}
//不显示支付 hidepay{dimension "pay"}}
buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}
虽然还是在productFlavors
中配置的。但是对于每一个变种都使用了dimension
指定了他所在的维度是哪一个.
那么现在我就有 3 个维度了。除了之前的两个,还多了一个维度去判断是否显示支付。所以的现在的变种就应该是 2 x 2 x 2 一共 8 个
个人觉得维度并不是越多越好。越多后续的工作也显得更加麻烦。实际项目中。最后是否支付我是使用buildConfigField
做了额外的配置
flavorDimensions "nation"productFlavors{//国际版 international{buildConfigField("Boolean", "isShowPay", "false")}//国内版 domestic{buildConfigField("Boolean", "isShowPay", "true")}}
维度的作用
回到刚刚的示例中。创建了 2 个维度。
release / debug
国际版 / 国内版
在 src
下创建international
文件夹和domestic
文件夹。用于放置不同内容的代码。
什么叫不同内容的代码?
这么说吧。一般情况下。我们的代码放在了 src/main/java/...
下面。为了做不同的区分。例如国际版中显示国际版,国内版显示国内版本,你可以将 src/main/java/...
下的代码全部复制到不同的文件夹下面。然后修改代码。这样你指定什么版本的时候就编译对应文件下的代码。
这么说比较苍白。笔者模拟写一个示例。需求就是不同编译显示不同的文本。
代码非常简单,如下。在 textview 中显示一下即可
object DebugTools {fun getFlavors(): String {return "这是默认的"}}
评论