我們經(jīng)常會(huì)將一些Android開(kāi)源項(xiàng)目導(dǎo)入到Android stuido項(xiàng)目中來(lái)運(yùn)行,gradle構(gòu)建時(shí)就會(huì)出現(xiàn)各種各樣的奇葩問(wèn)題,下面來(lái)說(shuō)說(shuō)我們?cè)陂_(kāi)發(fā)中常遇到的一些問(wèn)題!
1.1. 創(chuàng)建或?qū)腠?xiàng)目后編譯時(shí)一直在等待
問(wèn)題:

原因:AS連網(wǎng)去下載gradle了,但是網(wǎng)絡(luò)不好或不通
解決:禁用網(wǎng)絡(luò),AS就會(huì)立即自動(dòng)終止下載進(jìn)入到主界面了。此時(shí)再去指定離線的gradle版本進(jìn)行編譯;


1.2. Unknow host ‘services.gradle.org’
問(wèn)題:

原因:當(dāng)你導(dǎo)入第三方項(xiàng)目時(shí),別人項(xiàng)目使用的gradle的版本與你的不一樣,這時(shí)as就會(huì)連網(wǎng)去下載gradle版本,但是找不到services.gradle.org服務(wù)器。
解決:不要去下載不同的gradle版本,可以指定gradle為離線工作模式,使用你當(dāng)前已存在的gradle版本就可以了[AndroidStudio在安裝時(shí)就自帶了gradle的版本,見(jiàn)androidstudio安裝目錄下的gradle文件夾]。


1.3. Gradle DSL method not found: 'android()’
問(wèn)題:Error:(16,0) Gradle DSL method not found: 'android()'

原因:當(dāng)你通過(guò)Project Structure修改了編譯的版本或工具時(shí),就可能會(huì)在Project的build.gradle配置文件中添加如下腳本代碼,此時(shí)就會(huì)導(dǎo)致上面報(bào)錯(cuò)了,這是AS本身的bug。

android {
compileSdkVersion 23
buildToolsVersion **"23.0.0"
}
解決方法:應(yīng)當(dāng)把上述的代碼添加到module的build.gradle文件中,而不能添加到Project的build.gradle文件中。
1.4. Project中的build.gradle提示Gradle插件版本報(bào)錯(cuò)
問(wèn)題:

原因:這種情況一般出現(xiàn)在導(dǎo)入其他人的項(xiàng)目,或者更新了android studio之后。原因是android studio是依賴(lài)gradle構(gòu)建的,在構(gòu)建android項(xiàng)目的時(shí)候,會(huì)使用到android gradle插件。但你的project中的build.gralde文件里聲明的gradle插件的版本不存在或者版本過(guò)低,所以導(dǎo)致報(bào)錯(cuò)了。
解決:通過(guò)以下方式查看你的gradle插件的版本,指定為該版本即可。
[或者默認(rèn)創(chuàng)建一個(gè)AndroidStudio項(xiàng)目,看看默認(rèn)的gradle插件版本是什么,修改成那個(gè)版本即可]

1.5. 找不到編譯的android sdk版本
問(wèn)題:

原因:找不到編譯的android sdk版本
解決:你可以按提示打開(kāi) Android sdk Manager去下載相應(yīng)的版本,但最好的解決方式是把編譯的版本修改為你當(dāng)前存在的sdk版本就可以了。
你只需修改module的build.gradle文件中的如下版本:

1.6. Junit導(dǎo)致的出錯(cuò)

解決:因?yàn)闀簺](méi)有用到j(luò)ava單元測(cè)試從app的build.gradle文件中把該行引用刪掉即可
1.7. Hamcrest-core.jar導(dǎo)致出錯(cuò)

解決:這個(gè)是因?yàn)樽钚碌膭?chuàng)建項(xiàng)目會(huì)使用junit庫(kù)來(lái)進(jìn)行代碼測(cè)試,在下載這個(gè)庫(kù)的內(nèi)容的時(shí)候發(fā)現(xiàn)他引用了hamcrest這個(gè)框架,不過(guò)國(guó)內(nèi)下載這個(gè)jar包hamcrest-core.jar不成功,所以會(huì)報(bào)這個(gè)錯(cuò)誤。簡(jiǎn)單的處理方式是把build.gradle里引用的junit刪除掉。
1.8. ANDROID_DAILY_OVERRIDE 問(wèn)題:gradle插件太舊了
Error:(1, 0) Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to "e877086ba74456e68d4c929dc482539df9ffac38"
解決:添加系統(tǒng)環(huán)境變量后重啟Studio
環(huán)境變量:ANDROID_DAILY_OVERRIDE, 值為:41b72d353033bfb5aa4d6a98088a908dcae15ef9
1.9. 項(xiàng)目放在中文路徑下報(bào)錯(cuò)

出錯(cuò)詳情:Error:(9, 0) Your project path contains non-ASCII characters. This will most likely cause the build to fail on Windows. Please move your project to a different directory. See http://b.android.com/95744 for details. This warning can be disabled by using the command line flag -Dcom.android.build.gradle.overridePathCheck=true, or adding the line com.android.build.gradle.overridePathCheck=true' to gradle.properties file in the project directory.
描述:項(xiàng)目不能放到中文路徑下,否則會(huì)可能會(huì)出現(xiàn)如上錯(cuò)誤。
解決:
方法一:路徑不要有中文
方法二:在C:\Users\Administrator.gradle目錄下的gradle.properties(如果該文件不存在則創(chuàng)建)文件中添加如下設(shè)置:com.android.build.gradle.overridePathCheck=true
1.10.SDK23編譯報(bào)httpclient的出錯(cuò)

解決:Android SDK23版本把httpclient從sdk中移除了,如果使用它,需要手動(dòng)添加httclient 的jar包:

1.11.解析引用的第三方依賴(lài)失敗了

解決: 如下下圖,取消offline work前的勾,停用離線工作模式,再構(gòu)建讓AS聯(lián)網(wǎng)去下載依賴(lài)aar即可。
下載完編譯成功后,再改回離線工作的模式。

1.12.AndroidStudio編譯圖片報(bào)錯(cuò)
AndroidStudio對(duì)圖片格式要求比較嚴(yán)格,比如一些點(diǎn)九的圖片,或格式不標(biāo)準(zhǔn)的png圖片,都有可能因?yàn)閳D片格式原因?qū)е翧ndroidStudio編譯報(bào)錯(cuò)

1.13.Multiple Dex file

解決方式:重復(fù)添加jar包了,把重新添加的jar包移除即可。
1.14.創(chuàng)建項(xiàng)目后布局文件預(yù)覽出錯(cuò)WindowDecorActionBar
如下所示:

問(wèn)題:Api 23使用了ToolBar代替actionbar, 主題中找不到actionbar所以出錯(cuò)了。
解決:把sytles.xml中如下默認(rèn)的主題:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
修改成Base.Theme.AppCompat.Light.DarkActionBar
或者:Theme.AppCompat.Light.NoActionBar
1.15.AS導(dǎo)入eclipse項(xiàng)目后運(yùn)行到模擬器顯示亂碼
重新設(shè)置編碼,刪除安裝包后,重新編譯運(yùn)行;

1.16.文件目錄太深了
