Android 开发环境与 Gradle 镜像配置

太阳作者太阳
原创内容采用 CC-4.0 协议发布,转载请注明出处

我以前做 Android 开发时,最麻烦的不是写代码,而是 Gradle 下载依赖。Google Maven、Maven Central 和 Gradle Plugin Portal 只要有一个连不上,Android Studio 就会一直转圈。

这篇只留我实际用过的 Android SDK 路径、Gradle 代理和阿里云镜像配置。

Android SDK 路径

我在 Windows 上把 Android 相关文件集中放在一个目录,避免系统盘越来越乱:

GRADLE_USER_HOME=D:\android\.gradle
ANDROID_HOME=D:\android\sdk

然后把常用命令目录加进 PATH

%ANDROID_HOME%\platform-tools
%ANDROID_HOME%\cmdline-tools\latest\bin

platform-tools 里有 adbcmdline-tools\latest\bin 里有 sdkmanager。配置后我会重新打开终端确认:

adb --version
sdkmanager --version

Gradle 代理

本机已经有代理时,我在用户级的 ~/.gradle/gradle.properties 里配置,Android Studio 和命令行 Gradle 都能读到:

systemProp.http.proxyHost=<PROXY_HOST>
systemProp.http.proxyPort=<PROXY_PORT>
systemProp.https.proxyHost=<PROXY_HOST>
systemProp.https.proxyPort=<PROXY_PORT>
systemProp.http.nonProxyHosts=localhost|127.*

HTTPS 代理也共用 http.nonProxyHosts,这个名字看起来有点怪,但不是写错了。

代理需要账号时再补下面几项,我不会把真实密码提交到项目里:

systemProp.http.proxyUser=<PROXY_USER>
systemProp.http.proxyPassword=<PROXY_PASSWORD>
systemProp.https.proxyUser=<PROXY_USER>
systemProp.https.proxyPassword=<PROXY_PASSWORD>

用全局 init.gradle 切换阿里云镜像

以前网络不稳定时,我会用 ~/.gradle/init.gradle 把常用仓库换成阿里云镜像。这个文件影响本机所有 Gradle 项目,所以我只在确实需要时启用:

// ~/.gradle/init.gradle
allprojects {
    repositories {
        def ALIYUN_PUBLIC_URL = 'https://maven.aliyun.com/repository/public/'
        def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google/'
        def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin/'

        all { ArtifactRepository repo ->
            if (repo instanceof MavenArtifactRepository) {
                def url = repo.url.toString()
                if (url.startsWith('https://repo1.maven.org/maven2/') ||
                    url.startsWith('https://repo.maven.apache.org/maven2/')) {
                    remove repo
                }
                if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
                    remove repo
                }
                if (url.startsWith('https://plugins.gradle.org/m2/')) {
                    remove repo
                }
            }
        }

        maven { url ALIYUN_PUBLIC_URL }
        maven { url ALIYUN_GOOGLE_URL }
        maven { url ALIYUN_GRADLE_PLUGIN_URL }
    }
}

我排查构建下载问题的顺序

  1. 先看 Android SDK、adbsdkmanager 的路径有没有指向同一套目录。
  2. 再看 ~/.gradle/gradle.properties 里是否还留着失效代理。
  3. 然后检查项目仓库与全局 init.gradle 有没有互相覆盖。
  4. 镜像缺包或同步不及时,就临时停用全局脚本,回到项目原本的仓库配置。

全局镜像虽然省事,但也最容易让所有项目一起出问题。我现在更愿意把它当成网络不好时的临时方案,不把它当成每台机器都必须复制的默认配置。

参考资料