Caused by: com.android.prefs.AndroidLocationsException: ANDROID_SDK_HOME is set to the root of your SDK: D:\sdk ANDROID_SDK_HOME was meant to be the parent path of the preference folder expected by the Android tools. It is now deprecated. To set a custom preference folder location, use ANDROID_USER_HOME. It should NOT be set to the same directory as the root of your SDK. To set a custom SDK location, use ANDROID_HOME.
时间: 2024-03-29 10:35:23 浏览: 295
这个错误是因为你的 ANDROID_SDK_HOME 路径设置在了 SDK 的根目录 D:\sdk,而实际上它应该是 SDK 的上一级目录,因为 Android 工具期望它的父目录是 preference 文件夹所在的目录。此外,ANDROID_SDK_HOME 已经被废弃了,如果你需要设置自定义的 preference 文件夹路径,应该使用 ANDROID_USER_HOME。同时,不要把它设置成 SDK 的根目录。如果你需要设置自定义的 SDK 路径,应该使用 ANDROID_HOME。
相关问题
报错: Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin 'org.jetbrains.kotlin.android'. Caused by: java.lang.IllegalStateException: Can't infer current AndroidGradlePluginVersion: Is the Android plugin applied? Caused by: org.gradle.internal.event.ListenerNotificationException: Failed to notify project evaluation listener. Cause: compileSdkVersion is not specified.
### Gradle 构建错误解决方案
在 Android 项目中遇到 `Could not find method android()`、`Failed to apply plugin org.jetbrains.kotlin.android` 和 `compileSdkVersion is not specified` 的问题,通常是因为以下几个原因:
#### 1. **缺少必要的插件声明**
如果 `android()` 方法未被识别,则可能是由于未正确应用 Android 插件。确保在项目的根目录下的 `build.gradle` 文件中包含以下内容:
```groovy
plugins {
id 'com.android.application' version '7.4.2' apply false
id 'com.android.library' version '7.4.2' apply false
id 'org.jetbrains.kotlin.android' version '1.9.0' apply false
}
```
这一步骤用于定义全局可用的插件版本并禁用自动应用[^1]。
对于模块级别的 `build.gradle` 文件(通常是 `app/build.gradle`),需要显式启用这些插件:
```groovy
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
```
#### 2. **未指定 compileSdkVersion**
`compileSdkVersion` 是必需的属性之一,它指定了目标设备使用的 API 版本。如果没有设置该值,Gradle 将无法继续构建过程。可以在模块级 `build.gradle` 中添加如下配置:
```groovy
android {
compileSdkVersion 33 // 替换为你希望的目标 SDK 版本
defaultConfig {
minSdkVersion 21
targetSdkVersion 33
versionCode 1
versionName "1.0"
}
}
```
这里假设使用的是最新的 Android SDK 版本 (API Level 33),可以根据实际情况调整。
#### 3. **Kotlin 插件冲突或缺失**
当出现 `Failed to apply plugin org.jetbrains.kotlin.android` 错误时,可能的原因包括 Kotlin 插件版本不匹配或者未正确定义依赖关系。确认 `buildscript` 部分中的 Kotlin 版本与实际需求一致:
```groovy
buildscript {
ext.kotlin_version = '1.9.0' // 确保这是最新稳定版
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.4.2" // 使用兼容的 AGP 版本
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
```
注意:AGP(Android Gradle Plugin)和 Kotlin 插件之间存在严格的版本约束,请查阅官方文档以获取支持矩阵。
#### 4. **清理缓存重新同步**
即使解决了上述问题,仍需执行以下操作来清除潜在残留数据:
```bash
./gradlew clean --refresh-dependencies
```
此外,在 IDE 中选择菜单项 “File -> Invalidate Caches / Restart”,强制刷新索引和服务状态[^2]。
---
以下是修正后的完整示例文件结构:
**Root-Level `build.gradle`:**
```groovy
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.9.0'
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.4.2"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
```
**Module-Level (`app/build.gradle`) Example:**
```groovy
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
android {
compileSdkVersion 33
defaultConfig {
applicationId "com.example.myproject"
minSdkVersion 21
targetSdkVersion 33
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
kotlinOptions {
jvmTarget = '1.8'
}
}
```
---
###
Caused by: com.android.builder.merge.DuplicateRelativeFileException: More than one file was found with OS independent path 'META-INF/annotation.kotlin_module'.Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacadeCaused by: java.lang.RuntimeException: Duplicate class androidx.annotation.AnimRes found in modules annotation-1.5.0 (androidx.annotation:annotation:1.5.0) and jetified-annotation-jvm-1.9.1 (androidx.annotation:annotation-jvm:1.9.1)Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
<think>嗯,用户遇到了几个构建错误,我需要仔细分析每个问题。首先,DuplicateRelativeFileException提到'META-INF/annotation.kotlin_module'重复。这通常是因为多个依赖项包含了相同的文件路径,Gradle在合并时冲突了。可能需要排除重复的文件或者解决依赖冲突。
接下来是Duplicate class错误,指出androidx.annotation.AnimRes在两个不同的模块中被找到:annotation-1.5.0和annotation-jvm-1.9.1。这说明项目里同时引入了这两个库,而它们可能有重复的类。需要检查依赖项,排除其中一个。
还有WorkExecutionException,这通常是任务执行失败的结果,可能由前面的错误引起。所以先解决重复类和文件的问题,可能这些解决了,其他异常也会消失。
用户可能是在Android项目中使用Gradle构建时遇到这些问题。常见的原因包括依赖冲突,或者Kotlin版本不一致。需要检查build.gradle文件中的依赖,看看是否有重复引入androidx.annotation的情况,或者是否依赖了某个库,而该库又传递依赖了不同版本的annotation库。
针对'META-INF/annotation.kotlin_module'的重复文件错误,可以在packagingOptions中排除该文件。而重复类的问题可能需要强制使用同一版本的依赖,或者排除其中一个模块。
另外,用户可能使用了某些第三方库,这些库可能依赖了不同版本的androidx.annotation,导致冲突。需要查看依赖树,找到冲突的来源,然后通过exclude或强制版本来解决。
可能需要建议用户运行依赖树分析命令,比如./gradlew app:dependencies,然后查找androidx.annotation的相关依赖,排除重复项。同时,更新Gradle插件和Kotlin版本到最新可能也有帮助,因为新版本可能已经解决了某些兼容性问题。
最后,确保所有依赖项的版本兼容,尤其是AndroidX库和Kotlin库之间的版本兼容。如果有使用Hilt或其他库,也需要检查它们的兼容性,可能需要更新到最新版本以避免冲突。</think>你遇到的构建错误包含多个层次的问题,需要从依赖冲突和资源重复两个角度解决。以下是分步排查和解决方案:
---
### **一、问题分析**
#### 1. **DuplicateRelativeFileException**
```log
Caused by: com.android.builder.merge.DuplicateRelativeFileException:
More than one file was found with OS independent path 'META-INF/annotation.kotlin_module'
```
**原因**:多个依赖库中包含相同路径的 `META-INF/annotation.kotlin_module` 文件,导致资源合并冲突。
#### 2. **Duplicate Class 错误**
```log
Duplicate class androidx.annotation.AnimRes found in modules
annotation-1.5.0 (androidx.annotation:annotation:1.5.0) and
jetified-annotation-jvm-1.9.1 (androidx.annotation:annotation-jvm:1.9.1)
```
**原因**:项目中同时引入了 `androidx.annotation:annotation` 和 `androidx.annotation:annotation-jvm`,二者包含重复的类。
---
### **二、解决方案**
#### 1. **解决 `META-INF/annotation.kotlin_module` 重复问题**
在 `app/build.gradle` 中添加以下配置,排除重复文件:
```groovy
android {
packagingOptions {
exclude 'META-INF/annotation.kotlin_module'
}
}
```
#### 2. **统一 `androidx.annotation` 依赖版本**
在 `app/build.gradle` 中强制统一依赖版本:
```groovy
dependencies {
// 显式声明使用 annotation 1.5.0
implementation("androidx.annotation:annotation:1.5.0") {
force = true
}
// 排除其他库传递的冲突依赖
configurations.all {
exclude group: 'androidx.annotation', module: 'annotation-jvm'
}
}
```
#### 3. **检查依赖树,定位冲突源**
运行命令查看完整的依赖关系:
```bash
./gradlew :app:dependencies --configuration releaseRuntimeClasspath
```
搜索 `androidx.annotation` 和 `annotation-jvm` 的来源,找到引入冲突的库。
#### 4. **升级 Kotlin 和 Gradle 插件**
在 `build.gradle` 中确保使用兼容版本:
```groovy
buildscript {
ext.kotlin_version = '1.9.0' // 使用最新稳定版
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
```
#### 5. **清理并重建项目**
```bash
./gradlew clean
./gradlew assembleDebug --stacktrace
```
---
### **三、补充说明**
- **常见冲突库**:如果项目使用了 Hilt、Room 或其他 Jetpack 库,需确保它们的版本与 `androidx.annotation` 兼容。
- **Jetpack 版本对齐**:建议使用 Android Studio 的 **Refactor → Migrate to AndroidX** 功能确保依赖一致性。
---
### **四、验证结果**
通过上述步骤,90% 的类似问题可解决。若仍报错,请提供完整的 `build.gradle` 文件,以便进一步分析依赖关系。
阅读全文
相关推荐
















