笔记(24)安卓各版本特性简述
4.4 特性
- 1.webview与js交换可以使用@JavascriptInterface注释接口方法,通过webveiw向js中注入对象调用该方法,修复4.4以下安全漏洞风险
5.0 新特性—2014年(Lollipop)
-
1.全新的Material Design设计风格
-
2.支持64位ART虚拟机。
1.放弃了之前一直使用的Dalvik虚拟机,改用了ART虚拟机,实现了真正的跨平台编译。
Android内存优化(一)Dalvik虚拟机和ART虚拟机对比
- 引入RecyclerView
Android ListView与RecyclerView对比浅析
- 引入RecyclerView
-
4.新增悬挂式Notification。
- 相较于普通式和折叠式Notification需要拉下通知中心才可以查看的交互,悬挂式直接显示在屏幕上方,并且焦点不变,仍然在用户操作的界面上,不会打断用户的操作,过几秒会消失。
- Android 5.0 支持对Notification设置显示等级的能力。* 引入更加灵活的Toolbar,取代ActionBar。
- 5.支持多种设备(电视、平板、手表)
6.0 新特性—2015年(Marshmallow)
-
1.【重点】新增运行时权限管理。(动态请求权限)
当targetSdkVersion >= 23时
分位Normal Permissions和Dangerous Permissions。
ActivityCompat.checkSelfPermissions()请求,低于6.0的版本,该方法默认返回值为PackManager.PERMISSION_GRANTED,已授权状态。
onRequestPermissionsResult()处理权限回调结果。
弹窗如果用户选择了『不在询问』,下次则不会再次弹框,而是直接处理拒绝后的逻辑。
- 2.统一支付标准Android Pay。
- 3.指纹支持。
- Doze电量管理。
手机静止不动一段时间后,会进入Doze电量管理模式,提高续航时间。
- Doze电量管理。
-
5.APP Links(比如说网盘)
加强了软件间的关联,支持点击链接跳转到对应的App(todo:scheme调起???)
- 6.Now on Tap(超链接)
长按Home键激活Now on Tap,他会识别当前屏幕上的内容并创建Now卡片。
7.0 新特性—2016年(Nougat)
-
1.应用间共享文件
对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI。
如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriExposedException 异常。
要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用 FileProvider 类。
(1)在AndroidManifest.xml清单文件中注册provider
<manifest>
...
<application>
...
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/mypaths" />
</provider>
...
</application>
</manifest>
(2)res/xml中定义对外暴露的文件夹路径,新建mypaths文件:
<paths>
<external-path name="external_storage_root" path="." />
<files-path name="files-path" path="." />
<cache-path name="cache-path" path="." />
<external-files-path name="external_file_path" path="." />
<external-cache-path name="external_cache_path" path="." />
<root-path name="root-path" path="" />
</paths>
name:一个引用字符串。
path:文件夹“相对路径”,完整路径取决于当前的标签类型。
<external-path/> 代表Environment.getExternalStorageDirectory()
<files-path/> 代表context.getFilesDir()
<cache-path/> 代表context.getCacheDir()
<external-files-path>代表context.getExternalFilesDirs()
<external-cache-path>代表getExternalCacheDirs()
<root-path/> 代表设备的根目录new File("/");
-
2.多窗口模式(分屏或小窗)
- 3.Data Saver(省流)
-
4.改进的java8支持(支持lambda表达式)
- 5.自定义壁纸
- 6.快速回复(通知可以快速回复)
- 7.DayDreamVR支持
- 8.后台省电
- 9.快速设置(下拉菜单可以自定义选项)
- 10.Unicode9支持更多表情及符号
- 11.Google Assistant
8.0 新特性—2017年(Oreo)
-
1.【重点】通知中心
所有通知都必须分到一个渠道,即新增NotificationChannel。
-
2.画中画(PIP)支持
一种特殊的多窗口模式,常用于视频播放。
-
3.自适应启动器图标
桌面icon在不同的设备型号上显示为不同的形状。
Version API
Google 安全浏览服务
HTML5 Geolocation API
Renderer Importance API
Termination Handling
选择停用指标收集
- 5.权限单个申请
之前对于隐私权限只要申请一个就会将其在的权限组全部通过,android 8.0以后申请单个只给单个; - 6.后台执行限制
后台service限制。
广播限制:除了有限的例外情况,应用无法使用清单注册隐式广播。
- 7.后台位置信息限制
为降低耗电量,后台应用检索用户当前位置信息的频率会得到次数限制。 - 8.其它:自动填充框架、自动调整TextView的大小、多显示器支持
9.0 新特性—2018年(Pie)
-
1.网络安全校验,禁止明文传输。
可以通过清单文件配置network_security_config.xml文件,允许明文http请求
<application android:networkSecurityConfig="@xml/polyv_network_security_config">
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
-
2.全面支持全面屏
通过DisplayCutout类可以确定非功能区域的位置和形状,这些区域不应显示内容。
- 3.动画
引入AnimatedImageDrawable类,用于显示GIF和WebP动画图像。 - 4.机器学习
- 5.HDR VP9视频、HEIF图像压缩和Media API
- 6.利用Wi-Fi RTT进行室内定位
- 7.隐私权限变更(新增传感器、wifi等权限限制)
- 8.对使用非SDK接口的限制
10.0 新特性—2019年(Q)
- 5G网络支持。
- 系统级的深色主题
用户转至“设置”进行相应设置或开启“省电模式”即可激活新的系统级深色主题。这会将系统界面更改为深色,并为支持深色主题的应用启用深色主题。您可以为应用构建自定义深色主题,也可以选择使用新的 Force Dark 功能,让系统根据现有主题动态创建深色版本。
- 分区存储。分区存储将外部存储分成两部分。
分区存储将外部存储分成两部分:
(1)App-specific directory (沙盒目录)
APP只能在Context.getExternalFilesDir()目录下通过File的方式创建文件,APP卸载的时候,这个目录下的文件会被删除;无法通过File的方式在其他路径创建文件。
(2)Public Directory 公共目录
公共目录包括:多媒体公共目录(Photos, Images, Videos, Audio)和下载文件目录(Downloads)。
APP可以通过MediaStore或者SAF(System Access Framework)的方式访问其中的文件。APP卸载后,文件不会被删除。
- android.preference 库已弃用,开发者应该改为使用 AndroidX preference 库
- 支持可折叠设备。
- 手势导航。全面屏手势操作。
- 智能回复。通过机器学习预测你在回复消息时可能会说些什么。
- 用户隐私。给用户更多应用程序控制权。提供仅这一次、应用使用时授权等选择。
- ART优化。添加了一种垃圾回收机制,节省垃圾回收的时间,帮助在低版本设备上顺畅运行。
-
机器学习更新。
所有应用.png
以10为目标平台的应用.png
相关:
https://developer.android.google.cn/about/versions/10/behavior-changes-all?hl=zh-cn
11.0 新特性—2020年(R)
- 1.存储机制更新,强制分区存储。(应用只能访问系统应用和应用本身的文件,如要访问全部文件,则需要更多权限)
- 2.权限变化
1.单次权限授权
从Android 11开始,每当应用请求与位置信息、麦克风或摄像头相关的权限时,面向用户的权限对话框会包含仅限这一次选项。如果用户在对话框中选择此选项,系统会向应用授予临时的单次授权。
2.请求位置权限(位置权限不能和别的权限同时请求,并且建议前台位置权限和后台位置权限分开请求)
3.软件包可见性(限制app不去访问别的应用的包名及内容,如果需要访问则可以在manifest文件中添加对应应用的query)
4.前台服务类型(在前台服务要使用摄像头和麦克风需要再service中添加对应的camera和microphone)
5.权限自动重置(长时间未使用,则重置权限)。
如果应用以Android 11或更高版本为目标平台并且数月未使用,系统会通过自动重置用户已授予应用的运行时敏感权限来保护用户数据
- 3.读取手机号
如果你是通过TelecomManager的getLine1Number方法,或TelephonyManager的getMsisdn方法获取电话号码。那么在Android 11中需要增加READ_PHONE_NUMBERS权限,使用其他方法不受限。 - 4.自定义toast不能在应用处于后台的时候弹出
- 5.APK签名变更(仅通过v1验证的应用无法在andoird11以上版本安装或更新)
- 6.异步任务AsyncTask已不建议使用,建议使用kotlin协程
-
7.状态栏高度(使用WindowMetrics来获取状态栏高度)
所有应用.png
相关:
https://blog.csdn.net/ym4189/article/details/126466755?spm=1001.2014.3001.5506
https://developer.android.google.cn/about/versions/11/behavior-changes-11?hl=zh-cn
12.0 新特性—2021年(S)
影响所有App的行为变更
1.应用启动画面。
从Android 12 系统开始,所有应用的冷启动和温启动期间,系统会使用新的 SplashScreen API 来启动应用启动动画。SplashScreen相关API的引入影响在Andorid 12设备上运行的所有应用。对于应用开发者来说,无论你的应用targetSdkVersion 版本是多少,均需要进行SplashScreen的适配工作。
》若你的应用原本使用 android:windowBackground 实现了启动页,会被默认的启动页样式替换。
》若你的应用使用了一个额外的 Activity 作为启动页,则会先弹出系统默认启动页,再弹出你实现的启动页 (用户可能会感受到两次闪屏效果)。
2.麦克风和摄像头权限开关(下拉菜单新增麦克风和摄像头权限开关)
3.activity生命周期优化
影响目标API级别为Android12的App的行为变更
1.更安全的组件导出
2.PendingIntent可变性(需要指定FLAG)
3.前台服务启动限制
4.精确的闹钟权限
5.通知trampoline限制
6.大致位置(区分精确位置和大致位置)
粗略位置: 精确到2平方公里的位置值,请求 ACCESS_COARSE_LOCATION 权限可以获得。
精确位置: 精确到50米以内的位置值,请求 ACCESS_FINE_LOCATION 权限可以获得。
7.应用休眠
Android 11引入了应用休眠机智,如果用户有几个月没有与应用交互,那么系统会将应用置于休眠状态,Android 12扩展了应用休眠机智:
》Android 11:重置已授予的运行时敏感权限;
》Android 12:重置已授予的运行时敏感权限;无法从后台运行任务;无法接受推送通知;应用缓存文件会被删除。
8.自定义通知。系统规范了自定义通知的外观和行为
所有应用.png
以12为目标平台的应用.png
相关:
https://xiaxl.blog.csdn.net/article/details/123604094?spm=1001.2014.3001.5502
https://blog.csdn.net/ym4189/article/details/126489566?spm=1001.2014.3001.5506
https://developer.android.google.cn/about/versions/12/behavior-changes-12?hl=zh-cn
13.0 新特性—2022年(Tiramisu)
-
1.细分媒体权限(图片、视频、音频)
将 READ_EXTERNAL_STORAGE 细分为IAMGES、VIDEO、AUDIO权限(若设置 targetSdk>=33 则此项必需适配!)
-
2.WebView部分方法废弃
废弃setAppCacheEnabled与setForceDark方法;(若设置 targetSdk>=33 则此项必需适配!)
-
3.注册静态广播时,需设置对其他应用的可见性
若对其他应用可见,广播注册时设置:Context.RECEIVER_EXPORTED
若仅应用内使用,广播注册时设置:Context.RECEIVER_NOT_EXPORTED
image.png -
4.新增运行时通知权限:POST_NOTIFICATIONS
-
5.针对附近 Wi-Fi 设备的新运行时权限。
从Android 13开始,Android系统新增了NEARBY_WIFI_DEVICES权限,将原有的ACCESS_FINE_LOCATION权限 与wi-fi能力使用进行了区分(避免早先开发者使用Wi-Fi能力时,需要请求用户位置权限,从而引起用户的歧义)。 -
6.剪切板内容隐藏
(可以使用PersistableBundle.putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)来隐藏剪切板中的隐私信息)
image.png -
7.身体传感器后台权限(后台访问身体传感器时,除了请求现有的BODY_SENSORS还需要BODY_SENSORS_BACKGROUND)
-
8.非SDK接口限制
官方从 Android 9(API 级别 28)开始,逐步开始对应用使用的非 SDK 接口实施了限制。
如果你的APP通过引用非 SDK 接口或尝试使用反射或 JNI 来获取句柄,这些限制就会起作用。官方给出的解释是为了提升用户体验、降低应用崩溃风险。
-
9.前台服务管理器(通知栏新增前台服务管理器)
image.png
以 Android 13 或更高版本为目标平台的应用.png
相关:
https://blog.csdn.net/xiaxl/article/details/127493917?spm=1001.2014.3001.5506
https://developer.android.google.cn/about/versions/13/behavior-changes-13?hl=zh-cn
14.0 新特性—2023年(Beta 版)
- 默认拒绝设定精确的闹钟
- 最低可安装的目标 API 级别23,targetSdkVersion lower than 23
- 动态注册广播registerReceiver 需要指定导出行为
谷歌官方提供了一个 registerReceiver(BroadcastReceiver receiver, IntentFilter filter, int flags) API,flags 参数传入 Context.RECEIVER_EXPORTED(支持导出) 或 Context.RECEIVER_NOT_EXPORTED(不支持导出)
- 无障碍非线性字体放大至 200%
- 前台服务类型是必填项
- OpenJDK 17 更新,Java 17 语言支持
以14为目标的平台的应用.png
相关:
https://juejin.cn/post/7308434314777772042
https://developer.android.google.cn/about/versions/14/behavior-changes-all?hl=zh-cn#media-owner-package-names
安卓14.0Beta 版