gpt4 book ai didi

android - 运行 lint[Flavor][Variant] 和只运行 lint 有什么区别?

转载 作者:行者123 更新时间:2023-11-29 02:33:43 27 4
gpt4 key购买 nike

我有一个带有 gradle 的 Android 项目。虽然 gradle 插件是 2.x.x,但运行 ./gradlew lint 的时间大约为 4 分钟。我已经将项目升级到 gradle plugin 3.0.1,现在时间大约是 24 分钟。我有四种口味和两种变体(调试和发布)。有趣的是,当我尝试运行 ./gradlew lint[Flavor][Variant] 时,8 种组合中的每一种都需要大约 30 秒。

为什么为每种风格和变体单独运行 lint 需要合理的时间,而为所有风格和变体运行一个命令需要 20 多分钟?有什么不同?为什么 lint 使用 gradle 插件 2.x.x 并在升级后变得迟钝?

我尝试使用 --debug 标志运行。 lint 做了一些工作,然后它决定休息很长时间,然后再做一些工作。它几乎在整个构建时间都是空闲的。

我试着用谷歌搜索类似“(gradle) lint stuck|slow”的东西,似乎人们有时会遇到缓慢的 gradle 构建,这可以通过启用离线模式、并行构建、运行守护进程来解决。但这里不是这种情况。

对于 flavor 和变体的每种组合,两种情况下发现的问题数量相同

java.lang.OutOfMemoryError: Java heap space
at com.google.common.io.ByteStreams.createBuffer(ByteStreams.java:56)
at com.google.common.io.ByteStreams.copy(ByteStreams.java:103)
at com.google.common.io.ByteStreams.toByteArray(ByteStreams.java:166)
at com.android.tools.lint.client.api.ClassEntry.addEntries(ClassEntry.java:195)
at com.android.tools.lint.client.api.ClassEntry.fromClassPath(ClassEntry.java:120)
at com.android.tools.lint.client.api.LintClient.createSuperClassMap(LintClient.kt:1001)
at com.android.tools.lint.detector.api.Project.getSuperClassMap(Project.java:1471)
at com.android.tools.lint.client.api.LintClient.getSuperClass(LintClient.kt:968)
at com.android.tools.lint.client.api.LintDriver$LintClientWrapper.getSuperClass(LintDriver.kt:2186)
at com.android.tools.lint.client.api.LintDriver.getSuperClass(LintDriver.kt:1141)
at com.android.tools.lint.checks.InvalidPackageDetector.checkClass(InvalidPackageDetector.java:173)
at com.android.tools.lint.client.api.AsmVisitor.runClassDetectors(AsmVisitor.java:151)
at com.android.tools.lint.client.api.LintDriver.runClassDetectors(LintDriver.kt:1325)
at com.android.tools.lint.client.api.LintDriver.checkClasses(LintDriver.kt:1210)
at com.android.tools.lint.client.api.LintDriver.runFileDetectors(LintDriver.kt:1037)
at com.android.tools.lint.client.api.LintDriver.checkProject(LintDriver.kt:882)
at com.android.tools.lint.client.api.LintDriver.analyze(LintDriver.kt:385)
at com.android.tools.lint.LintCliClient.run(LintCliClient.java:155)
at com.android.build.gradle.internal.LintGradleClient.run(LintGradleClient.java:197)
at com.android.build.gradle.tasks.LintBaseTask.runLint(LintBaseTask.java:198)
at com.android.build.gradle.tasks.LintGlobalTask.lintAllVariants(LintGlobalTask.java:91)
at com.android.build.gradle.tasks.LintGlobalTask.lint(LintGlobalTask.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.doExecute(DefaultTaskClassInfoStore.java:141)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:731)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:705)

这是在 ./gradlew lint 完成之前打印的内容。可能它会进行一些递归 20 分钟,当它用完内存时会给出结果,几分钟后我也会看到一些闪烁,就像结果已经准备好,但任务又继续了 20 分钟,异常终止了它。

最佳答案

您可以使用dry-run 看看有什么不同,只需将-m 作为您的gradle 命令的参数

./gradlew lint[Flavor][Variant] -m

./gradlew lint -m

现在您可以比较这两个命令的结果,您可以了解所有 gradle 任务正在执行什么。

此外,为了识别哪个任务花费了最多的时间,您可以使用--profile

./gradlew lint[Flavor][Variant] --profile

./gradlew lint --profile

关于android - 运行 lint[Flavor][Variant] 和只运行 lint 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48210210/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com