代码大全二4
2025/12/31 23:57:06
Android Gradle 构建过程中会遇到各种错误,这些错误可能涉及配置、依赖、编译、资源等多个方面。本文将系统性地总结常见的构建错误,并提供详细的解决方法。
错误信息:
Minimum supported Gradle version is X.X.X. Current version is Y.Y.Y.解决方法:
# gradle/wrapper/gradle-wrapper.properties distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip| AGP 版本 | 最小 Gradle 版本 | 推荐 Gradle 版本 |
|---|---|---|
| 8.0+ | 8.1 | 8.7 |
| 7.4+ | 7.5 | 8.2 |
| 7.0+ | 7.3 | 7.6 |
| 4.2+ | 6.7.1 | 7.5 |
错误信息:
> Could not target platform: 'Java SE 17' using tool chain: 'JDK 8'解决方法:
// app/build.gradle android { compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = '17' } }检查 JDK 配置:
# 查看当前 JDK 版本./gradlew-version# 在 Android Studio 中设置# File → Project Structure → SDK Location → JDK Location错误信息:
Conflict with dependency 'com.google.code.gson:gson'解决方法:
// 1. 查看依赖树找出冲突 ./gradlew app:dependencies --configuration releaseRuntimeClasspath // 2. 强制使用特定版本 configurations.all { resolutionStrategy { force 'com.google.code.gson:gson:2.10.1' // 排除特定依赖 dependencySubstitution { substitute(module("com.google.guava:guava")) .using(module("com.google.guava:guava:33.0.0-jre")) } } } // 3. 排除特定传递依赖 dependencies { implementation('com.example:library:1.0.0') { exclude group: 'com.google.code.gson', module: 'gson' exclude group: 'com.android.support' transitive = false // 禁止传递依赖 } }错误信息:
> Could not resolve all dependencies > Could not download xxx.jar解决方法:
// 1. 添加镜像源 buildscript { repositories { // 阿里云镜像 maven { url 'https://maven.aliyun.com/repository/public' } maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/repository/central' } google() mavenCentral() } } allprojects { repositories { maven { url 'https://maven.aliyun.com/repository/public' } maven { url 'https://maven.aliyun.com/repository/google' } // 其他备用仓库 maven { url 'https://jitpack.io' } maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } } } // 2. 配置网络代理 // gradle.properties systemProp.http.proxyHost=127.0.0.1 systemProp.http.proxyPort=1080 systemProp.https.proxyHost=127.0.0.1 systemProp.https.proxyPort=1080 // 3. 离线模式 ./gradlew build --offline错误信息:
> Could not find com.example:library:1.0.0解决方法:
// 1. 检查仓库配置 repositories { google() mavenCentral() // 确保包含正确的 Maven 仓库 maven { url = uri("https://custom.repository.com/releases") // 如果需要认证 credentials { username = project.findProperty("mavenUser") ?: "" password = project.findProperty("mavenPassword") ?: "" } } } // 2. 清除缓存重新下载 ./gradlew cleanBuildCache ./gradlew --refresh-dependencies // 3. 检查依赖坐标是否正确 dependencies { // 正确格式:group:name:version implementation 'androidx.core:core-ktx:1.12.0' // 使用变量 def lifecycle_version = "2.7.0" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" }错误信息:
> error: Source option 7 is no longer supported. Use 8 or later解决方法:
android { compileOptions { // 设置为 Java 8 或更高 sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 // 启用核心库去糖 isCoreLibraryDesugaringEnabled = true } kotlinOptions { jvmTarget = '17' freeCompilerArgs += [ "-Xjvm-default=all", "-opt-in=kotlin.RequiresOptIn" ] } } dependencies { // Java 8+ 特性支持 coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' }错误信息:
> Duplicate class com.example.Foo found > Duplicate resources解决方法:
// 1. 排除重复类 android { packagingOptions { resources { excludes += [ 'META-INF/DEPENDENCIES', 'META-INF/*.kotlin_module', 'META-INF/LICENSE*', 'META-INF/NOTICE*', 'META-INF/AL2.0', 'META-INF/LGPL2.1', '**/*.kotlin_builtins', '**/*.kotlin_module' ] // 合并重复资源 pickFirsts += [ 'lib/armeabi-v7a/libnative-lib.so', 'lib/arm64-v8a/libnative-lib.so' ] // 合并重复的 AndroidManifest merge '**/AndroidManifest.xml' } } } // 2. 使用 R8/ProGuard 优化 buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile( 'proguard-android-optimize.txt' ), 'proguard-rules.pro' } }错误信息:
> AAPT: error: resource android:attr/lStar not found解决方法:
// 1. 更新编译 SDK 和依赖版本 android { compileSdk 34 compileSdkExtension 4 defaultConfig { minSdk 24 targetSdk 34 } } dependencies { // 更新支持库 implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.12.0' implementation 'com.google.android.material:material:1.11.0' // 使用最新稳定版 constraints { implementation("androidx.core:core-ktx") { version { strictly "1.12.0" } } } } // 2. 禁用 AAPT2 缓存 // gradle.properties android.enableAapt2=false错误信息:
> The option 'android.useNewApkCreator' is deprecated解决方法:
// 1. 移除过时配置 // 删除 gradle.properties 中的: // android.useNewApkCreator=true // android.useDeprecatedNdk=true // 2. 更新配置语法 android { // 旧语法(已废弃) // compileSdkVersion 33 // buildToolsVersion "33.0.0" // 新语法 compileSdk 33 defaultConfig { // 旧语法 // targetSdkVersion 33 // minSdkVersion 21 // 新语法 targetSdk 33 minSdk 24 } // 构建特性配置 buildFeatures { viewBinding true dataBinding true buildConfig true aidl true renderScript false } } // 3. 使用新的依赖配置 dependencies { // 旧语法(已废弃) // compile 'com.android.support:appcompat-v7:28.0.0' // api 'com.example:lib:1.0.0' // 新语法 implementation 'androidx.appcompat:appcompat:1.6.1' // 替代 compile implementation 'com.example:lib:1.0.0' // 替代 provided/compileOnly compileOnly 'javax.annotation:jsr250-api:1.0' // 替代 apk/runtimeOnly runtimeOnly 'com.google.auto.value:auto-value:1.10.4' }错误信息:
> Namespace not specified. Specify a namespace解决方法:
// AGP 8.0+ 必须指定 namespace android { namespace 'com.example.myapplication' // 或者为 library 指定 // namespace 'com.example.mylibrary' } // 对于多模块项目 // app/build.gradle android { namespace 'com.example.app' } // feature/build.gradle android { namespace 'com.example.feature' } // 确保包名一致性 defaultConfig { applicationId "com.example.app" // 与 namespace 一致 }错误信息:
> e: Incompatible classes were found in dependencies解决方法:
// 1. 统一 Kotlin 版本 buildscript { ext.kotlin_version = '1.9.24' dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } // 所有模块使用相同版本 plugins { id 'org.jetbrains.kotlin.android' version '1.9.24' apply false } // 2. 检查依赖的 Kotlin 版本 configurations.all { resolutionStrategy.eachDependency { details -> if (details.requested.group == 'org.jetbrains.kotlin') { details.useVersion '1.9.24' } } } // 3. 更新 Kotlin 编译器选项 kotlinOptions { jvmTarget = '17' freeCompilerArgs += [ '-Xjvm-default=all', '-opt-in=kotlin.RequiresOptIn', '-Xcontext-receivers', '-Xskip-prerelease-check' ] }错误信息:
> kapt: Incremental annotation processing requested解决方法:
// 1. 启用增量注解处理 kapt { useBuildCache = true correctErrorTypes = true // 启用增量处理 javacOptions { option("-Xmaxerrs", 1000) } // 配置注解处理器参数 arguments { arg("room.schemaLocation", "$projectDir/schemas") arg("room.incremental", "true") arg("room.expandProjection", "true") } } // 2. 或者使用 KSP 替代 KAPT plugins { id 'com.google.devtools.ksp' version '1.9.24-1.0.20' } dependencies { // 使用 KSP ksp "androidx.room:room-compiler:2.6.1" ksp "com.google.dagger:hilt-android-compiler:2.50" } // 3. 配置 KSP ksp { arg("room.generateKotlin", "true") arg("room.incremental", "true") }错误信息:
> Failed to read key from keystore解决方法:
// 1. 正确的签名配置 android { signingConfigs { debug { storeFile file("debug.keystore") storePassword "android" keyAlias "androiddebugkey" keyPassword "android" } release { storeFile file("release.jks") // 从环境变量读取(推荐) storePassword System.getenv("KEYSTORE_PASSWORD") keyAlias System.getenv("KEY_ALIAS") keyPassword System.getenv("KEY_PASSWORD") // 或者从 local.properties Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) storePassword properties.getProperty('storePassword') keyAlias properties.getProperty('keyAlias') keyPassword properties.getProperty('keyPassword') } } buildTypes { release { signingConfig signingConfigs.release minifyEnabled true } } } // 2. 验证 keystore keytool -list -v -keystore release.jks错误信息:
> More than one file was found with OS independent path解决方法:
android { packagingOptions { resources { // 排除重复文件 excludes += [ 'META-INF/*.kotlin_module', 'META-INF/*.version', 'META-INF/proguard/*', 'META-INF/services/*', '**/*.proto', '**/*.version' ] // 选择第一个匹配的文件 pickFirsts += [ 'lib/armeabi-v7a/libc++_shared.so', 'lib/arm64-v8a/libc++_shared.so', 'lib/x86/libc++_shared.so', 'lib/x86_64/libc++_shared.so' ] // 合并重复文件 merge '**/R.txt' merge '**/R.class' } // 针对 AAB bundle { language { enableSplit = true } density { enableSplit = true } abi { enableSplit = true } } } }错误信息:
> Unexpected lock protocol found in lock file解决方法:
# 1. 清理所有缓存./gradlew clean ./gradlew cleanBuildCache ./gradlew--stop# 2. 删除 Gradle 缓存目录# Windows: %USERPROFILE%\.gradle\caches# macOS/Linux: ~/.gradle/cachesrm-rf~/.gradle/caches/# 3. 删除项目缓存rm-rf.gradle/rm-rfbuild/rm-rfapp/build/# 4. 刷新依赖./gradlew --refresh-dependencies# 5. 使用离线模式(如果网络有问题)./gradlew build--offline错误信息:
> Unexpected compilation result解决方法:
// 1. 禁用增量编译 // gradle.properties # android.enableSeparateAnnotationProcessing=true # kotlin.incremental=false // 2. 清理并重建 ./gradlew clean assembleDebug // 3. 启用构建缓存 // gradle.properties org.gradle.caching=true android.enableBuildCache=true android.buildCacheDir=build-cache // 4. 配置 Kotlin 增量编译 kotlin { sourceSets.all { languageSettings { languageVersion = "2.0" } } }# gradle.properties # 内存配置 org.gradle.jvmargs=-Xmx8192m -XX:MaxMetaspaceSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 # 并行构建 org.gradle.parallel=true org.gradle.parallel.threads=8 # 配置按需 org.gradle.configureondemand=true # 启用守护进程 org.gradle.daemon=true org.gradle.daemon.idletimeout=3600000 # 构建缓存 org.gradle.caching=true android.enableBuildCache=true android.buildCacheDir=build-cache # 非传递 R 类 android.nonTransitiveRClass=true # 禁用 PNG 压缩 android.enableAapt2=false # 资源分片 android.enableResourceShrinking=true android.shrinkResources=true// 根目录 build.gradle allprojects { afterEvaluate { project -> if (project.plugins.hasPlugin('com.android.application') || project.plugins.hasPlugin('com.android.library')) { android { // 统一配置 compileSdk 34 defaultConfig { minSdk 24 targetSdk 34 } compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } // 启用构建缓存 buildCache { local { enabled = true directory = new File(rootDir, 'build-cache') } } } } } }# 查看详细错误./gradlew build--stacktrace./gradlew build--info./gradlew build--debug# 查看依赖树./gradlew app:dependencies ./gradlew app:dependencies--configurationimplementation ./gradlew app:dependencies--configurationdebugRuntimeClasspath# 查看任务./gradlew tasks ./gradlew tasks--all# 构建扫描./gradlew build--scan# 清理缓存./gradlew clean ./gradlew cleanBuildCache// 调试脚本 task printConfigurations { doLast { configurations.each { configuration -> println "Configuration: ${configuration.name}" if (configuration.canBeResolved) { try { configuration.files.each { file -> println " - ${file.name}" } } catch (Exception e) { println " Cannot resolve: ${e.message}" } } } } } // 检查依赖版本 task checkDependencies { doLast { configurations.compileClasspath.resolvedConfiguration .resolvedArtifacts.each { artifact -> println "${artifact.moduleVersion.id}" } } }| 错误类型 | 常见错误信息 | 解决方法 |
|---|---|---|
| 版本不兼容 | Minimum supported Gradle version | 更新 gradle-wrapper.properties |
| 依赖冲突 | Conflict with dependency | 使用 resolutionStrategy.force |
| 编译错误 | Source option X is no longer supported | 更新 Java 版本到 17 |
| 资源错误 | AAPT: error: resource not found | 更新 compileSdk 和依赖版本 |
| 命名空间 | Namespace not specified | 添加 namespace 属性 |
| 签名错误 | Failed to read key from keystore | 检查签名配置和环境变量 |
| 缓存问题 | Unexpected lock protocol | 清理 .gradle 和 build 目录 |
记住:遇到问题先清理缓存,查看详细日志,再根据具体错误信息寻找解决方案。大多数构建问题都可以通过仔细阅读错误信息和合理的调试步骤解决。