Android4.4、5.0、6.0、7.0、8.0、9.0、10.0、11.0版本迁移

一、系统适配相关的几个重要概念

手机的系统版本:

指的是手机的Android系统版本,例如Android8.0

应用的的设置版本:

1、minSdkVersion

是指支持到手机系统的最低版本,如果手机系统的api比这个低,则手机无法安装此应用

2、targetSdkVersion

是指该应用运行时的目标系统环境版本,targetSdkVersion需要大于或者等于minSdkVersion,实际运行时的分两种情况

其一:手机系统大于或者等于targetSdkVersion时,运行环境及遵循的api限制为targetSdkVersion的版本

其二:手机系统小于targetSdkVersion时,运行环境及遵循的api限制为手机系统的版本

举两个targetSdkVersion的例子

1.Android系统为8.0,应用的targetSdkVersion为23(即Android系统6.0,不明白请参考下文的对照表),那么该应用不需要理会8.0要求的多渠道通知及一定要使用前台服务的限制,只需满足6.0的系统限制,即运行时的效果跟在6.0系统中的表现是一致的

2.Android系统为5.0,应用的targetSdkVersion为23(即Android系统6.0),那么该应用运行时的效果只会表现出5.0系统的特性(例如限制和一些api的使用等),并不会表现出任何Android系统6.0的特性

*注意:compileSdkVersion是AS编译APK使用的API Level,CompileSDKVersion不会改变apk运行时的行为,也不会被包含到apk中,只是编译的时候起提示的作用,一般来说compileSdkVersion需要大于等于targetSdkVersion


二、系统名称,版本号,api等级对照表

Android 4.4(KitKat)            Build.VERSION_CODES.K                          api19

android 5.0 (Lollipop)             Build.VERSION_CODES.LOLLIPOP           api21

android 5.1(Lollipop)               Build.VERSION_CODES.LOLLIPOP_MR1          api22

android 6.0 (Marshmallow)      Build.VERSION_CODES.M            api23

android 7.0   (Nougat)              Build.VERSION_CODES.N              api24

android 7.1   (Nougat)              Build.VERSION_CODES.N_MR1   api25

android 8.0(Oreo)                Build.VERSION_CODES.O               api26

android 8.1(Oreo)                Build.VERSION_CODES.O_MR1       api27    

android 9.0  (Pie)                      Build.VERSION_CODES.P                    api28

android 10.0

android 11.0

*这里只是列出最常见的,还有一些在很低存在感的版本请查看官网

https://developer.android.google.cn/about/versions/11


三、如何处理不同系统平台的代码

1、@RequiresApi 

官方的解释是Denotes that the annotated element should only be called on the given API level or higher

使用场景:当你使用一个较高版本才有的api(比工程中的minSdkVersion高)时,编译器会报错,@RequiresApi可以让代码编译通过

例如

@RequiresApi(api = Build.VERSION_CODES.M)

public void doSomething(){

    //一些只能在个别版本sdk才拥有的方法

}

即:使用此注解的代码,只会在当前版本等于或者大于当前的Build.VERSION_CODES.M(即api23)时,才运行doSomething()方法

2、@TargetApi

同@RequiresApi ,但是属于过时的方法,建议使用@RequiresApi 来替代

3、可以通过判断sdk的版本(Build.VERSION.SDK_INT),来为能够使用的版本进行个性化设置

例如:沉浸式状态栏配适

在Android系统4.4以前,状态栏的背景色和字体颜色都是不能改变的。但是4.4以后Google增加了改变状态栏背景透明的方法。可以通过判断sdk的版本,来为能够使用的版本进行个性化设置:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);}

沉浸式状态栏是Android在5.0中引入的,在5.0之前是没有的,并且在Android6.0中沉浸式状态栏的使用方法和5.0不一样,因此需要做到版本兼容,针对于不同的Android进行适配,同样也是通过判断Build.VERSION.SDK_INT来区分版本,进行个性化配适

Android4.4

android4.4又称Android K(Kitkat)

1.webview的变化

4.4版本以后对http与https进行了安全认证的区分,4.4以后默认不支持https这种方式,但是提供了三种向下兼容的模式:

MIXED_CONTENT_NEVER_ALLOW:Webview不允许一个安全的站点(https)去加载非安全的站点内容(http),比如,https网页内容的图片是http链接。强烈建议App使用这种模式,因为这样更安全

MIXED_CONTENT_ALWAYS_ALLOW:在这种模式下,WebView是可以在一个安全的站点(Https)里加载非安全的站点内容(Http),这是WebView最不安全的操作模式,尽可能地不要使用这种模式

MIXED_CONTENT_COMPATIBILITY_MODE:在这种模式下,当涉及到混合式内容时,WebView会尝试去兼容最新Web浏览器的风格。一些不安全的内容(Http)能被加载到一个安全的站点上(Https),而其他类型的内容将会被阻塞。这些内容的类型是被允许加载还是被阻塞可能会随着版本的不同而改变,并没有明确的定义。这种模式主要用于在App里面不能控制内容的渲染,但是又希望在一个安全的环境下运行。

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){

    settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

4.4以后webview默认不保存cookie状态

如果要设置在4.4以后进行cookie保存,可以这样设置

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){

    //android5.0以后webview默认不在保存cookie所以会导致第三方登录状态无法保存

    CookieManager cookieManager = CookieManager.getInstance();

    cookieManager.setAcceptThirdPartyCookies(webView,true);

}


