Gradle多维度使用(1),深入理解Flutter动画原理

本文讲述了在Android开发中如何使用productFlavors和flavorDimensions来区分国际版和国内版应用,通过添加维度控制支付功能的显示,并介绍了如何通过代码结构和buildConfigField进行不同版本间的差异化。作者还分享了关于Android开发的学习资源,包括面试题和全套学习资料.
摘要由CSDN通过智能技术生成

可以看到在Build Variants中多了一个international

image.png

注意

目前这3个变体都是在一个维度。那如果我想将国内版和国际版变成一个新的维度该如何呢?

官网中能够知道。当需要配置多个维度的时候。可以采用 productFlavors

//需要指明维度
flavorDimensions “nation”
productFlavors{
//国际版
international{

}
//国内版
domestic{

}
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’
}
}

当完成如上的配置以后。那么目前就存在两个维度。一个是 debug或者是release 这个也是AS给我们提供的默认维度。还有一个是我们自己创建的维度nation。来确认是否是国际版还是国内版。

现在在看一下我们的Build Variants

image.png

小总结

从上面的小示例。我们能够知道。维度不过是将我们的变种进行分类。形成 维度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 false
proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’
}
}

虽然还是在productFlavors中配置的。但是对于每一个变种都使用了dimension指定了他所在的维度是哪一个.

那么现在我就有3个维度了。除了之前的两个,还多了一个维度去判断是否显示支付。所以的现在的变种就应该是 2 x 2 x 2 一共8个

image.png

个人觉得维度并不是越多越好。越多后续的工作也显得更加麻烦。实际项目中。最后是否支付我是使用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 “这是默认的”
}
}

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById(R.id.textview).text = DebugTools.getFlavors()
}
}

默认的目录结构就如下所示。非常简单。正常运行以后。就会显示这是默认的

image.png

笔者创建两个不同的文件夹。并且将代码全部复制到对应的变种中。注意。此时src/main/java/...中的代码就需要删除。删除的原因是因为。编译的时候会将变种和src/main/java/...下一起进行编译。如果不删除就会出现有两个MainActivity的情况。

image.png
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

总结

最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

相信它会给大家带来很多收获:

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 29
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值