可以看到在Build Variants
中多了一个international
注意
目前这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
小总结
从上面的小示例。我们能够知道。维度不过是将我们的变种进行分类。形成 维度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个
个人觉得维度并不是越多越好。越多后续的工作也显得更加麻烦。实际项目中。最后是否支付我是使用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()
}
}
默认的目录结构就如下所示。非常简单。正常运行以后。就会显示这是默认的
笔者创建两个不同的文件夹。并且将代码全部复制到对应的变种中。注意。此时src/main/java/...
中的代码就需要删除。删除的原因是因为。编译的时候会将变种和src/main/java/...
下一起进行编译。如果不删除就会出现有两个MainActivity
的情况。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://i-blog.csdnimg.cn/blog_migrate/cf59a2f5023c21970062a14c27a4e818.jpeg)
总结
最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
相信它会给大家带来很多收获:
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!