Android 12目前还是开发者预览版,预计到8月份会出正式版,但是官网已经给出了关于以Android 12为目标的应用适配应该注意的事项。
包含 intent 过滤器的应用组件必须声明 exported
属性
以 Android 12 为目标平台的应用,且包含使用 intent 过滤器的 activity、服务或广播接收器,必须为这些应用组件显式声明 android:exported
属性。
如果 activity、服务或广播接收器使用 intent 过滤器,并且未显式声明 android:exported
的值,则您的应用将无法在搭载 Android 12 的设备上进行安装。
如果您在使用 Android Studio 时尝试安装此类应用,Logcat 将显示以下错误消息:
Installation did not succeed.
The application could not be installed: INSTALL_FAILED_VERIFICATION_FAILURE
List of apks:
[0] '.../build/outputs/apk/debug/app-debug.apk'
Installation failed due to: 'null'
如果您的应用在需要声明 android:exported
的值时未进行此声明,则 Logcat 会提供以下错误消息:
Targeting S+ (version 10000 and above) requires that an explicit value for \
android:exported be defined when intent filters are present
以下代码段显示了一个服务示例,该服务包含 intent 过滤器并针对 Android 12 进行了正确配置:
<service android:name="com.example.app.backgroundService"
android:exported="false">
<intent-filter>
<action android:name="com.example.app.START_BACKGROUND" />
</intent-filter>
</service>
PendingIntent 必须声明可变性
如果以 Android 12 为目标平台,必须为应用创建的每个 PendingIntent 对象指定可变性。
要声明特定 PendingIntent 对象是否可变,请分别使用 PendingIntent.FLAG_MUTABLE
或 PendingIntent.FLAG_IMMUTABLE
标志。
如果您的应用创建未包含设置任何可变标志的