本章学习Android系统版本的相关知识。
Android Studio 的“ New Project”向导中可查看。
平台版本信息
每一个有发布代号的版本随后都会有相应的增量版本。
有关 Android 的分发信息,可查看官网了解详情:
https://developer.android.com/about/dashboards/index.html
截至目前,Android 已经发布了挺多的版本,此小结主要在讲兼容性问题,看上小结的图,目前 Android 平台版本的分配情况,开发也不用兼容最原始的版本,毕竟使用比例小,减少点开发兼容难度。看图来说兼容到4.4就已经是兼容了98%的机子了。
关于 UI 布局兼容,可以使用配置修饰符搞定,关于这么多版本的兼容问题,Google 提供了也一些兼容库,已减少开发难度。
打开应用模块下的 build.gradle文件,可以看到 compileSdkVersion 、minSdkVersion 和 targetSdkVersion
demo
以最低版本设置值为标准,操作系统会拒绝将应用安装在系统版本低于标准的设备上。
一般情况,目标版本即最新发布的Android版本,为了告知Android,应用是为哪个API级别设计的。
SDK最低版本和目标版本会通知给操作系统,而SDK编译版本只是你和编译器之间的私有信息。它不会出现在manifest配置文件里。编译目标的最佳选择为最新的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倍,这样就很明显的能感受到动画啦!实用的喔!
设置
判断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 SDK 有着海量的信息,加上它也在经常更新,基本上也没人能记住它的全部,因此,学会查阅SDK文档,不断学习新的知识非常重要。
地址:http://developer.android.com/
android
布局添加 TextView ,这部分就不贴代码了,然后在kt代码中拿到TextView,给它赋值为当前编译版本即可。
mBinding.tvCompileVersion.text = "API LEVER = ${Build.VERSION.SDK_INT}"
允许用户最多作弊三次。记录用户偷看答案的次数,在CHEAT!按钮下显示剩余次数。超出后,禁用偷看按钮。
解决思路如上啦,具体代码 Demo 地址:
https://github.com/visiongem/AndroidGuideApp/tree/master/GeoQuiz
目前位置,GeoQuiz 项目完成了,后面开始学习其他项目以及知识点了。耶耶耶~ 初期任务完成啦!当然它还有不少不足之处,有时间可以优化优化,也是为了熟练已学知识点的啦。多实践总归是有益的!加油!🆙
🌈关注我吖~❤️