Android各版本差异性

Android各版本差异性

Android 6(api 23)

  • 指纹识别

  • 运行时权限:动态申请(重点)

  • 移除对Apache HTTP client的支持,建议使用HttpURLConnection。

  • 休眠和应用待机模式(Doze and App Standby)

  • 硬件标识符访问权:WifiInfo.getMacAddress() 返回常量值 02:00:00:00:00:00

Android7(api 24)

  • 应用间共享文件规则

    • 禁止使用file://URI, 否则抛出FileUriExposedException异常应该通过content://URI,并授权URI 临时访问权限

    • FileProvider

  • Apk签名Scheme V2

    • V1签名不会校验Apk文件的注释区V2签名会校验Apk文件的注释区是否修改V2签名增加一块签名区块,签名区块可以根据固定的id,获取签名信息签名区块不会校验是否修改
  • 画中画、分屏多任务、通知栏快速回复、夜间模式

  • 后台优化:

    • 删除3个隐式广播(CONNECTIVITY_ACTION、ACTION_NEW_PICTURE、ACTION_NEW_VIDEO)

Android8(api 26)

  • 运行时权限:系统只会授予应用明确请求的权限

  • 通知变更(channel)

  • 自适应图标

  • 悬浮窗适配

  • 透明主题的Activity:8.0上的Bug : 只有全屏不透明的Activity才可以设置方向 ; 8.1修复

  • 后台服务、广播限制规则;

    • 1.后台服务限制处于空闲状态时,应用可以使用的后台服务存在限制。 这些限制不适用于前台服务,因为前台服务更容易引起用户注意

    • 2.广播限制除了有限的例外情况,无法再使用清单注册隐式广播

  • 后台位置信息限制

    • 为降低耗电量,8.0开始对后台应用获取用户当前位置信息的频率进行限制,应用每小时仅能接收几次位置信息更新,会出现后台应用定位收不到定位信息。

Android9(api 28)

  • 新特性

    • 刘海屏的支持

    • 利用 Wi-Fi RTT 进行室内定位

    • 通知栏功能增强(支持Bubble)

    • 多摄像头支持

  • Non-SDK接口使用

    • 9.0开始,无法再通过反射,JNI间接地使用非SDK的API接口了
  • 挖孔屏适配

    • 有状态栏的页面,不会受挖孔屏特性的影响全屏显示的页面,系统挖孔屏方案会把应用界面下移,避开挖空区域,进行显示
  • 不允许共享WebView数据目录

    • 不能再跨进程共享单个WebView数据目录,否则会崩溃
  • 移除对 Build.serial 的直接访问

    • 需要 Build.serial属性字段的话,必须请求 READ_PHONE_STATE 权限然后使用 9.0 新增的新 Build.getSerial() 函数来进行获取
  • SELinux 禁止访问应用的数据目录

    • 不允许直接通过路径访问其他应用的数据目录

    • 可以使用进程间通信 (IPC) 机制(包括通过传递 FD)共享数据

Android 10 ( api29)

  • 定义媒体权限集合

  • 访问共享集合,需通过 MediaStore API

    • MediaStore.ImagesMediaStore.VideoMediaStore.AudioMediaStore.Downloads
  • 应用的私有目录访问变更

    • 为每个应用程序提供了一个独立的在外部存储设备的存储沙箱,没有其他应用可以直接访问您应用的沙盒文件。由于文件是私有的,因此访问这些文件不再需要任何权限。

    • 获取外部存储私有文件的最佳位置:即Context.getExternalFilesDir返回的位置,因为此位置在所有Android版本中表现一致;使用此方法时,请传入与要创建或打开的文件类型对应的媒体环境。例如,要访问或保存app-private图像,请调用Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)

  • ACCESS_MEDIA_LOCATION

    • 使用这个权限,可以获取照片中的位置信息
  • Activity后台活动限制

    • 对应用未经通知用户就启动App,进行了极大地限制,只有在满足以下一个或多个条件时才能启动Activity:

    • 1. App具有可见Activity窗口

    • 2.位于前台的另一个App发送属于该应用程序的PendingIntent

    • 3.系统发送属于该App的PendingIntent (比如:点击通知消息)

    • 4.系统向应用程序发送广播 (比如:SECRET_CODE_ACTION)

  • 设备位置权限的访问控制

    • 用户可以更好地控制应用何时可以访问设备位置,运行的应用程序请求位置访问时,会通过对话框的形式给用户进行授权提示。
  • 允许应用程序降级

  • 对数据和标识符的更改

    • 1.获取联系人信息,结果不再按交互频率排序

    • 2.MAC地址随机化,默认传输随机的MAC 地址

    • 3.唯一标识符:需要 READ_PRIVILEGED_PHONE_STATE 权限,才能访问设备的不可重置标识符,包括 IMEI、序列号

    • 4.访问剪贴板数据:除默认输入法程序外,没有焦点的应用无法访问剪贴板数据 : clipManager.hasPrimaryClip return false

    • 5.访问USB串行需要用户许可:只能在用户授予您访问USB设备权限后才能读取序列号

    • 6.相机和连接相关更改:调用getCameraCharacteristics()方法获取返回的信息的广度,必须具有 CAMERA 权限才能访问getCameraCharacteristics()方法的返回值中包含的设备元数据

  • 启用、禁用Wi-Fi的限制

    • 1.无法启用、停用Wi-Fi2.WifiManager.setWifiEnabled() 方法始终返回false3.只能使用设置面板提示用户启用、禁用Wi-Fi

