本章学习Android系统版本的相关知识。
Android SDK版本
Android Studio 的“ New Project”向导中可查看。
平台版本信息
每一个有发布代号的版本随后都会有相应的增量版本。
有关 Android 的分发信息,可查看官网了解详情:
https://developer.android.com/about/dashboards/index.html
Android编程与兼容性问题
截至目前,Android 已经发布了挺多的版本,此小结主要在讲兼容性问题,看上小结的图,目前 Android 平台版本的分配情况,开发也不用兼容最原始的版本,毕竟使用比例小,减少点开发兼容难度。看图来说兼容到4.4就已经是兼容了98%的机子了。
关于 UI 布局兼容,可以使用配置修饰符搞定,关于这么多版本的兼容问题,Google 提供了也一些兼容库,已减少开发难度。
打开应用模块下的 build.gradle文件,可以看到 compileSdkVersion 、minSdkVersion 和 targetSdkVersion
demo
SDK 最低版本 (minSdkVersion)
以最低版本设置值为标准,操作系统会拒绝将应用安装在系统版本低于标准的设备上。
SDK 目标版本(targetSdkVersion)
一般情况,目标版本即最新发布的Android版本,为了告知Android,应用是为哪个API级别设计的。
SDK 编译版本(compileSdkVersion)
SDK最低版本和目标版本会通知给操作系统,而SDK编译版本只是你和编译器之间的私有信息。它不会出现在manifest配置文件里。编译目标的最佳选择为最新的API级别。
安全添加新版本 API 中的代码
由于一般应用的SDK最低版本和编译版本间的差异较大,如果是在老版本的系统上,调用了新版本的代码,那应用就会崩溃。
可是现在有了Android Lint,就能检测出这种潜在的问题,它会在这种潜在问题上提示类似Call requires API level 21 (Current min is 19)的警告信息。
-
解决问题的方法可以提升SDK最低版本,可这只是回避了兼容性问题,比较推荐的方法是,将高API级别代码置于检查Android设备版本的条件语句中。
比如:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { ... }
Build.VERSION.SDK_INT常量代表了Android设备的版本号。版本号清单——https://developer.android.com/reference/android/os/Build.VERSION_CODES.html
小结中demo小例子用的是ActivityOptions类来定制该如何启动activity,调用makeClipRevealAnimation(...)让CheatActivity出现时带动画效果,这是 Android SDK API 23级才加入的方法,所以会有波浪线报错,此时我们就要通过判断版本号去兼容了。
这里还有个小技巧,为了人眼更能明显的看到 activity 切换的动画效果,可以进入手机系统的开发人员选项,将过渡动画缩放时长加大5倍,这样就很明显的能感受到动画啦!实用的喔!
设置
JETPACK库
判断API级别执行不同代码逻辑虽然有用,但这不是最好的办法。
原因:
- 开发者适配不同系统版本的工作量大
- 不同设备用户运行同一应用的体验有很大差异
Google 推荐的 Jetpack 库支持新功能向后兼容,尽量让新老设备保持一致的用户体验。还有 AndroidX 库文件就是之前支持库的一些修改版本。只要有可能,建议都要用。虽然现在还不够完善,可是就是会一步步的完善的,如果是刚好碰到没有兼容上自己项目的问题,就乖乖的写上判断代码即可。
上面的有个小例子为例,为了少写一点兼容代码,那个过渡动画呢,可以使用 AndroidX 中的 ActivityOptionsCompat 类实现同等的效果:
// 去偷看答案
mBinding.btnCheat.setOnClickListener {
val answer = quizViewModel.currentQuestionAnswer
val option =
ActivityOptionsCompat.makeClipRevealAnimation(it, 0, 0, it.width, it.height)
startForResult.launch(CheatActivity.newIntent(this, answer), option)
}
具体参考结尾留的 Demo 的 Github 地址。
使用Android开发者文档
Android SDK 有着海量的信息,加上它也在经常更新,基本上也没人能记住它的全部,因此,学会查阅SDK文档,不断学习新的知识非常重要。
地址:http://developer.android.com/
android
- 平台:基本平台信息、重点关注平台基础支持和Android不同的系统版本。
- Android Studio:开发工具相关的文档,介绍不同的开发工具和流程以方便开发。
- Google Play:帮助部署应用以及使你的应用更受用户欢迎的一些指导和小技巧。
- Jetpack:介绍Jetpack库以及Android团队是如何致力提高开发体验的。本书只用了部分Jetpack库,建议学习全部库内容。
- Kotlin:Kotlin语言教程和技巧。
- 文档:开发者文档主页。
- 新闻:最新文章和新闻消息,方便了解Android开发的最新动态。
挑战练习:报告编译版本
布局添加 TextView ,这部分就不贴代码了,然后在kt代码中拿到TextView,给它赋值为当前编译版本即可。
mBinding.tvCompileVersion.text = "API LEVER = ${Build.VERSION.SDK_INT}"
挑战练习:限制作弊次数
允许用户最多作弊三次。记录用户偷看答案的次数,在CHEAT!按钮下显示剩余次数。超出后,禁用偷看按钮。
- 首先加上 Cheat 按钮下面加上 TextView 显示偷看次数。
- 偷看过的次数用 viewmodel 管理,跟 activity 生命周期绑定在一起,每次偷看了回来,就将偷看次数的标志就加一,并更新页面UI显示,直到不能偷看了,把 Cheat 按钮置为不可点击。当然这里注意系统杀死 activity 的情况,所以标志也要在 onSaveInstanceState() 里存好。
解决思路如上啦,具体代码 Demo 地址:
https://github.com/visiongem/AndroidGuideApp/tree/master/GeoQuiz
其他
目前位置,GeoQuiz 项目完成了,后面开始学习其他项目以及知识点了。耶耶耶~ 初期任务完成啦!当然它还有不少不足之处,有时间可以优化优化,也是为了熟练已学知识点的啦。多实践总归是有益的!加油!🆙