Android Studio更新后App编译失败问题排查与解决请求
问题描述
一款运行多年的App,在多款手机和平板设备上均能正常使用,无异常情况。但将Android Studio从Flamingo 2022版本升级至ALadybug Feature Drop | 2024.2.2后,该App突然无法编译。执行assembleDebug任务时,在:app:dexBuilderDebug阶段失败,出现大量java.lang.NullPointerException错误,涉及多个内部类文件。
错误日志
Executing tasks: [:app:assembleDebug] in project C:\Users\thoma\bwSyncShare\Sonstiges\Projects\AndroidStudioProjects\Game > Task :app:createDebugVariantModel > Task :app:preBuild UP-TO-DATE > Task :app:preDebugBuild UP-TO-DATE > Task :app:mergeDebugNativeDebugMetadata NO-SOURCE > Task :app:dataBindingMergeDependencyArtifactsDebug > Task :app:generateDebugResValues > Task :app:generateDebugResources > Task :app:generateDebugBuildConfig > Task :app:generateSafeArgsDebug > Task :app:mapDebugSourceSetPaths > Task :app:createDebugCompatibleScreenManifests > Task :app:extractDeepLinksDebug > Task :app:checkDebugAarMetadata > Task :app:processDebugMainManifest > Task :app:processDebugManifest > Task :app:javaPreCompileDebug > Task :app:mergeDebugShaders > Task :app:compileDebugShaders NO-SOURCE > Task :app:generateDebugAssets UP-TO-DATE > Task :app:mergeDebugAssets > Task :app:processDebugJavaRes NO-SOURCE > Task :app:compressDebugAssets > Task :app:desugarDebugFileDependencies > Task :app:mergeDebugJniLibFolders > Task :app:mergeDebugNativeLibs NO-SOURCE > Task :app:stripDebugDebugSymbols NO-SOURCE > Task :app:validateSigningDebug > Task :app:writeDebugAppMetadata > Task :app:writeDebugSigningConfigVersions > Task :app:processDebugManifestForPackage > Task :app:checkDebugDuplicateClasses > Task :app:mergeDebugResources > Task :app:dataBindingGenBaseClassesDebug > Task :app:mergeLibDexDebug > Task :app:mergeExtDexDebug > Task :app:processDebugResources > Task :app:compileDebugKotlin > Task :app:compileDebugJavaWithJavac 警告: [options] 源值8已过时,将在未来版本中移除 警告: [options] 目标值8已过时,将在未来版本中移除 警告: [options] 使用 -Xlint:-options 可抑制过时选项的警告。 提示: 部分输入文件使用或覆盖了已过时的API。 提示: 使用 -Xlint:deprecation 参数重新编译以获取详细信息。 3 个警告 > Task :app:dexBuilderDebug FAILED AGPBI: {"kind":"error","text":"java.lang.NullPointerException","sources":[{"file":"C:\\Users\\thoma\\bwSyncShare\\Sonstiges\\Projects\\AndroidStudioProjects\\Game\\app\\build\\intermediates\\javac\\debug\\classes\\com\\example\\game\\FR_Game$1.class"}],"tool":"D8"} AGPBI: {"kind":"error","text":"java.lang.NullPointerException","sources":[{"file":"C:\\Users\\thoma\\bwSyncShare\\Sonstiges\\Projects\\AndroidStudioProjects\\Game\\app\\build\\intermediates\\javac\\debug\\classes\\com\\example\\game\\LiveData_FirebaseHighScore$MyValueEventListener.class"}],"tool":"D8"} AGPBI: {"kind":"error","text":"java.lang.NullPointerException","sources":[{"file":"C:\\Users\\thoma\\bwSyncShare\\Sonstiges\\Projects\\AndroidStudioProjects\\Game\\app\\build\\intermediates\\javac\\debug\\classes\\com\\example\\game\\FR_Game$3.class"}],"tool":"D8"} AGPBI: {"kind":"error","text":"java.lang.NullPointerException","sources":[{"file":"C:\\Users\\thoma\\bwSyncShare\\Sonstiges\\Projects\\AndroidStudioProjects\\Game\\app\\build\\intermediates\\javac\\debug\\classes\\com\\example\\game\\DialogFR_LevelEnd$1.class"}],"tool":"D8"} AGPBI: {"kind":"error","text":"java.lang.NullPointerException","sources":[{"file":"C:\\Users\\thoma\\bwSyncShare\\Sonstiges\\Projects\\AndroidStudioProjects\\Game\\app\\build\\intermediates\\javac\\debug\\classes\\com\\example\\game\\FR_Game$2.class"}],"tool":"D8"} org.gradle.workers.WorkerExecutionException: There were multiple failures while executing work items at org.gradle.workers.internal.DefaultWorkerExecutor.workerExecutionException(DefaultWorkerExecutor.java:225) at org.gradle.workers.internal.DefaultWorkerExecutor.await(DefaultWorkerExecutor.java:205) at com.android.build.gradle.internal.tasks.DexArchiveBuilderTaskDelegate.doProcess(DexArchiveBuilderTaskDelegate.kt:226) at com.android.build.gradle.internal.tasks.DexArchiveBuilderTask.doTaskAction(DexArchiveBuilderTask.kt:229) at com.android.build.gradle.internal.tasks.NewIncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(BaseTask.kt:69) at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:51) at com.android.build.gradle.internal.tasks.NewIncrementalTask.taskAction(NewIncrementalTask.kt:46) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125) at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:45) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51) at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.execute(IncrementalTaskAction.java:26) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
项目配置文件
根目录build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.nav_version = '2.5.3' repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:8.0.0' classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" classpath 'com.google.gms:google-services:4.4.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() mavenCentral() } } task clean(type: Delete) { delete rootProject.buildDir }
Module:app build.gradle
plugins { id 'com.android.application' id 'kotlin-android' } apply plugin: "androidx.navigation.safeargs" android { compileSdkVersion 33 buildToolsVersion "30.0.3" lintOptions { disable 'ContentDescription' } defaultConfig { applicationId "com.example.game" minSdkVersion 24 targetSdkVersion 33 versionCode 1 versionName "1.0" viewBinding { enabled = true } testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } namespace 'com.example.game' } dependencies { implementation 'androidx.core:core-ktx:1.10.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.8.0' implementation "androidx.constraintlayout:constraintlayout:2.1.4" implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.gridlayout:gridlayout:1.0.0' testImplementation 'junit:junit:' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version" implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" implementation platform('com.google.firebase:firebase-bom:29.0.3') implementation 'com.google.firebase:firebase-database' implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) }
gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists
原因分析与解决方法
核心原因
项目存在AGP(Android Gradle Plugin)与Gradle版本不匹配、依赖版本过旧,以及Java 8配置在新版工具下的兼容性问题,导致D8编译器处理字节码时抛出空指针异常。
具体解决步骤
1. 对齐AGP与Gradle版本
当前AGP版本为8.0.0,与使用的Gradle 8.9版本差距过大,存在兼容性冲突。需更新为Android Studio 2024.2.2对应的稳定版本:
- 根目录build.gradle:将AGP版本升级到8.6.0
classpath 'com.android.tools.build:gradle:8.6.0' - gradle-wrapper.properties:修改Gradle版本为8.8(与AGP 8.6.0匹配)
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
2. 更新依赖版本到兼容新版工具的版本
旧版本依赖与新版AGP/D8不兼容,逐一更新:
- 导航组件版本:将
nav_version从2.5.3更新到2.7.7(稳定版)ext.nav_version = '2.7.7' - Firebase BOM:更新到32.8.0(最新稳定版)
implementation platform('com.google.firebase:firebase-bom:32.8.0') - AndroidX依赖:更新为兼容AGP 8.x的版本
implementation 'androidx.core:core-ktx:1.12.0' implementation 'androidx.appcompat:appcompat:1.7.0' implementation 'com.google.android.material:material:1.12.0' - 修复JUnit依赖:补充缺失的版本号
testImplementation 'junit:junit:4.13.2'
3. 调整Java版本配置
新版AGP对Java 8的处理逻辑有变化,更新编译配置并添加desugar支持:
在Module:app的android块中修改:
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 coreLibraryDesugaringEnabled true } kotlinOptions { jvmTarget = '1.8' }
同时在dependencies块添加desugar依赖:
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
4. 清理并重新构建
执行以下操作确保缓存清除:
- 点击Android Studio菜单栏
Build > Clean Project - 然后点击
Build > Rebuild Project - 若仍有问题,删除项目根目录下的
.gradle文件夹和app/build文件夹,再重新构建
5. 检查内部类代码
错误涉及的内部类(如FR_Game$1.class)可能存在语法或编译问题:
- 检查匿名内部类是否引用了已被销毁的对象
- 确认Lambda表达式或匿名类的语法符合Java/Kotlin规范
内容的提问来源于stack exchange,提问作者PeterBe
相关产品推荐
相关产品推荐

