我已经将模拟器版本和Android SDK版本更新到Android S (Android 12)。更新后,我无法运行项目。我不能运行Hello, World!项目(空项目),但我可以建立Gradle以及,但我不能运行项目。我总是得到错误:
Manifest合并失败:针对Android 12及更高版本的应用程序失败
需要为android指定一个显式值:当
相应的组件定义了一个意图过滤器。看到
https://developer.android.com/guide/topics/manifest/activity-element#exported
获取详细信息。
我该怎么解决呢?
以下是截图:
使用Android 12 SDK时如何解决此问题?
这个问题是应用这个问题的解决方案之后的问题,和这个问题不一样。而且,这个问题比这个更古老。
针对Android 12的应用
将应用程序的targetSdkVersion更改为S(32或31)以启用新行为。
然后将Manifest中的android:exported=""属性指定为true或false,具体取决于Activity。
对于启动器活动,如splash或MainActivity,使用android:exported="true",对于其余的活动,使用android:exported="false"
例如:
<!-- It's **true** for the launcher Activity -->
<activity android:name=".SplashActivity"
android:exported="true" />
<!-- It's **false** for the rest of the Activities -->
<activity android:name=".MainActivity"
android:exported="false" />
你需要指定android:exported="false"或android:exported="true"
清单:
<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.MyApplication.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
如文件所述:
如果您的应用程序针对Android 12,并包含活动,服务,或
广播接收器使用意图过滤器,你必须显式
为这些应用组件声明android: exported属性。
警告:如果活动、服务或广播接收器使用intent
的过滤器,并且没有显式声明的值
Android:导出,您的应用程序不能安装在运行的设备上
Android 12。
还要检查何时为'android:exported'值使用true/false。
在你的清单,添加android:exported="true"或android:exported="false "在你的默认启动活动属性。
完成了!你可以在Android 12上运行你的应用程序。
启动器活动所需
<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.MyApplication.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
接收方要求
<receiver android:name=".Musicreceiver"
android:exported="true">
</receiver>
服务要求
<service
android:name=".service.LoggerService"
android:exported="true"
android:enabled="true" />