Android构建工具26.0.2内存不足(lint)

3

你好,我们有一个包含30个产品风味的项目,我尝试使用Jenkins进行构建。由于我们升级(用于Android Studio3)到以下版本:

  • Gradle 3.0.0
  • Build Tools 26.0.2

在Lint中出现了内存溢出异常:

   :app:lintUnexpected failure during lint analysis of null (this is a bug in lint or one of the libraries it depends on)
    `OutOfMemoryError:ByteStreams.toByteArray(ByteStreams.java:176)
Files.readFile(Files.java:182)←Files$FileByteSource.read(Files.java:153)
Files.toByteArray(Files.java:252)←LintClient.readBytes(LintClient.kt:249)
ClassEntry.addEntries(ClassEntry.java:216)
ClassEntry.fromClassPath(ClassEntry.java:120)
LintClient.createSuperClassMap(LintClient.kt:997)`

    You can set environment variable `LINT_PRINT_STACKTRACE=true` to dump a full stacktrace to stdout. java.lang.OutOfMemoryError: Java heap space  at 
    com.google.common.io.ByteStreams.toByteArray(ByteStreams.java:176)  at 
    com.google.common.io.Files.readFile(Files.java:182)     at 
    com.google.common.io.Files$FileByteSource.read(Files.java:153)  at 
    com.google.common.io.Files.toByteArray(Files.java:252)  at 
    com.android.tools.lint.client.api.LintClient.readBytes(LintClient.kt:249)

我已经增加了Gradle内存(gradle.properties org.gradle.jvmargs=-Xmx3098M),但仍然未能成功。

所有productFlavors都具有相同的Java代码。结果apk具有不同的图像、包名、语言和配置。

构建运行25个productFlavors,直到我们耗尽内存。使用ps命令,我可以看到Gradle Daemon客户端进程的JVM选项,例如: java -Djava.awt.headless=true -Xmx64M com.google.devtools.build.android.desugar.Desugar 我不知道如何设置这些子进程(Android工具)的JVM选项。

也许这是Gradle守护程序中的所有内存泄漏。在我的前20个productFlavors的构建中,头部约为2G,然后增加到3G,而Gradle守护程序jvm一直在进行GC...

有任何想法或建议吗?

问候

1个回答

2
我曾经和你处于同样的情况。在将Android Gradle(升级到3.0.0)和构建工具(升级到26.0.2)之后,我在Jenkins上的Ubuntu从机上进行Gradle构建时遇到了内存不足错误(但是在任务transformClassesWithDexBuilderForRelease期间)。同时,我将Gradle版本从3.5升级到了4.3.0。由于我的代码没有改变,我认为这些更新中有一个可能会导致内存泄漏的问题。
以下是解决方案:
export _JAVA_OPTIONS="-Xms2048m -XX:-UseGCOverheadLimit -XX:+UseConcMarkSweepGC" 
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"

(参考:https://dev59.com/62Ml5IYBdhLWcg3wDzVG#18900271https://dev59.com/AFsW5IYBdhLWcg3wdnJh#35964827

编辑

经过几次构建,即使我将内存增加到14GB,我仍然遇到了相同的错误 :) 但是我通过在gradle.properties文件中添加一行来解决了这个问题:

org.gradle.jvmargs=-Xmx4096m

我还增加了JAVA虚拟机内存,现在我能够再次构建我的应用程序。我的观察是每个产品风格加载的类都有所增加。我还在google上创建了一个问题 https://issuetracker.google.com/issues/68364312 - Gugelhupf
@Gugelhupf 是的,你说得对。即使增加了JVM的内存(我也看到过:),在几次构建后仍然会出现相同的错误。但是如果您将此块(org.gradle.jvmargs=-Xmx4096m)添加到gradle.properties中,则一切都将像更新之前一样工作。您还可以删除_JAVA_OPTIONS和JACK_SERVER_VM_ARGUMENTS等属性。 - Sercan özen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接