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

升级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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:34:54