AndroidStudio gradle的maven倉庫下載

爲什麼需要寫這個?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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章