所以我正在尝试将我在一个简单玩具应用程序中的 build.gradle 文件从 Groovy 迁移到新的 Kotlin dsl for Gradle。我已经能够成功迁移我的项目 build.gradle 文件,并且我还创建了一个 buildSrc 目录,其中包含 Kotlin 文件中的所有版本号等。到目前为止,gradle 正在成功同步和构建。但是当我尝试将我的应用程序 build.gradle 转换为 Kotlin(通过更改文件扩展名并更改所有函数调用和映射等以遵循 Kotlin 语法)时,我的 gradle 同步出现错误,上面写着:
org.gradle.internal.exceptions.LocationAwareException: A problem occurred configuring project ':app'.
Caused by: org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':app'.
Caused by: org.gradle.cache.CacheOpenException: Could not open cache directory er2fj44y4paf4xwhwuc5jhit0 (C:\Users\Youssef Shoaib\.gradle\caches\5.6.4\gradle-kotlin-dsl-accessors\er2fj44y4paf4xwhwuc5jhit0).
Caused by: java.util.zip.ZipException: zip file is empty
我已经尝试重建和清理构建,但它仍然无法正常工作。当我将应用程序 build.gradle 改回 groovy 时,错误消失了,一切正常,但我真的想将 Kotlin DSL 用于 Gradle。我也尝试过更改我的 Kotlin 版本和 Gradle 版本,但仍然无法正常工作。
作为引用,这是我的 buildSrc build.gradle.kts
plugins {
`kotlin-dsl`
}
repositories {
jcenter()
}
以及 buildSrc 模块中的 Dependencies.kt:
object Versions {
const val version_core = "1.1.0"
const val version_coroutine = "1.1.1"
const val version_constraint_layout = "1.1.3"
const val version_gradle = "3.5.3"
const val version_kotlin = "1.3.61"
const val version_lifecycle_extensions = "2.1.0"
const val version_navigation = "2.1.0"
const val version_room = "2.2.2"
}
和我的项目 build.gradle.kts 文件:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:${Versions.version_gradle}")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.version_kotlin}")
classpath("androidx.navigation:navigation-safe-args-gradle-plugin:${Versions.version_navigation}")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
tasks.register<Delete>("clean") {
delete(rootProject.buildDir)
}
我的应用程序 build.gradle.kts 文件:
plugins{
id("com.android.application")
kotlin("android")
kotlin("android.extensions")
kotlin("kapt")
id("androidx.navigation.safeargs.kotlin")
}
android {
compileOptions {
sourceCompatibility( JavaVersion.VERSION_1_8)
targetCompatibility( JavaVersion.VERSION_1_8)
}
kotlinOptions {
jvmTarget("1.8")
}
compileSdkVersion(29)
defaultConfig {
applicationId = "com.example.android.trackmysleepquality"
minSdkVersion(19)
targetSdkVersion(29)
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
javaCompileOptions {
annotationProcessorOptions {
arguments = mapOf("room.incremental" to "true")
}
}
}
buildTypes {
getByName("release") {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
}
}
// Enables data binding.
dataBinding {
enabled = true
}
}
dependencies {
implementation(fileTree(mapOf("dir" to "libs"), "include:" to listOf("*.jar")))
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:${Versions.version_kotlin}")
// Support libraries
implementation("androidx.constraintlayout:constraintlayout:${Versions.version_constraint_layout}")
// Android KTX
implementation("androidx.core:core-ktx:${Versions.version_core}")
// Room and Lifecycle dependencies
implementation("androidx.room:room-runtime:${Versions.version_room}")
implementation("androidx.room:room-ktx:${Versions.version_room}")
kapt("androidx.room:room-compiler:${Versions.version_room}")
implementation("androidx.lifecycle:lifecycle-extensions:${Versions.version_lifecycle_extensions}")
implementation("com.github.hadilq.liveevent:liveevent:1.0.1")
// Coroutines
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:${Versions.version_coroutine}")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.version_coroutine}")
// Navigation
implementation("androidx.navigation:navigation-fragment-ktx:${Versions.version_navigation}")
implementation("androidx.navigation:navigation-ui-ktx:${Versions.version_navigation}")
// Testing
testImplementation("junit:junit:4.12")
androidTestImplementation("androidx.test.ext:junit:1.1.1")
androidTestImplementation("androidx.arch.core:core-testing:2.1.0")
androidTestImplementation("androidx.test.espresso:espresso-core:3.2.0")
androidTestImplementation("org.mockito:mockito-core:3.1.0")
}
最佳答案
我终于找到了解决方案。我刚刚删除了我的用户文件夹中的整个 .gradle 目录,我认为这会使 Android Studio 可能为 Kotlin dsl 的访问器所做的所有缓存无效。所以,最后,它确实有效
关于android - 尝试将 Android Gradle 项目从 Groovy 迁移到 Kotlin 时出现 CacheOpenException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59229721/