问题发现时间: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 启动异常