2018年7月29日 星期日

Android gradle dependencies 不匹配導致 build fail

最近遇到的一個 build fail 問題是這樣的,我將原本 gradle script 中的 library 都照著 Android Studio 的提示修改為最新版之後,就出現了 build fail

Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(25.4.0) from [com.android.support:preference-v14:25.4.0] AndroidManifest.xml:25:13-35
    is also present at [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0).
    Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:23:9-25:38 to override.

編譯器給出的錯誤訊息一向是跟天書差不多,但仔細看一下覺得應該是 support library 不匹配的問題,SO 有人說 project 中用到的 support library 都應該使用同一個版本,但我的 gradle script 中宣告的 support library 都是 v25.4 版

目標轉向懷疑是別的 dependencies library 出問題了,經過一個一個排查之後,發現問題是出在 google service library,我原本是用 8.4.0 版

com.google.android.gms:play-services-appindexing:8.4.0

後來改成了 16.0.1 版

com.google.firebase:firebase-appindexing:16.0.1

就是這個改動讓編譯出錯,照編譯器的錯誤訊息來看,猜測應該是因為最新的 16.0.1 google service library 依賴於 v26.1 版 support library,而我 project 內用的是 v25.4 版,而解決方法就是將 google service library 降為 10.0.0 就可以編譯成功了

在使用 dependencies library 的時候要注意不能無腦升級,需確定所有 library 依賴的 support library 版本都要一致才行

沒有留言:

張貼留言