Android 11(api 30)

  • 分区存储强制执行

    • 分区存储,在Android10就已经推行了,简单的说,就是应用对于文件的读写只能在沙盒环境,也就是属于自己应用的目录里面读写。其他媒体文件可以通过MediaStore进行访问。
  • 媒体文件访问权限

    • 为了在保证用户隐私的同时可以更轻松地访问媒体,Android 11 增加了以下功能。执行批量操作和使用直接文件路径和原生库访问文件
  • 软件包可见性

    • 如果你想去获取其他应用的信息,比如包名,名称等等,不能直接获取了,必须必须在清单文件中添加元素,告知系统你要获取哪些应用信息或者哪一类应用
  • 所有文件访问权限

    • 应用可通过执行以下操作,向用户请求名为“所有文件访问权限”的特殊应用访问权限,在清单中声明MANAGE_EXTERNAL_STORAGE权限,使用ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION 作为Action, 将用户引导至一个系统设置页面,在该页面上,用户可以为您的应用启用以下选项:授予所有文件的管理权限。如需确定您的应用是否已获得 MANAGE_EXTERNAL_STORAGE 权限,请调用Environment.isExternalStorageManager()。
  • 电话号码相关权限

    • TelecomManager 类中的 getLine1Number() 方法TelecomManager 类中的 getMsisdn() 方法当用到这两个API的时候,原来的READ_PHONE_STATE权限不管用了,需要READ_PHONE_NUMBERS权限才行
  • 媒体intent操作需要系统默认相机

  • 5G

  • 需要 APK 签名方案 v2

  • 后台位置信息访问权限

  • 数据访问审核

  • 用户可以选择权限单次授权(仅此一次)

    • 我们每次使用的时候都去判断权限,没有就去申请即可。

Android 12(API 31)

三方卡片内容: https://developer.android.google.cn/about/versions/12?hl=zh-cn

  • 应用启动页 SplashScreen(影响所有应用);

    • 从Android 12开始,所有的App在每次启动时(特指冷启动与温启动),系统都会为我们加上一个默认的启动画面

    • 应用图标 +图标背景+前景遮罩+窗口背景

    • 启动画面允许我们一定程度的自定义,但总体都无法跳脱出以上4个元素,且无法去除。

    • 适配:方案

      • 设置除窗口背景之外的元素都为透明

      • 改用SplashScreen API定制系统启动画面:可定制程度低,可能无法满足产品的需求;

  • 麦克风和摄像头切换开关

  • 声明 android:exported

    • 应用组件需显示声明 android:exported

    • 从 Andorid 12 开始,当您的应用程序将目标版本设置为31或更高版本(targetSdkVersion 31)时,若应用程序组件(Activity、Service、Receiver、Provider)在配置清单manifest中未显示声明 android:exported 属性,则在进行应用开发或打包时,将会出现如下错误 : As of Android 12, android:exported must be set; use true to make the activity available to other apps, and false otherwise. For launcher activities, this should be set to true.

  • 通知栏变更

    • Notification通知栏布局样式再次调整
  • 前台服务:

    • 将禁止从后台启动前台服务

    • 以下情况可启动前台服务:1.可见的 Activity 或窗口;2.用户操作,如通知、小部件等等;3.特定的广播和回调;4.STICKY 类型的服务可在崩溃或由于低内存而停止运行的情况下重启;

  • 蓝牙权限:

    • Android 12 引入了 BLUETOOTH_SCAN、BLUETOOTH_ADVERTISE 和 BLUETOOTH_CONNECT 权限。这些权限可让以 Android 应用更轻松地与蓝牙设备互动,不再需要申请设备位置信息相关权限。Android 12 开始,Google官方将蓝牙扫描与位置权限进行了分离,因为官方发现:在隐私层面上,很难向终端用户解释位置权限与蓝牙的关系。
  • 精确位置

    • 从 Andorid 12 开始,当您的应用程序将目标版本设置为31或更高版本(targetSdkVersion 31)时,若应用程序请求设备的精确位置,需同时请求 ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION 权限。发出精确位置申请后,用户侧设备将弹出动态授权申请弹窗:
  • 待处理 intent 可变性

    • 简单讲,就是以Android 12为目标平台的App,在构建PendingIntent时,需要指定Flag为FLAG_IMMUTABLE(建议)或FLAG_MUTABLE二者之一
  • 精确的闹钟权限

  • 通知 trampoline 限制

    • 简单讲,就是我们之前在配置通知(Notification)的点按行为时,可能会通过PendingIntent来启动一个Service或BrocastReceiver。而以Android 12为目标平台的App,如果尝试在Service或BrocastReceiver中内调用 startActivity(),系统会阻止该Activity启动,并在 Logcat 中显示以下消息:

    • 适配:排查哪个Service或BrocastReceiver有此行为

      • 可在Terminal终端执行以下adb命令,该命令会在你点按通知后,识别哪个Service或BrocastReceiver调用了startActivity(),并输出相关信息到Logcat,可以通过关键字“NotifInteractionLog”进行过滤:adb shell dumpsys activity service \ com.android.systemui/.dump.SystemUIAuxiliaryDumpService
    • 考虑在配置通知(Notification)的点按行为时选择直接启动Activity

