发布于 

Android Studio Sync Failed记录

背景介绍

修复系统后重新安装了Android Studio,例行Hello World, 下载gradle插件时久违地碰到了Sync Failed,回想全面爬梯前被这个问题支配的恐惧,觉得有必要单开一帖记录一下。

网络环境

  • 已爬梯,全局模式。

  • 未配置Android Studio内部爬梯功能

  • build.gradle为默认配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    // Top-level build file where you can add configuration options common to all sub-projects/modules.
    buildscript {
    ext.kotlin_version = "1.5.0"
    repositories {
    mavenCentral()
    google()
    }
    dependencies {
    classpath 'com.android.tools.build:gradle:4.2.1'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
    }
    }

    allprojects {
    repositories {
    mavenCentral()
    google()
    jcenter() // Warning: this repository is going to shut down soon
    }
    }

    task clean(type: Delete) {
    delete rootProject.buildDir
    }

问题描述

  • gradle可正常下载
  • 部分依赖可正常下载
  • 报错time out,无法下载Could not resolve com.android.tools.build:gradle:4.2.1.

尝试记录

  • 第一反应是之前看到过的jcenter被废弃,去官网看了下公告,服务到明年,排除这个原因。

  • 试了试之前的老办法,添加国内的一些仓库,增加了阿里云的,没有用,一开始推测是gradle-4.2.1.pom属于比较新的版本,阿里云仓库中还未同步更新,因此最后还是会从google仓库中去下载。仍然提示time_out,而给出的下载地址在浏览器中可以正常访问,因此应该是爬梯软件在Android Studio上没起作用。因此得出解决方法有二:

    1. 选择较老的gradle及gradle-plugin版本从阿里云下载
    2. 在Android Studio内配置好爬梯功能
  • 决定选择先试第一种方法,有一点需要注意的是,gradle版本需要和gradle插件版本匹配

    经测试仍然失败,Could not find com.android.tools.build:gradle:3.6.4.
    Searched in the following locations,阿里云中似乎没有任何一个版本的gradle-plugin,之前的推测是错误的。

  • 最终还是转向“在Android Studio内配置好爬梯功能”这条路。

    顺便想了一下,之前实习时没碰到这些问题应该是当时在一家做海外业务的公司,网络环境默认爬梯。

    在Android Studio Setting中设置代理,由于Android Studio外是全局代理,所以直接代理到127.0.0.1。这里有个小坑是设置的代理协议(socks或者HTTP)还有端口,要根据当前使用的爬梯软件的配置来填,切忌抄博客填个1080或者其他的,网上大多数针对Android Studio爬梯配置的博客用的一般是小飞机,本人是v2,socks协议+10808端口。这里端口如果设置错了会出现connect refused报错。

    最后有一点要注意的是,当你开始同步时Android Studio会提醒你是否给gradle也添加代理,这一步如果不仔细读会认为是对之前代理设置的一个确认。对你控制变量排查网络错误造成一定的迷惑,其实这一步是给用户目录下/.gradle目录里的gradle设置了代理。如果你选择了🆗,把Android Studio的代理应用到了gradle上,如果之后要取消代理或者修改端口,要记得也更新此处。

    配置完代理,各种依赖就迅速下载成功了。

一些总结

一开始碰到问题的时候盲目照搬搜索引擎解决方案,没有试图去理解问题,这是一个糟糕的习惯。这种做法的出发点可能是速战速决,毕竟网络问题不是我们能左右的,就不想深挖,但实际上也给解决问题埋了坑,搬了一些并不适用的方法,如此几次,又变得有些浮躁。

最后解决问题还是靠笨办法控制变量,找出症结所在,最后发现是一个很简单的问题。这件事虽然和开发无关,但是和一些人解决开发问题的方向是类似的(在查找博客过程中见到不少案例),所以还是值得反思。

gradle脚本的学习,机制的理解也应该提上日程了。

一些参考

https://blog.csdn.net/fuchaosz/article/details/51567808
https://www.jianshu.com/p/7a16793cefb0
https://www.jianshu.com/p/8529dc82f812
https://blog.csdn.net/wangzhongshun/article/details/104898953
https://blog.csdn.net/liuli905306022/article/details/89927052


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 @tsparrot 创建,使用 Stellar 作为主题。