首先致謝: https://www.jianshu.com/p/a22c55a28064, 我們不生產代碼, 我們只做大自然的搬運工!
一.【問題背景】 項目導入第三方(OPPO 和魅族 廠商推送)提供的aar 文件,報錯
錯誤描述:Manifest merger failed with multiple errors, see logs
打開詳細gradle報錯日志,發現是執行任務processDebugManifest報錯:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDebugManifest' Caused by: java.lang.RuntimeException: Manifest merger failed with multiple errors, see logs at com.android.builder.core.AndroidBuilder.mergeManifestsForApplication(AndroidBuilder.java:558) at com.android.build.gradle.tasks.ProcessApplicationManifest.doFullTaskAction(ProcessApplicationManifest.java:208) at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:106)
二. 【原因定位】使用命令查看更詳細日志
gradlew processDebugManifest -stacktrace
詳細日志:
uses-sdk:minSdkVersion 17 cannot be smaller than version 19 declared in library [:com.heytap.msp:] C:\Users\Mostone-0030\.gradle\caches\transforms-2\files-2.1\812e2e860b0bf2a7996e395481d6e5c9\AndroidManifest.xml as the library might be using APIs not availa ble in 17 Suggestion: use a compatible library with a minSdk of at most 17, or increase this project's minSdk version to at least 19, or use tools:overrideLibrary="com.heytap.mcssdk" to force usage (may lead to runtime failures)
See http://g.co/androidstudio/manifest-merger for more information about the manifest merger.
三. 【解決方案】
當我們項目Manefest的某些屬性和第三方庫中Manefest的屬性有沖突會報上面的錯誤。
比如第三方庫中也定義了icon、allowBackup等屬性,且會與你的項目不同,則發生沖突,編譯就會報錯。
解決辦法就是在我們項目的Application節點中加入tools:replace來替換三方庫中的相關屬性,如下:(根據實際情況)
比如第三方庫中也定義了icon、allowBackup等屬性,且會與你的項目不同,則發生沖突,編譯就會報錯。
解決辦法就是在我們項目的Application節點中加入tools:replace來替換三方庫中的相關屬性,如下:(根據實際情況)
<application ... tools:replace="android:allowBackup,android:icon"> ... <uses-sdk tools:overrideLibrary="com.heytap.mcssdk,com.meizu.cloud.pushinternal" />
還有一種方案就是去掉第三方庫中沖突的屬性。
總結: 核心代碼
使用命令查看更詳細日志,快速定位bug 並解決
gradlew processDebugManifest -stacktrace