Android 13(API 32)

Android13官方文档

  • 细分媒体权限:将 READ_EXTERNAL_STORAGE 细分为IAMGES、VIDEO、AUDIO权限(若设置 targetSdk>=33 则此项必需适配!)

  • WebView调整:废弃setAppCacheEnabled与setForceDark方法;(若设置 targetSdk>=33 则此项必需适配!)

  • 静态广播注册:注册静态广播时,需设置对其他应用的可见性(若设置 targetSdk>=33 则此项必需适配!)

  • 通知权限:新增运行时通知权限:POST_NOTIFICATIONS(若设置 targetSdk>=33 则此项必需适配!)

  • Wi-Fi :新增 NEARBY_WIFI_DEVICES 运行时权限(若设置 targetSdk>=33 则此项必需适配!)

  • 身体传感器后台权限:新增 BODY_SENSORS_BACKGROUND 运行时权限(若设置 targetSdk>=33 则此项必需适配!)

  • 剪切板内容隐藏:新增内容隐藏API(根据业务需求,选择性适配!)

  • 非 SDK 接口的限制(若设置 targetSdk>=33 则此项必需适配!)

Android 14(API 33)

Android 14 功能和变更列表,官方介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/719859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web学习笔记(二十三)

目录 1.增加节点 1.1document.write 1.2innerHTML 1.3动态添加 1.4追加和插入节点 2.删除、克隆、替换节点 2.1删除节点 2.2克隆节点 2.3替换节点 3.事件 3.1什么是事件 3.2事件三要素 3.3事件的种类 3.4常见事件名称(类型)汇总 4.操作…

代码随想录算法训练营第三十四天| 860.柠檬水找零, 406.根据身高重建队列 ,452. 用最少数量的箭引爆气球

860.柠檬水找零 - LeetCode 思路: 这个问题比较简单, 用一个字典bill_dict记录已经收到的钱已经钱的数量, 然后如果收到五元, 字典中的 bill_dict[5] 1。 收到10元 bill_dict[5] - 1 bill_dict[10] 1 。 麻烦的是收到20元&…

图像剪辑|Linux|ImageMagick的初步使用--素描,毛玻璃等特效

前言: ImageMagick在图像剪辑领域的地位基本等同于FFmpeg,和FFmpeg基本一样,在Linux下使用此工具的原因是该工具可以使用shell脚本批量剪辑,在Windows下就会比较麻烦一些了 那么,本文主要是记录一下ImageMagick的一些…

论文阅读:基于超像素的图卷积语义分割(图结构数据)

#Superpixel-based Graph Convolutional Network for Semantic Segmentation github链接 引言 GNN模型根据节点特征周围的边来训练节点特征,并获得最终的节点嵌入。通过利用具有不同滤波核的二维卷积对来自附近节点的信息进行整合,给定超像素方法生成的…

汽车上的各种质量:整备质量、总质量、装载质量、簧上质量

文章目录 前言一、整备质量二、额定总质量三、额定装载质量四、簧上质量 总结 前言 一、整备质量 整备质量指的是汽车按照出厂技术条件完全配备(包括备胎、工具、各种油水等)的质量。汽车的整备质量也就是人们常说的一辆汽车的自重,它的规范…

MATLAB--pie函数绘制复杂分类饼图(2)--附案例代码

MATLAB–pie函数绘制复杂分类数据的饼状图 目录 MATLAB--pie函数绘制复杂分类数据的饼状图摘要1. 问题描述2. 具体步骤:3. 绘制结果4. 小结 摘要 在数据可视化中,饼状图是一种常用的展示分类数据的方式。之前,文章介绍了使用MATLAB绘制饼状图…

