由于 `kapt`,Android 支持库 Bump 27.1.0 无法编译

标签 android gradle android-support-library kapt

我正在尝试将我的 Android 应用程序的支持库依赖项从 27.0.2 升级到 27.1.0。 这样做并尝试组装应用程序时,编译失败。

对于 kotlin 数据绑定(bind),我正在使用:kapt "com.android.databinding:compiler:3.0.1"

对于 kotlin,我正在使用:implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.30"

这是尝试编译时产生的堆栈跟踪

> org.gradle.api.tasks.TaskExecutionException: Execution failed for task
> ':app:kaptDebugKotlin'.Open stacktrace Caused by:
> org.gradle.api.GradleException: Compilation error. See log for more
> detailsClose stacktrace at
> org.jetbrains.kotlin.gradle.tasks.TasksUtilsKt.throwGradleExceptionIfError(tasksUtils.kt:8)
> at
> org.jetbrains.kotlin.gradle.internal.KaptTask.compile(KaptTask.kt:124)
> at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
> at
> org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
> at
> org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
> at
> org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
> at
> org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:788)
> at
> org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:755)
> at
> org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:124)
> at
> org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
> at
> org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
> at
> org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
> at
> org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
> at
> org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:113)
> at
> org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:95)
> at
> org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:73)
> at
> org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
> at
> org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
> at
> org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
> at
> org.gradle.api.internal.tasks.execution.ResolveBuildCacheKeyExecuter.execute(ResolveBuildCacheKeyExecuter.java:66)
> at
> org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
> at
> org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
> at
> org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
> at
> org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
> at
> org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
> at
> org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
> at
> org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
> at
> org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
> at
> org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
> at
> org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:256)
> at
> org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
> at
> org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
> at
> org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
> at
> org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
> at
> org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:249)
> at
> org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:238)
> at
> org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)
> at
> org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
> at
> org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
> at
> org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
> at
> org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:663)
> at
> org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:597)
> at
> org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
> at
> org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
> at
> org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
> at
> org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)

我认为问题出在 kotlin 上,考虑到在 KaptTask.kt:124 中捕获了编译异常。但是我无法确定我的应用程序需要更改哪些内容才能成功编译。

非常感谢任何帮助!提前致谢。

最佳答案

所以编译错误是由于支持库的更改(在这种情况下围绕着对 kotlin 中的 @IntDef 的更改,不再需要传入 Long,而是需要 Int)。

我最初没能找到这个编译错误,因为它隐藏在 Android Studio 抛出的 100 多个数据绑定(bind)错误中。 (我在我的应用程序中大量使用数据绑定(bind))

为了解决这个问题,我增加了 gradle 日志中显示的最大错误数,方法是将其添加到我的应用程序的 gradle 文件中:

// Works for both java and kotlin
kapt {
    javacOptions {
        // Increase the max count of errors from annotation processors.
        // Default is 100.
        option("-Xmaxerrs", 1000)
    }
}

这会增加 kotlin 和 java 的最大错误数,而我见过的另一个实现不会。此处显示:

// Only works for java
allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xmaxerrs" << "1000"
        }
    }
} 

这只会增加 java 的最大错误计数,不会增加 kotlin。仅供引用。

无论如何,随着错误计数的增加,我能够在底部找到非常有用的编译错误,这实际上是问题所在。这些很容易修复。

关于由于 `kapt`,Android 支持库 Bump 27.1.0 无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49184111/

相关文章:

android - 更改 API 19 及以下版本的 RadioButton 颜色?

android - 为什么 EmojiCompat 只能在 Android 19+ 上使用?

java - NumberPicker 的格式化值在单击时消失

Android模拟器有时无法连接到互联网

android - 在运行时查找是否已使用应用程序编译了库

gradle:排除所有 - 除了一个文件

java - 无法在数据库android中插入

android - 如何在 Android 中存储 JPG 文件以备后用?

java - 在构建时有选择地在 Android 项目中包含模块的单行代码?

android - Android SDK 版本 26.+ 无法添加 Facebook-login 依赖项 4.27.0