You need to enable JavaScript to run this app. Flutter release apk权限失效:已配置相机网络权限仍无法使用
优惠活动
大模型
产品
解决方案
定价
更多

Flutter release apk权限失效:已配置相机网络权限仍无法使用

Flutter Release包网络、相机功能失效解决方案

1. 修复Android明文网络请求限制

如果你的Web API使用HTTP协议而非HTTPS,Android 9(API 28)及以上版本默认禁止release包使用明文流量,debug模式默认允许所以不会出现问题。
解决方法:在android/app/src/main/AndroidManifest.xml的<application>标签中添加如下属性:

android:usesCleartextTraffic="true"

修改后的application标签示例:

<application
    android:label="File Tracking System"
    android:icon="@mipmap/ic_launcher"
    android:usesCleartextTraffic="true">

2. 配置代码混淆规则

Release构建默认开启R8代码压缩和混淆,你用到的qrscan、permission_handler等原生插件如果没有配置保留规则,会被错误优化导致功能无法调用。
操作步骤:

  1. 在android/app目录下新建proguard-rules.pro文件(如果不存在),添加以下规则:
# Flutter核心类不混淆
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }
# 扫码插件类不混淆
-keep class com.journeyapps.** {*;}
# 权限处理插件类不混淆
-keep class com.baseflow.permissionhandler.** {*;}
# 所有Flutter插件实现类不混淆
-keep class * implements io.flutter.embedding.engine.plugins.FlutterPlugin { *; }
  1. 打开android/app/build.gradle,确认release构建配置中引用了上述混淆规则:
android {
    ...
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            // 增加下面这行配置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

3. 补充运行时动态权限申请逻辑

相机、读写存储属于Android危险权限,仅在Manifest中声明不生效,必须在调用对应功能前主动向用户申请授权。你可以用已经引入的permission_handler库实现,示例代码:

// 调用扫码前先申请相机权限
var cameraStatus = await Permission.camera.request();
if (cameraStatus.isGranted) {
  // 权限已授权,执行扫码逻辑
} else {
  // 弹窗提示用户必须授予相机权限才能使用扫码功能
}

debug模式下测试时你可能已经手动授予过权限,卸载重装release包后权限会重置,没有主动申请逻辑就会导致功能失效。

4. 确认配置生效范围

确保你所有的权限声明都写在android/app/src/main/AndroidManifest.xml中,而不是debug或release子目录下的专属Manifest文件,只有main目录下的配置才会对所有构建类型生效。
同时确认android/app/build.gradle中的minSdkVersion不低于19,避免低版本系统不兼容你引入的第三方插件。

5. 升级老旧依赖

你使用的qrscan: ^0.2.22版本已经停止维护,和新版Flutter、Android SDK存在兼容风险,可以替换为目前维护更活跃的mobile_scanner扫码库,避免版本兼容导致的异常。

修改完所有配置后,先执行flutter clean清理项目缓存,再重新构建release包验证功能是否恢复。


内容的提问来源于stack exchange,提问作者parikshit tiwari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 08:45:07