2016-05-16 53 views
0

我一直遇到類似於this的問題,特別是當gradle運行dex時java.lang.OutOfMemoryError: GC overhead limit exceeded。該解決方案似乎是把它添加到的build.gradle:如何從命令行設置dex內存限制?

android { 
    dexOptions { 
     javaMaxHeapSize = "4g" // this line specifically 
    } 
} 

現在,假設,至於原因,我不能修改的build.gradle,或在任何項目中的所有文件夾中,例如更改或添加會在下次從存儲庫中取出項目時將被清除。如何通過命令行選項或環境變量或某種可輕鬆實現自動化的此類方法來設置dex的javaMaxHeapSize

我使用-P標誌試過了,是這樣的:gradle -Pandroid.dexOptions.javaMaxHeapSize=3g printProps本的build.gradle:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.0.+' 
    } 
} 

apply plugin: 'android' 

android { 
    compileSdkVersion 15 
    buildToolsVersion "23.0.2" 
    dexOptions { 
     jumboMode = true 
    } 
} 

task printProps { 
    println "android.dexOptions: " + android.dexOptions.getJavaMaxHeapSize() 
} 

不幸的是,它只是打印出android.dexOptions: null(失敗,因爲我還沒有建立完整的Android之前這個小測試項目)。 printProps任務似乎打印正確的方法,因爲當我改變build.gradle設置javaMaxHeapSize時,它打印出正確的值。

+1

克隆現有'build.gradle'到'build-8bittree.gradle'。調整克隆中的'javaMaxHeapSize'。使用'gradle -b build-8bittree.gradle'來建立自定義的'build.gradle'文件。 – CommonsWare

+0

@CommonsWare不錯的建議。不幸的是,它讓我想起了一些我最初忘記提及的東西,特別是我希望能夠輕鬆自動化它。創建一次並將其存儲在項目目錄之外會造成「build-8bittree.gradle」過期的風險。每次設置可靠地重新創建它聽起來像比這更應該是更多的工作。不過,請做出答案,我會加快行動。 – 8bittree

回答

1

第1步:使用您喜歡的腳本環境,複製build.gradlebuild-8bittree.gradle

第2步:使用您喜歡的腳本環境,添加以下到build-8bittree.gradle

android { 
    dexOptions { 
     javaMaxHeapSize = "4g" // this line specifically 
    } 
} 

(你不限到一個android封閉,所以事實上,可能已經有一個android封閉不是一個限制因素)

步驟#3:使用你最喜歡的腳本環境下,使用-b開關使gradle與您的自定義build-8bittree.gradle文件