问题描述
不知道你是否遇到这样的情况,AS编译工程失败,原因是下载响应的依赖包失败,能查到的最多解决办法就是换国内镜像,甚至要求使用科学。。。很多时候确实能解决问题。 但更奇怪的是这样,AS提示下载某个jar什么的失败,并给出链接,但你手动去下载它给出的链接明明是能下载的,速度还不慢。 反正我好像不止一次的遇到这样的问题了,有时候莫名其妙的好了,有时候死活不行,比如我现在遇到的这个问题就是如此。 我尝试使用kotlin自动生成文档的模块,叫做Dokka,我遇到这问题时的最新版本是1.4.32。 用AS执行编译总是无法下载某个jar,死活提示一个错误。我能尝试的办法都尝试了包括科学。 错误如下
Execution failed for task ':app:dokkaHtml'.
Could not resolve all files for configuration ':app:dokkaHtmlPlugin'.
Could not download kotlin-analysis-intellij-1.4.32.jar (org.jetbrains.dokka:kotlin-analysis-intellij:1.4.32)
Could not get resource 'https://repo.maven.apache.org/maven2/org/jetbrains/dokka/kotlin-analysis-intellij/1.4.32/kotlin-analysis-intellij-1.4.32.jar'.
Read timed out
说获取某个jar超时并给出了链接,我手动去下载这个jar发现这个jar确实不小有90m,我的网速不快大概一分钟下载完毕。(AS编译我等了20分钟!!!它最后告诉我超时,砸电脑?)... 经过多次编译都是同样失败后,我决定使用手动下载的方式。
结论(暗):AS自动下载做的不行啊!!!
但手动下载你必须知道下载的文件放哪里, 能让AS认为它所需的依赖jar什么的已经有了。 我们观察其它已经下载好的依赖库,就观察大家都耳熟能详的okhttp吧,在我机器上看到这样的目录
C:\Users\houcaihua\.gradle\caches\modules-2\files-2.1\com.squareup.okhttp3\okhttp\3.14.9
(注意所有的cache包都在这个目录下 “C:\Users\houcaihua\.gradle\caches\modules-2\files-2.1”)
再看它下面有很多子目录,子目录名字看起来像是什么东西的编码,经过一定的搜索,我们知道那些名字是SHA1 哈希值, 比如在okhttp目录下就有这样一个目录结构 "3e6d101343c7ea687cd593e4990f73b25c878383/okhttp-3.14.9.jar", 那么这个哈希值是怎么来的呢,经过查询我们发现这哈希值是这样来的,我只会windows 其它请自查
比如上面那个3e6d101343c7ea687cd593e4990f73b25c878383是这么来的
先把okhttp-3.14.9.jar复制一个到它的上一级目录
启动windows cmd命令行,执行如下命令:
certutil -hashfile "C:\Users\houcaihua\.gradle\caches\modules-2\files-2.1\com.squareup.okhttp3\okhttp\3.14.9\okhttp-3.14.9.jar" SHA1
我们得到这样的结果:
很好,我们现在知道了怎么获取这个哈希值了,说白了就是文件哈希,那么对于我遇到的case,通过一定的鉴别(主要看提示失败的URL,你会发现目录其实就是URL的一个个段)这个下载超时的文件应该位于C:\Users\houcaihua.gradle\caches\modules-2\files-2.1\org.jetbrains.dokka\kotlin-analysis-intellij\1.4.32的目录下,我们先把手动下载的文件复制到这个目录下,然后对手东下载的文件执行上面说的命令得到如下哈希
certutil -hashfile "d:\temp\kotlin-analysis-intellij-1.4.32.jar" SHA1
3c16e0d5135dec3c1aa8be53587c099b8a0f265e
接下来显而易见了,然后创建目录,复制文件,在用AS编译看看情况吧!
满怀希望的---AS走起。。。
还是失败了,自动生成个doc咋就这么难呢? 不过令人欣慰的是,下载那个jar包的流程确实是过了,说明我们手动添加的东西是正确的。产生的是这些错误
Failed to download package-list from https://developer.android.com/reference/androidx/package-list, this might suggest that remote resource is not available, module is empty or dokka output got corrupted
Failed to download package-list from https://developer.android.com/reference/kotlin/package-list, this might suggest that remote resource is not available, module is empty or dokka output got corrupted
Failed to download package-list from https://developer.android.com/reference/androidx/package-list, this might suggest that remote resource is not available, module is empty or dokka output got corrupted
Failed to download package-list from https://developer.android.com/reference/kotlin/package-list, this might suggest that remote resource is not available, module is empty or dokka output got corrupted
Failed to download package-list from https://developer.android.com/reference/androidx/package-list, this might suggest that remote resource is not available, module is empty or dokka output got corrupted
Failed to download package-list from https://developer.android.com/reference/kotlin/package-list, this might suggest that remote resource is not available, module is empty or dokka output got corrupted
Failed to download package-list from https://developer.android.com/reference/androidx/package-list, this might suggest that remote resource is not available, module is empty or dokka output got corrupted
手动访问这些错误地址,确实访问不了, 那么启动科学上网吧。
as go ,不过此时已经比较闹心 不激动了 爱咋地咋地吧,再不行,我也不搞了。。。。
还行吧,还是会有一些下载失败,可能是我要求生成文档太全面了,比如生成的文档对MainActivity是这种的
一大堆SDK函数,肯定是有办法搞的更好的,不是本文讨论的范围。
okay 已经超字了。 总之如果认真阅读,此文应该能解决手动下载依赖包的问题。