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

Flutter构建报错:path_provider_android触发D8空指针异常及版本警告

Flutter构建问题:path_provider_android相关D8空指针错误及Java版本警告解决

问题现象

构建警告

warning: [options] source value 8 is obsolete and will be removed in a future release
warning: [options] target value 8 is obsolete and will be removed in a future release
warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
3 warnings

阻止构建的错误

ERROR:E:\NewApp\third_app\build\path_provider_android\intermediates\runtime_library_classes_jar\debug\classes.jar: D8: java.lang.NullPointerException: Cannot invoke "String.length()" because "<parameter1>" is null

该错误关联path_provider_android插件,发生在:app:mergeDexDebug任务阶段,使用环境为Flutter + Android Gradle Plugin 7.3.0。


解决步骤

1. 更新path_provider依赖到最新稳定版

打开项目根目录的pubspec.yaml,找到path_provider依赖项,替换为pub.dev上的最新稳定版本(例如path_provider: ^2.1.1),然后执行:

flutter pub get

2. 清理构建缓存

执行以下命令彻底清理旧构建产物:

flutter clean

进入项目的android目录,执行Gradle清理命令:

  • Windows:
    gradlew clean
    
  • Mac/Linux:
    ./gradlew clean
    

3. 配置AGP 7.3.0兼容的Java版本

AGP 7.3.0要求使用Java 11,需调整Android构建配置:

  • 打开android/build.gradle,修改compileOptions:
    android {
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_11
            targetCompatibility JavaVersion.VERSION_11
        }
    }
    
  • 在android/gradle.properties中指定Java 11 JDK路径(根据本地JDK安装路径调整):
    # Windows示例
    org.gradle.java.home=C:\\Program Files\\Java\\jdk-11.0.17
    # Mac/Linux示例
    org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
    

4. 启用MultiDex(针对minSdkVersion < 21的情况)

如果项目的minSdkVersion低于21,需启用MultiDex解决Dex合并问题:

  • 打开android/app/build.gradle,添加配置:
    android {
        defaultConfig {
            multiDexEnabled true
        }
    }
    
    dependencies {
        implementation 'com.android.support:multidex:1.0.3'
    }
    
  • 修改MainApplication文件:
    • Java:继承MultiDexApplication
      public class MainApplication extends MultiDexApplication implements FlutterApplication {
          // ... 原有代码
      }
      
    • Kotlin:在attachBaseContext中调用MultiDex.install
      class MainApplication : FlutterApplication() {
          override fun attachBaseContext(base: Context) {
              super.attachBaseContext(base)
              MultiDex.install(this)
          }
      }
      

处理Java版本警告

完成步骤3的Java版本配置后,原有的source/target 8过时警告会自动消失。若暂时无法升级Java版本,也可在android/build.gradle中添加参数抑制警告:

android {
    compileOptions {
        // 原有配置
        options.compilerArgs.add("-Xlint:-options")
    }
}

内容的提问来源于stack exchange,提问作者Henrik Peterson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:45:24