集成 oppo 推送 Manifest merger failed : Attribute application@allowBackup value=(false) from

Android 2020-05-13 阅读 234 评论 0

问题描述

在 安卓上集成 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>
最后更新 2020-05-13
MIP.watch('startSearch', function (newVal, oldVal) { if(newVal) { var keyword = MIP.getData('keyword'); console.log(keyword); // 替换当前历史记录,新增 MIP.viewer.open('/s/' + keyword, {replace: true}); setTimeout(function () { MIP.setData({startSearch: false}) }, 1000); } }); MIP.watch('goHome', function (newVal, oldVal) { MIP.viewer.open('/', {replace: false}); });