一个好的APP最好支持90%设备,由于不同版本系统提供的API可能不同,所以了解不同版本间系统差异很重要,这样才能更好的适配更多的智能设备。你的应用足不足够健壮要看你的应用在主流版本运行是否流畅。这篇文章记录开发过程中遇到的相对重要以及常用的适配方案,希望对读者有所帮助。
Android 版本 及对应的版本名
版本 | 版本名 | 中文名 |
---|---|---|
API R | android R | |
API Q | android Q | |
API 28 | android 9.0 Pie | 馅饼 |
API 27 | android 8.1 Oreo | 奥利奥 |
API 26 | android 8.0 Oreo | 奥利奥 |
API 25 | android 7.1 Nougat | 牛轧糖 |
API 24 | android 7.0 Nougat | 牛轧糖 |
API 23 | android 6.0 Marshmallow | 棉花糖 |
API 22 | android 5.1 Lollipop | 棒棒糖 |
API 21 | android 5.0 Lollipop | 棒棒糖 |
API 20 | android 4.4W KitKat | 奇巧巧克力棒 |
API 19 | android 4.4 KitKat | 奇巧巧克力棒 |
API 18 | android 4.3 Jelly Bean | 果冻豆 |
API 17 | android 4.2 Jelly Bean | 果冻豆 |
API 16 | android 4.1 Jelly Bean | 果冻豆 |
API 15 | android 4.0.3 ~4.0.4 Ice Cream Sandwich | 冰淇淋三明治 |
API 14 | android 4.0 ~ 4.0.2 Ice Cream Sandwich | 冰淇淋三明治 |
API 13 | android 3.2 Honeycomb | 蜂巢 |
API 12 | android 3.1 Honeycomb | 蜂巢 |
API 11 | android 3.0 Honeycomb | 蜂巢 |
API 10 | android 2.3.3 ~ 2.3.7 Gingerbread | 姜饼 |
API 9 | android 2.3~ 2.3.2 Gingerbread | 姜饼 |
API 8 | android 2.2~ 2.2.3 Froyo | 冻酸奶 |
API 7 | android 2.1 éclair | 闪电泡芙 |
API 6 | android 2.0.1 éclair | 闪电泡芙 |
API 5 | android2.0 éclair | 闪电泡芙 |
API 4 | android 1.6 Donut | 甜甜圈 |
API 3 | android 1.5 ICupcake | 纸杯蛋糕 |
API 2 | android 1.1 | |
API 1 | android 1.0 |
Android5.0
1、Android Runtime (ART)
Android运行时由Android核心库集和Dalvike虚拟机改成Android核心库集和ART(Android Runtime)模式。两者的区别就是Dalvike虚拟机采用了一种被称为JIT(just-in-time)的解释器进行动态编译,而ART模式则在用户安装App是进行预编译AOT(Ahead-of-time),将android5.X的运行速度提高了3倍左右。
2、Button将总是位于最上层
从5.0开始,在同一个layout下,就算你在Button上覆盖了相应的View,Button将总是位于最上层。产生原因:stateListAnimator属性。谷歌在Material Design中推出,是一个非常简单的方法用来实现在可视状态之间平滑过渡。这个属性可以通过android:stateListAnimator进行设置,可以使控件在点击时产生不同的交互。对于Button,点击时默认有个阴影的效果用于表示按下的状态(5.0以前就是简单的变色)。 解决方法:可以使用 android_stateListAnimator=”@null” 去掉阴影效果而使Button可以被正常的覆盖。
Android6.0
1、动态权限
动态权限适配是 Android 6.0 最先开始的,也是 Android 系统对开发者影响最大的改动之一。系统权限主要分为两类,正常权限和危险权限。不管哪个版本的android,你应用中所用到的所有权限,不管是正常权限还是危险权限,都需要在应用Manifest中申明。你的目标SDK(targetSdkVersion)是23以及23以上版本:应用必须在Manifest中罗列出所有的权限,并且在程序运行时,它必须请求用户授予每一个危险权限,此时用户可以授予或者拒绝每一个权限,并且应用程序可以继续运行有限的功能,即使用户拒绝了权限请。在 Android 6.0 ~ Android 8.0中,如果应用在运行时请求权限并且被授予该权限,系统会错误地将属于同一权限组并且在清单中注册的其他权限也一起授予应用,即对于同一组内的权限,只要有一个被同意,其他的都会被同意。在 Android 8.0 之后,此行为已被纠正。系统只会授予应用明确请求的权限。然而一旦用户为应用授予某个权限,则所有后续对该权限组中权限的请求都将被自动批准,但是若没有请求相应的权限而进行操作的话就会出现应用 crash 的情况。
危险权限分组说明
权限组 | 权限名称 |
---|---|
CALENDAR | android.permission.READ_CALENDAR |
android.permission.WRITE_CALENDAR | |
CAMERA | android.permission.CAMERA |
CALENDAR | android.permission.READ_CALENDAR |
android.permission.WRITE_CALENDAR | |
CONTACTS | android.permission.READ_CONTACTS |
android.permission.WRITE_CONTACTS | |
android.permission.GET_ACCOUNTS | |
LOCATION | android.permission.ACCESS_FINE_LOCATION |
android.permission.ACCESS_COARSE_LOCATION | |
MICROPHONE | android.permission.RECORD_AUDIO |
PHONE | android.permission.READ_PHONE_STATE |
android.permission.CALL_PHONE | |
android.permission.READ_CALL_LOG | |
android.permission.ADD_VOICEMAIL | |
android.permission.WRITE_CALL_LOG | |
android.permission.USE_SIP | |
android.permission.PROCESS_OUTGOING_CALLS | |
android.permission.ANSWER_PHONE_CALLS(8.0新增) | |
android.permission.READ_PHONE_NUMBERS(8.0新增) | |
SENSORS | android.permission.BODY_SENSORS |
SMS | android.permission.SEND_SMS |
android.permission.RECEIVE_SMS | |
android.permission.READ_SMS | |
android.permission.RECEIVE_WAP_PUSH | |
android.permission.RECEIVE_MMS | |
STORAGE | android.permission.READ_EXTERNAL_STORAGE |
android.permission.WRITE_EXTERNAL_STORAGE |
对应在清单文件中的展示
2、规避动态权限
如果想规避动态权限策略也是可以的,配置以下
3、Wifi相关操作
Android6.0之后,Wifi的使用更加严格。需要动态获取LOCATION权限,如果还想获取Wifi列表的话还需要打开GPS(位置信息)。
- 首先在AndroidManifest.xml文件中增加以下权限
- 其次还需要动态申请定位权限组
- 最后如果是用getScanResults()获取Wifi列表的话还需要打开GPS(位置信息)开关。
Android7.0
1、FileProvider
在官方7.0的以上的系统中,尝试传递 file://URI可能会触发FileUriExposedException。要应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用 FileProvider类。
使用FileProvider授权
1)、创建新的FileProvider
当你需要以独立的模块分享出去,需要继承FileProvider,创建新的FileProvider,防止与主工程有冲突
2)、创建file_path.xml
“.” 表示共享该目录下所有的文件
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!