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

本章学习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!按钮下显示剩余次数。超出后,禁用偷看按钮。

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

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

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

其他

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,124评论 6 523
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,453评论 3 404
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,386评论 0 368
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,136评论 1 301
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,142评论 6 400
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,593评论 1 315
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,958评论 3 429
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,944评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,477评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,512评论 3 346
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,639评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,227评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,971评论 3 340
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,397评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,550评论 1 277
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,203评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,713评论 2 366

推荐阅读更多精彩内容