Gradle多维度使用,真正带你搞懂RecyclerView的缓存机制

文章介绍了如何在Android项目中通过productFlavors和flavorDimensions创建国际版和国内版的BuildVariants,以及如何通过维度控制不同的功能特性,如支付显示。作者还分享了在实际项目中如何处理特殊情况,比如台湾版的支付功能限制。最后,文章强调了代码差异化和学习资源对于开发者的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’
}
//国际版
international{

}
}

可以看到在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()
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

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

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

img

img

img

img

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

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

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

最后

**一个零基础的新人,我认为坚持是最最重要的。**我的很多朋友都找我来学习过,我也很用心的教他们,可是不到一个月就坚持不下来了。我认为他们坚持不下来有两点主要原因:

他们打算入行不是因为兴趣,而是因为所谓的IT行业工资高,或者说完全对未来没有任何规划。

刚开始学的时候确实很枯燥,这确实对你是个考验,所以说坚持下来也很不容易,但是如果你有兴趣就不会认为这是累,不会认为这很枯燥,总之还是贵在坚持。

技术提升遇到瓶颈了?缺高级Android进阶视频学习提升自己吗?还有大量大厂面试题为你面试做准备!

提升自己去挑战一下BAT面试难关吧

对于很多Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些知识图谱希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

不论遇到什么困难,都不应该成为我们放弃的理由!

如果有什么疑问的可以直接私我,我尽自己最大力量帮助你!

最后祝各位新人都能坚持下来,学有所成。

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

,都不应该成为我们放弃的理由!**

如果有什么疑问的可以直接私我,我尽自己最大力量帮助你!

最后祝各位新人都能坚持下来,学有所成。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值