升级Target SDK至33时,未直接使用PermissionHandler却遇编译错误
问题描述
为满足谷歌应用商店Target SDK≥33的要求,修改了android/app/build.gradle配置:
compileSdkVersion Math.max(flutter.compileSdkVersion, 33) minSdkVersion Math.max(flutter.minSdkVersion, 21) targetSdkVersion Math.max(flutter.targetSdkVersion, 33)
编译时出现错误,推测是geolocator等依赖间接引入的permission_handler_android模块导致,具体错误信息:
/Users/praveenbhusal/.pub-cache/hosted/pub.dartlang.org/permission_handler_android-9.0.2+1/android/src/main/java/com/baseflow/permissionhandler/ServiceManager.java:75: warning: [deprecation] queryIntentActivities(Intent,int) in PackageManager has been deprecated List<ResolveInfo> callAppsList = pm.queryIntentActivities(callIntent, 0); ^ error: warnings found and -Werror specified /Users/praveenbhusal/.pub-cache/hosted/pub.dartlang.org/permission_handler_android-9.0.2+1/android/src/main/java/com/baseflow/permissionhandler/PermissionUtils.java:318: warning: [deprecation] getPackageInfo(String,int) in PackageManager has been deprecated .getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS); ^ 1 error 2 warnings FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':permission_handler_android:compileDebugJavaWithJavac'. > Compilation failed; see the compiler error output for details. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 5s Exception: Gradle task assembleDevDebug failed with exit code 1
解决方案
1. 升级permission_handler依赖(推荐)
旧版本permission_handler_android:9.0.2+1未适配Android 33的API变更,存在废弃方法调用。直接在pubspec.yaml中指定最新稳定版的permission_handler,强制覆盖间接依赖的旧版本:
dependencies: # 替换为当前最新稳定版,可通过pub.dev查看最新版号 permission_handler: ^10.2.0
执行命令更新依赖:
flutter pub get
新版本已替换所有废弃API,适配Target SDK 33,可彻底解决编译错误。
2. 临时禁用该模块的警告转错误(应急方案)
若暂时无法升级依赖,可修改android/build.gradle,让permission_handler_android模块不将警告视为错误:
subprojects { afterEvaluate { project -> if (project.name == 'permission_handler_android') { android { compileOptions { javaCompilerOptions { // 忽略废弃API警告,禁用-Werror option '-Xlint:-deprecation' option '-Werror', false } } } } } }
此方法仅为临时规避,长期仍建议升级依赖以保证兼容性。
3. 升级间接依赖的源包
若确定是geolocator引入的旧版permission_handler,直接升级geolocator到最新稳定版,新版本会自动依赖适配Target SDK 33的permission_handler版本:
dependencies: geolocator: ^9.0.0 # 替换为当前最新稳定版
执行flutter pub get更新即可。
内容的提问来源于stack exchange,提问作者Praveen Bhusal
相关产品推荐
相关产品推荐

