You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 20:15:54