爲什麼需要寫這個?gradle編譯依賴的倉庫無法順利下載。原因如下:
1. 雖然幹Android不短時間了,但是對gradle和maven不是很熟悉
2. 國內的網絡,訪問Google,jcenter比較困難
解決思路
使用國內的鏡像網站,oschina等國內站點曾經也提供maven鏡像,後來不提供了,原因不明。
現在只有阿里巴巴提供maven鏡像,阿里應該比較靠譜,能撐一段時間:
https://maven.aliyun.com/mvn/view
BTW,使用代理的話,就無需繼續向下看了。不過,代理經常失效。
AndroidStudio的gradle的編譯文件build.gradle
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
1. google和jcenter是AS生成工程時默認添加的兩個網站名稱,gradle編譯時,會默認去google的網站(https://dl.google.com/)和jcenter(http://jcenter.bintray.com/)去下載需要的jar包等資源。
疑問:在配置文件裏面,只看到網站名稱,其網站在哪裏定義的呢?(應該是在android gradle plugin裏面?)
2. google和jcenter的網站,其URL可以自己指定成鏡像網站。比如
google(url 'https://maven.aliyun.com/repository/google')
3. 自己可以添加不同名稱的網站,下面這個是阿里雲提供的gradle-plugin的網站
maven {url 'https://maven.aliyun.com/repository/gradle-plugin/'}
4. 同一個jar包等資源,在第一個網站無法下載,會自動去第二個網站下載嗎?
不會,所以需要把資源比較齊全的網站放到前面去。然後發現下載不了的資源,在手動將有該資源的網站調整到前面去。這樣很不智能,有沒有好的解決辦法呢?TODO
5. 網站爲什麼在buildscript和allprojects裏重複寫兩次?
阿里雲鏡像網站介紹
阿里雲提供的公共代理庫如下:
https://help.aliyun.com/document_detail/102512.html?spm=a2c40.aliyun_maven_repo.0.0.36183054Z08G8x
mavenCentral(阿里雲的名稱叫做central),jcenter,google
和AndroidStudio相關的就主要這3個,其他的一些maven庫和AS不是很相關
鏡像下載失敗時
1. 可以到其網頁瀏覽器中查看指定連接的jar包等資源是否存在,或者使用迅雷等工具直接下載,然後放到本地緩存路徑中
阿里雲的網頁瀏覽路徑:
https://maven.aliyun.com/mvn/view
2. 鏡像網站無需代理即可訪問,確保沒有設置代理。可能設置代理的地方如下:
%HOME%/.gradle/gradle.properties,
project/gradle.properties,
Appearance & Behavior->System settings->HTTP Proxy
gradle的本地緩存路徑:
HOME_PATH/.gradle
.gradle/caches/modules-2/files-2.1/
maven庫介紹
mavenCentral(阿里雲的名稱叫做central),jcenter,google,這些庫都是用來提供Java或者Android library服務。上傳到哪個(或者都上傳)取決於開發者。內容大同小異,服務對象差不多。
參考鏈接:https://blog.csdn.net/u013806583/article/details/85041052
推薦的gradle的maven庫配置如下:
buildscript {
repositories {
jcenter{url 'https://maven.aliyun.com/repository/public'} // 阿里的鏡像庫,包含了mavencentral倉和jcenter倉
google{url 'https://maven.aliyun.com/repository/google'}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter{url 'https://maven.aliyun.com/repository/public'}
google{url 'https://maven.aliyun.com/repository/google'}
}
}
其他的一些maven庫地址
maven { url 'https://plugins.gradle.org/m2/' }
全局配置(一勞永逸)
在操作系統當前用戶的 HOME 目錄,找到 .gradle 文件夾,創建一個文本文件 init.gradle
allprojects{
repositories {
def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public'
def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter'
all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
remove repo
}
if (url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
remove repo
}
}
}
maven {
url ALIYUN_REPOSITORY_URL
url ALIYUN_JCENTER_URL
}
}
}
通過mavenLocal使用本地緩存的資源
TODO
參考:https://blog.csdn.net/qq_23085893/article/details/79633934