集成 oppo 推送 Manifest merger failed : Attribute application@allowBackup value=(false) from
问题描述
在 安卓上集成 OPPO 推送,引入了com.heytap.msp-push-2.1.0.aar
,Android Studio 编译的时候出错了。
Manifest merger failed : Attribute application@allowBackup value=(false) from AndroidManifest.xml:8:9-36
is also present at [com.heytap.msp-push-2.1.0.aar] AndroidManifest.xml:13:18-44 value=(true).
Suggestion: add 'tools:replace="android:allowBackup"' to <application> element at AndroidManifest.xml:7:5-117 to override.
java.lang.RuntimeException: Manifest merger failed with multiple errors, see logs
at com.android.build.gradle.internal.tasks.manifest.ManifestHelperKt.mergeManifestsForApplication(ManifestHelper.kt:181)
at com.android.build.gradle.tasks.ProcessApplicationManifest.doFullTaskAction(ProcessApplicationManifest.java:218)
at com.android.build.gradle.tasks.ProcessApplicationManifest.doIncrementalTaskAction(ProcessApplicationManifest.java:324)
at com.android.build.gradle.internal.tasks.IncrementalTask.handleIncrementalInputs(IncrementalTask.kt:111)
at com.android.build.gradle.internal.tasks.IncrementalTask.access$handleIncrementalInputs(IncrementalTask.kt:64)
at com.android.build.gradle.internal.tasks.IncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(AndroidVariantTask.kt:51)
at com.android.build.gradle.internal.tasks.IncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(AndroidVariantTask.kt:31)
at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:91)
at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction$gradle(IncrementalTask.kt:134)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:103)
...
我的项目 AndroidManifest.xml
如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example">
<application
android:allowBackup="false">
...
</application>
</manifest>
解决方法
解压 com.heytap.msp-push-2.1.0.aar
,查看 AndroidManifest.xml
,内容如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.heytap.mcssdk"
android:versionCode="2100"
android:versionName="2.1.0" >
<application android:allowBackup="true" >
...
</application>
</manifest>
发现 android:allowBackup="true"
这一行,导致了备份模式设置的冲突,合并时出错。
android:allowBackup:是否允许应用参与备份和恢复基础架构。如果将此属性设为 false,则永远不会为该应用执行备份或恢复,即使是采用全系统备份方法也不例外(这种备份方法通常会通过 adb 保存所有应用数据)。此属性的默认值为 true。
为了保持一致,有2种解决方法。
1. 将 android:allowBackup 设置为true
android:allowBackup
设置为 true
,或者直接删除,因为默认为 true
。
2. 增加 tools:replace="android:allowBackup"
可以确保备份模式统一为 false
,即关闭。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example">
<application
android:allowBackup="false"
tools:replace="android:allowBackup">
...
</application>
</manifest>