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:继承
MultiDexApplicationpublic class MainApplication extends MultiDexApplication implements FlutterApplication { // ... 原有代码 } - Kotlin:在
attachBaseContext中调用MultiDex.installclass MainApplication : FlutterApplication() { override fun attachBaseContext(base: Context) { super.attachBaseContext(base) MultiDex.install(this) } }
- Java:继承
处理Java版本警告
完成步骤3的Java版本配置后,原有的source/target 8过时警告会自动消失。若暂时无法升级Java版本,也可在android/build.gradle中添加参数抑制警告:
android { compileOptions { // 原有配置 options.compilerArgs.add("-Xlint:-options") } }
内容的提问来源于stack exchange,提问作者Henrik Peterson
相关产品推荐
相关产品推荐

