問題發現時間:2018年12月11日上午. 當準備執行React Native專案的android版本時, 報出一個錯誤. Could not find any matches for com.android.tools.build:gradle:2.2.+ as no versions of com.android.tools.build:gradle are available.
完整錯誤資訊如下:
Could not find any matches for com.android.tools.build:gradle:2.2.+
as no versions of com.android.tools.build:gradle are available.
Searched in the following locations:
https://jcenter.bintray.com/com/android/tools/build/gradle/maven-metadata.xml
https://jcenter.bintray.com/com/android/tools/build/gradle/
Required by: project: react-native-image-picker
複製程式碼
此時需要儘快更新線上版本, 於是就開始尋找問題所在. 因為開發人員比較多, 所以最開始的時候懷疑是因為某個開發人員不小心升級了某個東西不相容導致的. 於是開始檢查 git 程式碼日誌. 看了一下果然是有人提交了東西, 但是貌似和專案沒有太大關係.
於是只能換一個方向繼續尋找答案.
突然一想, 這個問題既然出現在 react-native-image-picker 包中, 應該在 github 上就有相關的問題說明吧, 試試看咯.
果然, 問題是存在的. 看起來和我的問題是一樣的. issue 裡面不乏熱心的朝陽群眾, 果然已經發現並解決了問題. 解決方案是進入到 node_modules 中, 找到 react-native-image-picker 包, 並把包中的 android 目錄下的 build.gradle 檔案中的classpath 'com.android.tools.build:gradle:2.2.+'
複製程式碼
改成
classpath 'com.android.tools.build:gradle:2.2.3'
複製程式碼
然後試了一下, 發現, 對, 是可以, 但是, 我特麼要跟其他人解釋我為什麼要改這個裡面的玩意, 而且特麼的萬一有人不聽, 或者看不到, 到時候還要找我怎麼辦. 而且, 每次更新程式碼, 刪除了 node_modules 或者來了新人我是不是還要再說一遍? 不行, 這麼蠢的事情絕對不能做.
我必須要找一個萬全之策. 果然, 功夫不負有心人, 終於讓我找到了問題更好的解決方案. 根據目前的推測, 這個問題是來自於 jcenter, 可能少了某些東西, 或者就是偉大的城牆又厚了一點, 導致現在下載不穩定. 我感覺說不定過幾天就好了, 但是目前問題出現在這裡, 還是需要及時解決.目前最新的解決方案如下, 在專案的 android 目錄下的 build.gradle 中, 文末新增如下程式碼
subprojects { project ->
def name = project.name
if (name.contains('react-native-image-picker')) {
buildscript {
repositories {
maven { url "https://dl.bintray.com/android/android-tools/" }
}
}
}
}
複製程式碼
這個解決方案解決了團隊開發中, 其他人需要修改檔案的弊端, 目前也能完美的解決這個問題. 當然了, 目前我遇到的問題出現在 react-native-image-picker 包中, 其他人的專案可能就在別的包中, 相類似的修改判斷或者新增更多的判斷都可以.
為了寫這篇文章, 我錯過了雙 12 的 22:00 搶購, 1 元秒殺辣醬的機會.....心痛啊.
為了安慰我, 點個贊再走唄.
個人部落格地址: React Native Android 啟動異常