数据删除

目录 数据删除 删除员工编号为 7369 的员工信息 删除若干个数据 删除公司中工资最高的员工 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 数据删除 删除数据就是指删除不再需要的数据 delete from 表名称 [where 删…

群晖Synology Drive服务搭建结合内网穿透实现云同步Obsidian笔记文件夹

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-ebec69DBjtGk7apF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

C++字典操作

创建字典 #include<iostream> #include<map> #include<string>using namespace std;int main(){map<string, int> mymap;}赋值 2.1 指定元素赋值 mymap["abc"] 1;2.2 添加键值对 mymap.insert(make_pair("bcd", 2));字典的顺序…

后端传给前端的时间字段前端显示不正确

具体问题是什么呢&#xff0c;就比如我后段有一个字段是TimeStamp类型&#xff0c;从数据库中查出数据是下面的样式&#xff1a; 但是前端显示的是下面的格式&#xff1a; 这个的解决方法还是挺多的&#xff0c;那接下来具体来看看吧~ 第一种&#xff1a; 在application.prop…

Linux使用bcache 将SSD加速硬盘

前言 在Linux下&#xff0c;使用SSD为HDD加速&#xff0c;目前较为成熟的方案有&#xff1a;flashcache&#xff0c;enhanceIO&#xff0c;dm-cache&#xff0c;bcache等&#xff0c;多方面比较以后最终选择了bcache。 bcache 是一个 Linux 内核块层超速缓存。它允许使用一个或…

Flink 面试题总结及答案

基础 state的分类 key state和operate state state 的重分布 Flink状态管理详解&#xff1a;Keyed State和Operator List State深度解析 - 掘金 checkpoint 和save point https://zhuanlan.zhihu.com/p/79526638 flink job 的容错策略 如果在没有持续消息输出的情况下&…

19.AUTOSAR MCAL分析(一):Microcontroller Driver

目录 1. MCAL概述 2. Microcontroller Drivers 2.1 MCU Drivers 2.2 GPT Driver 2.3 WatchDog Driver 2.4 CoreTest 3.小结 <

【短时交通流量预测】基于单层BP神经网络

课题名称&#xff1a;基于单层BP神经网络的短时交通流量预测 版本时间&#xff1a;2023-04-27 代码获取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主获取 模型简介&#xff1a; 城市交通路网中交通路段上某时刻的交通流量与本路段前几个时段的交通流量有关&…

Android 自定义组件

在 Android 开发中&#xff0c;有时我们需要创建自定义的 UI 组件以满足特定的需求&#xff0c;这就是 Android 自定义组件的用途。在这篇博客中&#xff0c;我们将介绍如何创建和使用自定义组件&#xff0c;并以一个标题栏组件为例进行说明。 什么是自定义组件&#xff1f; …

【CSP试题回顾】201312-3-最大的矩形

CSP-201312-3-最大的矩形 解题思路 1. 遍历所有可能的矩形高度&#xff1a; 通过遍历所有矩形高度来找到最大的矩形&#xff0c;即对每个可能的高度 it&#xff08;从直方图中的最小高度到最大高度 heightMax&#xff09;&#xff0c;代码将尝试找到在这个高度或以上的最长连…

软件测试相关介绍

什么是软件测试&#xff1f; 软件测试&#xff1a;使用技术手段验证软件是否满足使用需求 软件测试是指通过运行、评估和验证软件系统的过程&#xff0c;以确定其是否满足预期的需求和质量标准。它是软件开发生命周期中的一个重要环节&#xff0c;旨在发现和修复潜在的缺陷和…

前端错误 “TypeError Cannot read properties of undefined (reading ‘xxx‘)

前端错误 “TypeError: Cannot read properties of undefined (reading ‘xxx‘) 原因分析及解决 情况一&#xff1a; 出现该错误的原因是因为你花括号中的某些属性未定义。极大可能是因为你写错了属性名称 情况二&#xff1a; 异步请求获取数据时&#xff0c;语句可能写错&…

Linux操作系统——进程信号

1.信号的概念 生活当中哪些场景算信号呢&#xff1f;比如说你晚上调了个闹钟&#xff0c;然后第二天早上你听到了闹钟响了你就知道该起床了&#xff0c;这种机制就叫做信号机制。在生活中我们的信号是非常非常多的&#xff0c;比如说有&#xff1a;红绿灯&#xff0c;下课铃声…

Java中多线程的各种姿势

在Java中&#xff0c;多线程编程是一种强大的并发编程技术&#xff0c;可以让你同时执行多个任务。Java提供了多种方式来创建和管理线程。以下是Java中给多线程使用的一些主要方法&#xff1a; 继承Thread类&#xff1a; 创建一个新的类继承自Thread类。覆盖run()方法以定义线程…