Android构建报错:无法从含DEX与Java字节码的归档创建应用
问题:R8Task执行失败,提示归档文件同时包含DEX和Java字节码
执行com.android.build.gradle.internal.tasks.R8Task$R8Runnable时失败,报错信息:
> A failure occurred while executing com.android.build.gradle.internal.tasks.R8Task$R8Runnable > Cannot create android app from an archive containing both DEX and Java-bytecode content. aused by: com.android.tools.r8.internal.Ub: Cannot create android app from an archive containing both DEX and Java-bytecode content. at com.android.tools.r8.ArchiveProgramResourceProvider.getProgramResources(R8_8.1.68_081071c36a35dea9a8e7845c23af618c2d62fb486760a022308124c1698d2e82:24) at com.android.builder.dexing.R8ProgramResourceProvider.addProgramResourceProvider(r8Tool.kt:470) at com.android.builder.dexing.R8Tool.runR8(r8Tool.kt:237)
当前环境:AGP 8.1.4,Gradle 8.3。
应用模块build.gradle.kts
plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("dagger.hilt.android.plugin") } android { namespace = "com.example.fittestapp" compileSdk = 34 defaultConfig { applicationId = "com.example.fittestapp" minSdk = 34 targetSdk = 34 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary = true } multiDexEnabled = true } buildTypes { debug { isMinifyEnabled = true isShrinkResources = true multiDexEnabled = true } release { isShrinkResources = true isMinifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) multiDexEnabled = true } } configurations { all { // You should exclude one of them not both of them // exclude (group= "org.jetbrains.kotlin", module= "kotlin-compiler-embeddable") exclude(group = "net.sf.kxml", module = "kxml2") exclude(group = "org.jetbrains.kotlin", module = "kotlin-build-statistics") exclude(group = "org.jetbrains.kotlin", module = "kotlin-build-tools-api") exclude(group = "org.jetbrains.kotlin", module = "kotlin-gradle-plugin") exclude(group = "xmlpull", module = "xmlpull") exclude(group = "xmlpull", module = "xpp3") exclude(group = "xpp3", module = "xpp3") exclude(group = "com.google.dagger", module = "hilt-android-compiler") exclude(group = "com.google.dagger", module = "hilt-compiler") exclude(group = "com.android.tools.build", module = "builder") exclude(group = "jakarta.activation", module = "jakarta.activation-api") } } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" freeCompilerArgs = listOf( "-Xstring-concat=inline" ) } buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.6" } packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1,DEPENDENCIES,public-suffix-list.txt}" excludes += "/**/*.txt" excludes += "kotlin/coroutines/coroutines.kotlin_builtins" excludes += "xsd/catalog.xml" excludes += "META-INF/mimetypes.default" excludes += "kotlin/kotlin.kotlin_builtins" excludes += "kotlin/reflect/reflect.kotlin_builtins" excludes += "kotlin/collections/collections.kotlin_builtins" excludes += "META-INF/mailcap.default" excludes += "META-INF/LICENSE.md" excludes += "META-INF/NOTICE.md" excludes += "META-INF/io.netty.versions.properties" excludes += "kotlin/annotation/annotation.kotlin_builtins" excludes += "META-INF/INDEX.LIST" excludes += "kotlin/internal/internal.kotlin_builtins" excludes += "kotlin/ranges/ranges.kotlin_builtins" excludes += "META-INF/gradle/incremental.annotation.processors" } } } dependencies { implementation("androidx.core:core-ktx:1.12.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2") implementation(platform("androidx.compose:compose-bom:2023.10.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-graphics") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.material3:material3") implementation("androidx.compose.material3:material3-window-size-class:1.1.2") implementation("androidx.room:room-common:2.6.0") implementation("javax.inject:javax.inject:1") implementation("androidx.compose.runtime:runtime-livedata:1.6.0-beta01") implementation("androidx.navigation:navigation-runtime-ktx:2.7.5") implementation("androidx.constraintlayout:constraintlayout-compose:1.1.0-alpha13") implementation("com.github.bumptech.glide:glide:5.0.0-rc01") implementation("androidx.work:work-testing:2.9.0-rc01") implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.7.0-rc01") implementation("androidx.work:work-runtime:2.8.1") implementation("androidx.hilt:hilt-work:1.1.0") implementation("com.google.dagger:hilt-android:2.49") implementation("com.google.dagger:hilt-android-testing:2.49") implementation("com.google.dagger.hilt.android:com.google.dagger.hilt.android.gradle.plugin:2.49") implementation("androidx.compose.ui:ui-viewbinding:1.5.4") implementation("androidx.activity:activity-compose:1.8.1") implementation("androidx.navigation:navigation-compose:2.7.5") implementation("androidx.hilt:hilt-navigation-compose:1.1.0") implementation("androidx.navigation:navigation-safe-args-gradle-plugin:2.7.5") implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.0-Beta1") implementation(platform("org.jetbrains.kotlin:kotlin-bom:2.0.0-Beta1")) implementation("org.jetbrains.kotlin:kotlin-build-tools-api:2.0.0-Beta1") implementation("org.jetbrains.kotlin:kotlin-native-utils:2.0.0-Beta1") implementation("androidx.constraintlayout:constraintlayout:2.2.0-alpha13") implementation("androidx.compose.ui:ui-android:1.6.0-beta02") implementation("androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03") implementation("com.google.dagger:hilt-compiler:2.49") implementation("com.google.dagger:hilt-android-compiler:2.49") implementation("com.google.android.gms:play-services-auth-blockstore:16.2.0") implementation("com.google.android.gms:play-services-location:21.0.1") implementation("androidx.multidex:multidex:2.0.1") implementation("com.android.tools.build:gradle:8.3.0-alpha17") implementation("com.github.bumptech.glide:compose:1.0.0-beta01") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation(platform("androidx.compose:compose-bom:2023.10.00")) androidTestImplementation("androidx.compose.ui:ui-test-junit4") debugImplementation("androidx.compose.ui:ui-tooling") debugImplementation("androidx.compose.ui:ui-test-manifest") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") }
项目根目录build.gradle.kts
plugins { id("com.android.application") version "8.1.4" apply false id("org.jetbrains.kotlin.android") version "1.9.21" apply false id("androidx.navigation.safeargs.kotlin") version "2.7.5" apply false id("com.google.dagger.hilt.android") version "2.49" apply false }
解决方案
错误核心是某个依赖库同时包含DEX和Java字节码文件,R8无法处理混合归档。按以下步骤修复:
1. 移除错误添加的Gradle插件依赖
应用模块dependencies中错误将构建插件(如kotlin-gradle-plugin)添加为implementation依赖,这些插件仅用于构建过程,不应打包进APK:
// 移除这些依赖 implementation("com.google.dagger.hilt.android:com.google.dagger.hilt.android.gradle.plugin:2.49") implementation("androidx.navigation:navigation-safe-args-gradle-plugin:2.7.5") implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.0-Beta1") implementation("com.android.tools.build:gradle:8.3.0-alpha17")
插件需在根目录plugins块声明,而非应用依赖。
2. 统一Kotlin版本,消除版本冲突
根目录Kotlin版本为1.9.21,但应用模块引入了2.0.0-Beta1版本依赖,移除这些不一致的Kotlin依赖:
// 移除这些 implementation(platform("org.jetbrains.kotlin:kotlin-bom:2.0.0-Beta1")) implementation("org.jetbrains.kotlin:kotlin-build-tools-api:2.0.0-Beta1") implementation("org.jetbrains.kotlin:kotlin-native-utils:2.0.0-Beta1")
保持Kotlin版本与根目录一致。
3. 区分编译期与运行期依赖
将Hilt编译器等编译期依赖从implementation改为kapt:
// 替换原来的implementation kapt("com.google.dagger:hilt-compiler:2.49") kapt("com.google.dagger:hilt-android-compiler:2.49")
同时移除configurations.all中对Hilt编译器的排除规则,这些是编译必需的。
4. 修正测试依赖的作用域
androidx.work:work-testing是测试用依赖,改为androidTestImplementation:
androidTestImplementation("androidx.work:work-testing:2.9.0-rc01")
5. 定位含DEX文件的依赖库
执行命令查看所有依赖的归档内容,找出包含.dex文件的库:
./gradlew app:dependencies --configuration implementation
对可疑库用jar tf <库文件名>检查内部结构,找到后通过exclude排除或替换为纯Java字节码版本。
6. 清理构建缓存
执行命令清理旧缓存,避免残留错误归档:
./gradlew clean ./gradlew build --no-build-cache
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

