丰富的线上&线下活动,深入探索云世界
做任务,得社区积分和周边
最真实的开发者用云体验
让每位学生受益于普惠算力
让创作激发创新
资深技术专家手把手带教
遇见技术追梦人
技术交流,直击现场
海量开发者使用工具、手册,免费下载
极速、全面、稳定、安全的开源镜像
开发手册、白皮书、案例集等实战精华
为开发者定制的Chrome浏览器插件
官方提供有三种方式:
一般来说Android版本更新都会有两种行为变更:
1、所有应用都会受到的影响,即使你的应用没有将TargetSDK升级到34(即Android14),但你的应用可能在Android14的设备中运行,那么就需要你做的适配
2、将TargetSDK升级到34,应用也在Andorid14的设备中运行时需要你做的适配
这一个模块咱们先来看第一个,即所有应用都需要做的适配。
当然,如果你的应用是系统应用,可以进行申请豁免。
当应用离开缓存状态(例如返回前台)时,系统会传递所有已加入队列的广播。某些广播的多个实例可以合并为一个广播。
如果传入另一个应用的软件包名称的话,此方法对该应用的后台进程将没有任何影响,只会在Logcat中会显示以下消息:
InvalidpackageName:com.example.anotherapp应用不应使用killBackgroundProcesses()API,也不得以其他方式尝试影响其他应用的进程生命周期,即使在旧版操作系统上也是如此。Android旨在让缓存应用在后台运行,并在系统需要内存时自动终止它们。
恶意软件通常会以较旧的API级别为目标平台,以绕过在较新版本Android中引入的安全和隐私保护机制。例如,有些恶意软件应用使用targetSdkVersion22,以避免受到Android6.0Marshmallow(API级别23)在2015年引入的运行时权限模型的约束。这项Android14变更使恶意软件更难以规避安全和隐私权方面的改进限制。尝试安装以较低API级别为目标平台的应用将导致安装失败,并且Logcat中会显示以下消息:
INSTALL_FAILED_DEPRECATED_SDK_VERSION:ApppackagemusttargetatleastSDKversion23,butfound7在升级到Android14的设备上,targetSdkVersion低于23的所有应用都将继续保持安装状态。如果需要测试以旧版API级别为目标平台的应用,请使用以下ADB命令:
如果应用向用户显示不可关闭的前台通知的话需要注意:Android14中允许用户关闭此类通知。
在以下情况下,此类通知仍不可关闭:
此外,这一新行为不适用于以下用例中的不可关闭通知:
在Android14中,当应用请求Android13(API级别33)中引入的任何视觉媒体权限时,用户可以授予对其照片和视频的部分访问权限:READ_MEDIA_IMAGES或READ_MEDIA_VIDEO。
新对话框会显示以下权限选项:
上面说了所有的应用在Android14中需要做的适配,这里来看下将TargetSDK升级到Android14的应用需要做的适配吧!
如果TargetSDK是Android14,则必须为应用中的每个前台服务指定至少一个前台服务类型,系统期望具有特定类型的前台服务来满足特定的用例。下面列出了可供选择的前台服务类型:
下面来举一个栗子吧:
如果应用中的用例与这些类型中的任何一个都没有关联,官方建议咱们使用WorkManager或用户发起的数据传输作业。
WorkManager大家都使用过,但“用户发起的数据传输作业”又是个什么东西呢?
如需运行用户发起的作业,请执行以下操作:
用户和系统都可以停止用户发起的传输作业。
在用户按Stop时,系统会执行以下操作:
因此,建议在发布的作业通知中提供控件,以便顺利停止和重新调度作业。
上述说明的例外情况包括:
下表显示了支持给定作业约束条件的不同作业类型,以及WorkManager支持的作业约束条件集。可以使用表格前的搜索栏按作业约束方法的名称过滤表格。
以下是用户发起的数据传输作业允许使用的约束条件:
Android14将继续更新Android的核心库,以与最新OpenJDKLTS版本中的功能保持一致,包括适合应用和平台开发者的库更新和Java17语言支持。
以下变更可能会影响应用兼容性:
对于以Android14为目标平台的应用,Android会通过以下方式限制应用向内部应用组件发送隐式intent:
这些变更可防止恶意应用拦截意在供应用内部组件使用的隐式intent。
//ThrowsanexceptionwhentargetingAndroid14.context.startActivity(newIntent("com.example.action.APP_ACTION"));如需启动非导出的activity,应用应改用显式intent:
如果必须动态加载代码,请使用以下方法,在动态文件(例如DEX、JAR或APK文件)打开并写入任何内容之前立即将其设为只读:
Filejar=newFile("DYNAMICALLY_LOADED_FILE.jar");try(FileOutputStreamos=newFileOutputStream(jar)){//Setthefiletoread-onlyfirsttopreventraceconditionsjar.setReadOnly();//Thenwritetheactualfilecontent}catch(IOExceptione){...}PathClassLoadercl=newPathClassLoader(jar,parentClassLoader);处理已存在的动态加载文件为防止系统对现有动态加载的文件抛出异常,官方建议先删除并重新创建文件,然后再尝试在应用中重新动态加载这些文件。重新创建文件时,请按照上述指南在写入时将文件标记为只读。或者,可以将现有文件重新标记为只读,但在这种情况下,官方建议先验证文件的完整性(例如,对照可信值检查文件的签名)以保护应用免遭恶意操作的影响。
Android14包含更新后的受限非SDK接口列表(基于与Android开发者之间的协作以及最新的内部测试)。在限制使用非SDK接口之前,官方说会尽可能确保有可用的公开替代方案。
上面的一大堆就是在Android14中应用需要做的适配,其实看着很多,实际上需要应用修改的地方并不是很多。Android14面向开发者还引入了一些出色的新功能和API,一起来看下吧!
有30亿人在使用区分性别的语言,此类语言的语法类别(例如名词、动词、形容词和介词)会根据交谈所涉及的人或物的性别而变化。传统上,许多区分性别的语言使用阳性语法性别作为默认或通用性别。
区域偏好使用户能够修改温度单位(华氏度、摄氏度),一周的第一天(周日为第一天还是周一)。
要找到这些设置,请打开设置应用程序并导航到系统>语言和输入>区域偏好,官方截图如下:
while(pathIterator.hasNext()){PathIterator.Segmentsegment=pathIterator.next();Log.i(LOG_TAG,"segment:"+segment.getVerb()+","+segment.getPoints());}PathIterator还有一个非分配版next(),可以在其中传入缓冲区来保存点数据。
为了创建更标准化的截图检测体验,Android14中引入了一个保护隐私的截图检测API。这个API允许应用程序以每个活动为基础注册回调。当用户在活动可见时截取屏幕截图时,调用这些回调函数,并通知用户。
注意:回调不提供实际截图的图像。当用户截图时,屏幕上显示的内容由应用进行决定。
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE,LayoutParams.FLAG_SECURE);Android14中的企业功能新变化联系人Android14添加了以下两个字段:
可以使用DevicePolicyManager中的以下方法设置和查询该政策,这些方法指定了允许哪些软件包从个人资料中访问工作联系人:
这些方法可向后兼容,应改用这些方法,而不是现在已废弃的下列方法:
同样,Android14还针对跨资料来电显示搜索添加了以下方法:
超宽带(UWB)是一种无线技术,在很大一部分射频频谱内,都能使用非常低的能量水平进行短距离、高带宽通信。
Android14废弃了以下API,值得引起注意:
虽然目前Android14还没有发布稳定版版,但现在已经是Beta版本了,之后API这些也不会进行大的变动的,剩下的应该就是性能上的一些优化了,大家可以放心进行查看。其实上面描述的都可以在官方文档中找到,我只是做了一些整理,方便大家进行查看配置。