hi 大家好,我是 DHL。上任于美团、快手、小米。大众号:ByteCode,专注有用、风趣的硬核原创内容,Kotlin、功能优化、体系源码、图解算法、大厂面经。
Android 14 要来了,做好准备要开端适配 Android 14 了,这篇文章首要介绍在 Android 14 上一些功用和权限的改变,接下来咱们一起来看一下这些行为的改变对咱们的 App 产生哪些影响。
有必要提供前台服务类型
从 Android 14 开端,假如运用了前台服务需求指定至少一个前台服务类型。假如没有指定,那么在调用 startForeground()
办法的时候,将会抛出 MissingForegroundServiceTypeException
反常。
为了帮助开发人员更好的运用前台服务,Android 10 在 <service>
元素中增加了 android:foregroundServiceType
屬性,在这个特点中指明前台服务类型,咱们也能够将多种前台服务类型合并运用,代码如下所示。
<manifest ...>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<application ...>
<service
android:name=".MyMediaPlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="false">
</service>
</application>
</manifest>
Android 提供了以下前台服务类型:
- camera
- connectedDevice
- dataSync
- health
- location
- mediaPlayback
- mediaProjection
- microphone
- phoneCall
- remoteMessaging
- shortService
- specialUse
- systemExempted
Android 14 新增了一些前台服务类型:
- health
- remoteMessaging
- shortService
- specialUse
- systemExempted
运行时动态注册播送接收器有必要指定导出行为
在 Android 14 上,运行时经过 Context#registerReceiver()
动态注册播送接收器,需求设置符号 RECEIVER_EXPORTED
或 RECEIVER_NOT_EXPORTED
,标识是否导出该播送,防止使用程序出现安全漏洞,假如注册的是体系播送,则不需求指定符号。
隐式意图约束
Android 14 约束 App 运用隐式意图,假如经过一个隐式意图发动一个 exported = false
的组件,将会抛出反常。
例如我在 manifest
中声明了一个 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
将会抛出反常。
// Throws an exception when targeting Android 14.
context.startActivity(Intent("com.example.action.APP_ACTION"))
假如要发动 exported = false
的组件,应该运用显示意图。
// This makes the intent explicit.
val explicitIntent = Intent("com.example.action.APP_ACTION")
explicitIntent.apply {
package = context.packageName
}
context.startActivity(explicitIntent)
更安全动态加载程序代码
在 Android 14 上,假如你的 App 运用了动态加载程序代码,需求指定为只读状况,否则体系将会抛出反常。示例代码如下所示。
val jar = File("DYNAMICALLY_LOADED_FILE.jar")
val os = FileOutputStream(jar)
os.use {
// Set the file to read-only first to prevent race conditions
jar.setReadOnly()
// Then write the actual file content
}
val cl = PathClassLoader(jar, parentClassLoader)
SCHEDULE_EXACT_ALARM 权限
在 Android 12 上新增 SCHEDULE_EXACT_ALARM
权限,可设置准确闹钟时刻,能够调用 setAlarmClock()
、setExact()
setExactAndAllowWhileIdle()
等等办法设置准确闹钟时刻, 可是需求在 manifest
中申明 android.permission.SCHEDULE_EXACT_ALARM
权限。
https://developer. android. com/about/versions/12/behavior-changes-12 #exact -alarm-permission
从 Android 14 开端 SCHEDULE_EXACT_ALARM
权限,不在授予 Android 13 以上的版别为方针的使用程序,该权限默认为回绝状况。
只能停止自己的使用程序
从 Anroid 14 开端,当咱们调用 ActivityManager#killBackgroundProcesses()
办法时,只能停止自己的使用程序,假如传入其他使用程序的包名,不会对其他使用程序产生影响,Logcat 也会输出相应的提示。
Invalid packageName: com.example.anotherapp
可装置方针 App targetSdkVersion 下限
从 Android 14 开端,无法装置 targetSdkVersion < 23
的 App,这一意图首要为了进步运用者的安全性和隐私权。
比如某些歹意 App 设置 targetSdkVersion == 22
,防止遭到 Android 6.0 Marshmallow
权限的影响,Android 14 改变会让歹意 App 更难躲过更严谨的安全性和隐私权办法,假如你尝试装置 targetSdkVersion < 23
的 App,将会装置失利。
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7
运用者无法封闭告诉的改变
调用 Notification.Builder#setOngoing(true)
或 NotificationCompat.Builder#setOngoing(true)
办法能够防止运用者封闭前台告诉,从 Android 14 开端允许运用者封闭这类型的告诉,可是但在下列情況下,运用者无法封闭告诉:
- 手机锁守时
- 点击全部铲除告诉的按钮(防止不小心封闭告诉)
字体缩放 200%
从 Android 14 开端,体系支撑 200% 的字体缩放倍数,为低视能运用者提供符合无障碍网页内容标准 (WCAG) 的额外无障碍选项。
假如您现已运用缩放像素 (sp) 单位来定义文字大小,则此改动或许不会对您的使用程式造成太大影响。
关于 Android 12 和 Android 13 功用和权限的改变,点击下方链接前检查:
- Android 13这些权限抛弃,你的使用受影响了吗?
- Android 12 已来,你的 App 崩溃了吗?
全文到这里就结束了,感谢你的阅览,坚持原创不易,欢迎在看、点赞、共享给身边的小伙伴,我会继续共享原创干货!!!
我开了一个云同步编译东西(SyncKit),首要用于本地写代码,同步到长途设备,在长途设备上进行编译,最终将编译的成果同步到本地,代码现已上传到 Github,欢迎前往库房 hi-dhl/SyncKit 检查。
- 库房 SyncKit:https://github.com/hi-dhl/SyncKit
- 下载地址:https://github.com/hi-dhl/SyncKit/releases
Hi 大家好,我是 DHL,上任于美团、快手、小米。大众号:ByteCode ,共享有用、风趣的硬核原创内容,Kotlin、Jetpack、功能优化、体系源码、算法及数据结构、动画、大厂面经,真挚推荐你重视我。
- 大众号:ByteCode
- 哔哩哔哩: space.bilibili.com/498153238
- : juejin.im/user/259450…
- 博客: hi-dhl.com
- Github: github.com/hi-dhl
最新文章
- Android 13这些权限抛弃,你的使用受影响了吗?
- Android 12 已来,你的 App 崩溃了吗?
- 国外大厂面试题, 7 个 Android Lifecycle 重要的知识点
- Android 利器,我开发了云同步编译东西
- Twitter 上风趣的代码
- 谁动了我的内存,揭秘 OOM 崩溃下降 90% 的隐秘
- 反射技巧让你的功能提高 N 倍
- 90%人不懂的泛型局限性,泛型擦除,星投影
- 揭秘反射真的很耗时吗,射 10 万次耗时多久
- Google 宣布抛弃 LiveData.observe 办法
- 影响功能的 Kotlin 代码(一)
- 揭秘 Kotlin 中的 == 和 ===
开源新项目
-
云同步编译东西(SyncKit),本地写代码,长途编译,欢迎前去检查 SyncKit
-
KtKit 小巧而有用,用 Kotlin 言语编写的东西库,欢迎前去检查 KtKit
-
最全、最新的 AndroidX Jetpack 相关组件的实战项目以及相关组件原理剖析文章,正在逐步增加 Jetpack 新成员,库房继续更新,欢迎前去检查 AndroidX-Jetpack-Practice
-
LeetCode / 剑指 offer,包括多种解题思路、时刻复杂度、空间复杂度剖析,在线阅览