gradle 入坑指南(基本原理介紹+錯誤集錦)

ZY_FlyWay發表於2019-01-30

這次我真的是算是掉坑了,必須寫一波來抒發自己對gradle的敬畏之心。
本文主要講解在Android Studio中gradle配置的坑。


 

關於Android Studio 中的 Gradle


描述:Android Studio預設整合Gradle,主要有兩種途徑:自動下載和本地下載選擇。
 

1.用gradle wrapper 中的版本配置,去下載安裝gradle 。

詳情步驟:

  • 檢視gradle-weapper properties 檔案裡指定gradle下載地址。
     
    例子指定了下載gradle4.1版本:
    distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
    如下圖:在這裡插入圖片描述

  • 檢視gradle外掛和gradle版本關係是否對應,不對應會報錯。
     
    如上圖:我們下載的是4.1版的gradle,我們可以用3.0.0+。對應關係表傳送門(需要翻牆)

    在這裡插入圖片描述
    關係對照表(更新至2019.1.30日)
    在這裡插入圖片描述

2.本地下載,然後Android Studio選擇對應版本。

步驟詳情:

preference -> Gradle->Use local gradle distribution

Gradle home 填寫Gradle本地下載地址。

在這裡插入圖片描述

同樣需要指定gradle外掛版本與本地選擇版本對應。

 
 

Gradle相關配置


這幾天採坑,搜帖子發現很多部落格都是為了解決問題而解決問題,有些選項不瞭解什麼意思就敢點(我也點了)。不瞭解原理和報錯原因,就開始動手會把問題複雜化。

下面是gradle一些配置說明:
 

1.Offline work工作模式

配置描述:

離線模式工作,看這個名字已經明白了一二。
離線工作模式會從快取中獲取依賴庫,而不去網路下載。如果快取中沒有依賴,開啟這個模式一定會失敗。

The --offline command line switch tells Gradle to always use dependency modules from the cache, regardless if they are due to be checked again. When running with offline, Gradle will never attempt to access the network to perform dependency resolution. If required modules are not present in the dependency cache, build execution will fail.

 

2.Enable embedded Maven repository

配置描述:

允許加入maven倉庫,我是Mac版Android Studio預設不是勾選的。
在這裡插入圖片描述

 

3.設定HTTP代理

在這裡插入圖片描述
設定完後置gradle.properties檔案會出現設定內容,如果不用記得清除。(下面截圖不是上個圖配置地址,只是想說下位置在這裡插入圖片描述
 
 

錯誤集錦(終於可以吐槽了)


 

錯誤1:Unknown host ‘d29vzk4ow07wi7.cloudfront.net’. You may need to adjust the proxy settings in Gradle.

詳情描述:
在這裡插入圖片描述

分析和解決:

這裡提示你開啟離線模式和去設定HTTP代理。

我剛建的專案,讓我開啟離線模式去工作,這不是扯淡嗎?快取現在什麼都沒有。(如果你開啟離線模式,然後重新同步,它就會提醒你立馬關上。)

然後是設定HTTP代理(步驟介紹上文),設定過之後也可以翻牆。你發現並沒有卵用。

原因:
Mac版Android Studio預設不是勾選Enable embedded Maven repository,然後gradle無法下載在maven倉庫的依賴。

解決:如上文

 

錯誤2:gradle下載不了第三方庫、 Could not download 、 Connet refused

 

分析和解決:

原因:被牆了,gradle無法下載依賴庫

解決:要麼翻牆,要麼採用國內映象。推薦採用阿里映象很快。

allprojects {  
    repositories {  
         maven {  
             name "aliyunmaven"  
             url "http://maven.aliyun.com/nexus/content/groups/public/"  
         }  
    }  
}  

 

錯誤3:org.gradle.api.resources.ResourceException: Could not get resource

解決:如上文

 

錯誤4:ERROR: The SourceSet ‘instrumentTest’ is not recognized by the Android Gradle Plugin. Perhaps you misspelled something?

專案中 gradle 配置

 sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }

原因:

是這裡出問題了 instrumentTest.setRoot(‘tests’) ,你可能在升級 Android Studio 時更新了專案的 gradle 配置,這裡的配置中 instrumentTest 已被棄用,不適用於現在的 gradle 版本。

解決辦法:
用 androidTest 替換 instrumentTest,編譯執行即可。

待續 …(希望不續)

相關文章