前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Android编程权威指南》之Android SDK版本与兼容

《Android编程权威指南》之Android SDK版本与兼容

作者头像
用户8928967
发布2021-10-13 11:50:28
1.6K0
发布2021-10-13 11:50:28
举报
文章被收录于专栏:用户8928967的专栏

本章学习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设备版本的条件语句中。比如:

代码语言:javascript
复制
  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 类实现同等的效果:

代码语言:javascript
复制
  // 去偷看答案
 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,给它赋值为当前编译版本即可。

代码语言:javascript
复制
mBinding.tvCompileVersion.text = "API LEVER = ${Build.VERSION.SDK_INT}"

挑战练习:限制作弊次数

允许用户最多作弊三次。记录用户偷看答案的次数,在CHEAT!按钮下显示剩余次数。超出后,禁用偷看按钮。

  1. 首先加上 Cheat 按钮下面加上 TextView 显示偷看次数。
  2. 偷看过的次数用 viewmodel 管理,跟 activity 生命周期绑定在一起,每次偷看了回来,就将偷看次数的标志就加一,并更新页面UI显示,直到不能偷看了,把 Cheat 按钮置为不可点击。当然这里注意系统杀死 activity 的情况,所以标志也要在 onSaveInstanceState() 里存好。

解决思路如上啦,具体代码 Demo 地址:

https://github.com/visiongem/AndroidGuideApp/tree/master/GeoQuiz

其他

目前位置,GeoQuiz 项目完成了,后面开始学习其他项目以及知识点了。耶耶耶~ 初期任务完成啦!当然它还有不少不足之处,有时间可以优化优化,也是为了熟练已学知识点的啦。多实践总归是有益的!加油!🆙


🌈关注我吖~❤️

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 妮K妮K妮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Android SDK版本
  • Android编程与兼容性问题
    • SDK 最低版本 (minSdkVersion)
      • SDK 目标版本(targetSdkVersion)
        • SDK 编译版本(compileSdkVersion)
          • 安全添加新版本 API 中的代码
            • JETPACK库
            • 使用Android开发者文档
            • 挑战练习:报告编译版本
            • 挑战练习:限制作弊次数
            • 其他
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档