Android5.0

android5.0又称Android L(Lollipop)

1.安装时控制权限

用户可以在安装时关闭某些静态注册的权限。

2.用户体验优化

引入Material Design设计,开始采用扁平化设计,会拥有类似物理表面和边缘的视觉效果,动态阴影和动画方面的加强。

3.增加供开发者使用的官方控件

引入抽屉布局(DrawerLayout)、RecyclerView、CardView、SwipeRefreshLayout、ToolBar、drawerToggle等,开始能够自定义状态栏、标题栏、导航栏的颜色,设置控件阴影。

4.增加触摸反馈

当用户与用户界面进行交互时,触摸反馈在触摸点上提供了一种瞬时视觉确认,按钮的默认触摸反馈动画使用新的RippleDrawable类。

5.增加activity的转场动画

Android6.0

Android6.0又称Android M(Marshmallow)

1.完整的权限控制

危险的权限都需要向系统动态申请,只静态注册申请权限会无效化。对于一些隐私权限会在第一时间提示用户是否授权。

新增API

ContextCompact.checkSelfPermission() 检测是否拥有权限

ActivityCompact.requestPermission() 申请授权

onRequestPermissionsResult() 用户是否授权

ActivityCompat.shouldShowRequestPermissionRationale() 权限解释(用户拒绝后出现)

Android7.0

android7.0又称android N(Nougat)

1.后台优化

删除了三项隐式广播(CONNECTIVITY_ACTION、ACTION_NEW_PICTURE 和ACTION_NEW_VIDEO),优化内存使用和电量消耗。

Android8.0

Android8.0又称Android O(oreo)

1.PinnedShortcuts功能

类似苹果的3DTouch,长按一个软件后可以弹出子菜单,然后就可以通过这个方式快捷的使用该应用的部分功能。

2.自适应图标支持多种形状

能在不同的设备型号上显示不同的图标形状。比如同一个桌面图标在一家 OEM 厂商的设备上显示为圆形,在另一家则可以显示为方形。通过定义两张图层(前景与背景)你可以制定你的桌面图标外观,你必须提供没有形状、阴影的 PNG 格式图象作为图层 Drawable。

3.通知渠道 — Notification Channels

通知渠道是由应用自行定义的通知内容类别,借助渠道,开发者可以让用户对不同种类的通知进行精细控制。

4.后台限制

对隐式广播、后台服务和位置更新等进行了后台自动限制

Android9.0

Android9.0又称Android P(pie)

1.对全面屏的支持

模仿了ios提高屏占比的方案(前摄像头没有比较好的隐藏方案),即支持齐刘海。借助最新的提供的DisplayCutout类,开发者可以找到非功能区域的位置和形状,而非功能区域是不应显示功能的;使用getDisplayCutout()就可以获取这个区域的详细信息。

2.通知栏(状态栏)

现在只允许显示最多4个通知图标,不管当前设备是否是齐刘海,多出来的通知显示为三个点。Android P版本中,你还可以在消息中展示图像;新的Notification.Person类可以识别对话中的任务,包括他们的头像和URI。

3.多摄像头画面

可以即时获取到两个或者更多的相机数据流。

4.神经网络

任务可以声明它们估算的数据大小,信号预读取并且指定详细的网络需求。即根据任务需求的数据大小和当前的网络环境,在收费网络里延迟一些网络要求,而在不计费的网络里可以通过消息预获取来得到更好的用户体验。

5.Material Design迎来2.0时代

加入了大量的圆角设计,UI方面的优化。

6.Android Dashboard

用户可以看清楚自己在受手机上都干了哪些事情,从而提醒自己是否过多的浪费了不必要的时间,并在必要的时候提醒你应当休息一下。对某一款应用进行时间限制,用户使用到一定时间之后就会提醒,甚至让图标变灰色,以提醒用户尽量少用这个APP。

7.Wind Down模式

全局的夜间模式(个人感觉这个好人性化)

8.Adaptive Battery模式

一个电池优化模式,提高续航。在该模式下,程序不需要唤醒可以极大的降低资源占用,更关注用户最常用的服务和应用程序。

9.Shush模式

在这个模式下,如果用户将手机屏幕朝下放置,那么手机会自动调整为震动或者静音模式,只保留闹钟的声音。

10.检测用户的行为,让系统作出对应的动作

如插入耳机孔自动播放音乐,搜索“打车”自动显示打车软件等。

总结:主打对大屏幕和视觉体验的优化,对电池电量的优化,开始智能化,会对用户行为的学习及正确化引导,网络环境的智能适应,更加人性化。

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,907评论 25 707
  • 不知为何,明明想和你说话。 却骗你说,风雨正好,该去写点诗句。 不必嘲讽我,你笑出声来, 我也当是天籁。 不必怀有...
    _湫子阅读 491评论 0 1
  • 端午节的正确打开方式:吃凉糕,插艾草,系五色索,挂香包。 亲手做每一样东西,让每一根丝线都充满感情,这就是仪式感。...
    王小唐阅读 232评论 0 1
  • 看来是不应该看太多的小说和漫画,身为一个女孩子幻想得多了日子过起来就没那么容易了 幻想中我肚子饿到疼的时候他应该买...
    前田卯绪阅读 191评论 0 0
  • 前段时间,我跟一个朋友聊天,无意间聊到了前任这个话题。本来以为会有点尴尬,但是她的态度让我觉得她现在一个人,过得也...
    筱陌_阅读 785评论 1 0