【发布时间】:2016-05-16 17:34:11
【问题描述】:
我一直遇到类似于this 的问题,具体来说,当gradle 运行dex 时出现java.lang.OutOfMemoryError: GC overhead limit exceeded。解决方案似乎是将其添加到 build.gradle:
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 时,它打印出正确的值。
【问题讨论】:
-
将现有的
build.gradle克隆到build-8bittree.gradle。在克隆中调整javaMaxHeapSize。使用gradle -b build-8bittree.gradle构建您的自定义build.gradle文件。 -
@CommonsWare 不错的建议。不幸的是,它让我想起了我最初忘记提及的事情,特别是我希望能够轻松地自动化它。创建一次并将其存储在项目目录之外会冒
build-8bittree.gradle过时的风险。每次进行设置以可靠地重新创建它听起来比这一切都应该做更多的工作。不过,把它作为一个答案,我会投赞成票。
标签: android gradle android-gradle-plugin