release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’
}
//国际版
international{
}
}
可以看到在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()
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后
**一个零基础的新人,我认为坚持是最最重要的。**我的很多朋友都找我来学习过,我也很用心的教他们,可是不到一个月就坚持不下来了。我认为他们坚持不下来有两点主要原因:
他们打算入行不是因为兴趣,而是因为所谓的IT行业工资高,或者说完全对未来没有任何规划。
刚开始学的时候确实很枯燥,这确实对你是个考验,所以说坚持下来也很不容易,但是如果你有兴趣就不会认为这是累,不会认为这很枯燥,总之还是贵在坚持。
技术提升遇到瓶颈了?缺高级Android进阶视频学习提升自己吗?还有大量大厂面试题为你面试做准备!
提升自己去挑战一下BAT面试难关吧
对于很多Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些知识图谱希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
不论遇到什么困难,都不应该成为我们放弃的理由!
如果有什么疑问的可以直接私我,我尽自己最大力量帮助你!
最后祝各位新人都能坚持下来,学有所成。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
,都不应该成为我们放弃的理由!**
如果有什么疑问的可以直接私我,我尽自己最大力量帮助你!
最后祝各位新人都能坚持下来,学有所成。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!