1.放弃了之前一直使用的Dalvik虚拟机,改用了ART虚拟机,实现了真正的跨平台编译。 Android内存优化(一)Dalvik虚拟机和ART虚拟机对比
当targetSdkVersion >= 23时 分位Normal Permissions和Dangerous Permissions。 ActivityCompat.checkSelfPermissions()请求,低于6.0的版本,该方法默认返回值为PackManager.PERMISSION_GRANTED,已授权状态。 onRequestPermissionsResult()处理权限回调结果。 弹窗如果用户选择了『不在询问』,下次则不会再次弹框,而是直接处理拒绝后的逻辑。
加强了软件间的关联,支持点击链接跳转到对应的App(todo:scheme调起???)
对于面向 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("/");
所有通知都必须分到一个渠道,即新增NotificationChannel。
一种特殊的多窗口模式,常用于视频播放。
桌面icon在不同的设备型号上显示为不同的形状。
Version API Google 安全浏览服务 HTML5 Geolocation API Renderer Importance API Termination Handling 选择停用指标收集
后台service限制。 广播限制:除了有限的例外情况,应用无法使用清单注册隐式广播。
可以通过清单文件配置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>
通过DisplayCutout类可以确定非功能区域的位置和形状,这些区域不应显示内容。
用户转至“设置”进行相应设置或开启“省电模式”即可激活新的系统级深色主题。这会将系统界面更改为深色,并为支持深色主题的应用启用深色主题。您可以为应用构建自定义深色主题,也可以选择使用新的 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卸载后,文件不会被删除。
所有应用.png
以10为目标平台的应用.png
相关: https://developer.android.google.cn/about/versions/10/behavior-changes-all?hl=zh-cn
1.单次权限授权 从Android 11开始,每当应用请求与位置信息、麦克风或摄像头相关的权限时,面向用户的权限对话框会包含仅限这一次选项。如果用户在对话框中选择此选项,系统会向应用授予临时的单次授权。 2.请求位置权限(位置权限不能和别的权限同时请求,并且建议前台位置权限和后台位置权限分开请求) 3.软件包可见性(限制app不去访问别的应用的包名及内容,如果需要访问则可以在manifest文件中添加对应应用的query) 4.前台服务类型(在前台服务要使用摄像头和麦克风需要再service中添加对应的camera和microphone) 5.权限自动重置(长时间未使用,则重置权限)。 如果应用以Android 11或更高版本为目标平台并且数月未使用,系统会通过自动重置用户已授予应用的运行时敏感权限来保护用户数据
所有应用.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
影响所有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
将 READ_EXTERNAL_STORAGE 细分为IAMGES、VIDEO、AUDIO权限(若设置 targetSdk>=33 则此项必需适配!)
废弃setAppCacheEnabled与setForceDark方法;(若设置 targetSdk>=33 则此项必需适配!)
image.png
image.png
官方从 Android 9(API 级别 28)开始,逐步开始对应用使用的非 SDK 接口实施了限制。 如果你的APP通过引用非 SDK 接口或尝试使用反射或 JNI 来获取句柄,这些限制就会起作用。官方给出的解释是为了提升用户体验、降低应用崩溃风险。
image.png
所有应用.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
所有应用.png
以14为目标的平台的应用.png