注册

狂飙!Android 14 第一个预览版已发布~

前言


Android系统的更新速度真的是“一路狂飙”,23年2月8日,Android 14 第一个预览版本发布。Android 14 将继续致力于提高开发人员的工作效率,同时增强性能、隐私、安全性和用户自定义。



预计将会在八月份发布最终的Release版本



获取Android 14


如果你想获取Android 14系统可以使用下列Pixel系列设备




  • Pixel 4a (5G)




  • Pixel 5 and 5a




  • Pixel 6 and 6 Pro




  • Pixel 6a




  • Pixel 7 and 7 Pro




或者使用虚拟机的方式,因为家庭困难,所以这里我使用的是虚拟机的方式。



设置SDK


首先我们来安装Android 14 SDK,操作如下图所示。




安装好之后,设置编译版本和目标版本为Android 14 ,代码如下所示


android {
compileSdkPreview "UpsideDownCake"
defaultConfig {
targetSdkPreview "UpsideDownCake"
}
}
复制代码

接着我们重点来看,第一个预览版本主要更新了哪些内容,重要分为对所有App的影响和目标版本为14的影响。


更新内容


所有App


安全



  • 从Android 14开始,targetSdkVersion低于23的应用无法安装。

也就是说所有App的targetSdkVersion至少等于23,也就是要适配Android 6.0,这是因为Google考虑到部分应用恶意使用低级别的目标版本来规避隐私和安全权限。


辅助功能



  • 从 Android 14 开始,系统支持高达 200% 的字体缩放。

这一目的是为弱视用户提供符合 Web 内容无障碍指南 (WCAG) 的额外无障碍选项。如果开发者已经使用缩放像素 (sp) 单位来定义文本大小,那么此更改可能不会对您的应用产生重大影响。



核心功能



  • 默认情况下拒绝计划精确警报

精确警报用于用户有意的通知,或用于需要在精确时间发生的操作。 从 Android 14 开始,SCHEDULE_EXACT_ALARM 权限不再预先授予大多数新安装的针对 Android 13 及更高版本的应用程序——该权限默认情况下被拒绝。



  • 上下文注册的广播在缓存应用程序时排队

在 Android 14 上,当应用处于缓存状态时,系统可能会将上下文注册的广播放入队列中,也就说,并不是注册之后广播就会直接启动,将根据系统使用情况来等待分配。


目标版本为Android 14的App


核心功能



  • 需要前台服务类型

如果应用以 Android 14 为目标平台,则它必须为应用内的每个前台服务指定至少一种前台服务类型。


Android 14 还引入了用于健康和远程消息传递用例的前台服务类型。 该系统还为短服务、特殊用例和系统豁免保留新类型。


前台服务类型有很多,如下列所示:




  • connectedDevice




  • dataSync




  • health




  • location




  • mediaPlayback




  • mediaProjection




  • microphone




  • phoneCall




  • remoteMessaging




  • shortService




  • specialUse




  • systemExempted




其中health、remoteMessaging、shortService、specialUse 和 systemExempted 类型是 Android 14 中提供的新类型。


声明代码如下所示:


<manifest ...>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYPACK" />
<application ...>
<service
android:name=".MyMediaPlaybackService"
android:foregroundServiceType="mediaPlayback"
android:permission="android.permission.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYPACK"
android:exported="false">
</service>
</application>
</manifest>

Service.startForeground(0, notification, FOREGROUND_SERVICE_TYPE_LOCATION)

安全




  • 对隐式意图的限制




    • 应用程序必须使用明确的意图来交付给未导出的组件,或者将组件标记为已导出。




    • 如果应用程序创建一个可变的挂起意图,但意图未指定组件或包,系统现在会抛出异常。






比如我们在配置文件中声明了一个exported为false的Activity,代码如下所示:


<activity
android:name=".AppActivity"
android:exported="false">
<intent-filter>
<action android:name="com.example.action.APP_ACTION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

然后我们按照意图启动这个Activity,代码如下所示。


context.startActivity(Intent("com.example.action.APP_ACTION"))

那么很抱歉,这里将抛出一个异常。必须改为显示的Intent,代码如下所示:


val explicitIntent =
Intent("com.example.action.APP_ACTION")
explicitIntent.apply {
package = context.packageName
}
context.startActivity(explicitIntent)


  • 更安全的动态代码加载

新增功能


联系人


Android 14 增加了以下两个字段:




  • Contract.Contacts#ENTERPRISE_CONTENT_URI




  • ContactsContract.CommonDataKinds.Phone#ENTERPRISE_CONTENT_URI




这些字段一起允许具有 READ_CONTACTS 权限的个人应用程序列出所有工作配置文件联系人和电话号码,只要 DevicePolicyManager 中的跨配置文件联系人策略允许。


写在最后


由于,昨天刚刚发布了第一个预览版本,所以我们能感觉到的变化不是太大,不过Android的方向一直都是在权限、隐私等方向。后续如何适配,我们只有等着官方稳定版本出来之后在讨论了~


Android系统更新如此迅速,你觉得这算是狂飙吗?


作者:黄林晴
链接:https://juejin.cn/post/7198067983775973432
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

0 个评论

要回复文章请先登录注册