1、问题描述
在android12 (OPPO PEEM00)上安装APP时,提示上述异常
原因分析:
如果应用以 Android 12 为目标平台,且包含使用 intent 过滤器的 activity、服务或广播接收器,必须为这些组件显式声明 android:exported 属性。
警告:如果 activity、服务或广播接收器使用 intent 过滤器,并且未显式声明 android:exported 的值,则应用将无法在搭载 Android 12 的设备上进行安装。
(1)android:exported 是 Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的一个属性。
(2)android:exported 代表是否能被其他应用隐式调用。
(3)true允许被启动,false不允许被启动。
(4)android:exported 默认值是由有无intent-filter决定的,如果有intent-filter,默认值为true,否则为false。
(5)android:exported = false的情况下,这个Activity将只会被当前Application或者拥有同样user ID的Application的组件调用,对于其他应用,即使有intent-filter匹配,也无法打开,即无法被其他应用隐式调用。
2、解决方案
在AndroidManifest.xml
中使用 intent 过滤器,显式声明 android:exported 的值,如:
<service android:name="com.example.app.backgroundService"
android:exported="true">
<intent-filter>
<action android:name="com.example.app.START_BACKGROUND" />
</intent-filter>
</service>
或
<activity android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>