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

Flutter打包后出现OnBackInvokedCallback等类找不到异常

解决Flutter打包后找不到Android API类的问题

问题本质

android.window.OnBackInvokedCallback和android.graphics.ImageDecoder$OnHeaderDecodedListener都是Android 13(API 33)新增的系统API。调试模式正常是因为默认没开启代码压缩,所有类都完整保留;打包时开启了R8代码压缩,工具误判这些类未被使用,将其移除,导致运行时找不到。

解决步骤

1. 升级Android编译版本

打开android/app/build.gradle,确保编译和目标SDK版本不低于33:

android {
    compileSdkVersion 33 // 推荐用34或最新稳定版
    defaultConfig {
        targetSdkVersion 33 // 与compileSdkVersion保持一致或更高
    }
}

2. 添加ProGuard规则保留核心类

在android/app/proguard-rules.pro中加入以下规则,阻止R8删除这些API类:

# 保留Android 13返回键回调相关类
-keep class android.window.OnBackInvokedCallback { *; }
-keep interface android.window.OnBackInvokedCallback { *; }

# 保留ImageDecoder相关类
-keep class android.graphics.ImageDecoder$OnHeaderDecodedListener { *; }
-keep interface android.graphics.ImageDecoder$OnHeaderDecodedListener { *; }
-keep class android.graphics.ImageDecoder { *; }

3. 升级Flutter到稳定版

旧版Flutter可能对Android 13的API适配不完善,执行命令升级:

flutter upgrade

4. 启用核心库脱糖(兼容低版本Android)

如果你的App需要兼容Android 12及以下版本,在gradle.properties中开启脱糖:

android.enableD8=true
android.enableR8=true
android.useAndroidX=true
android.enableJetifier=true
coreLibraryDesugaringEnabled true

同时在android/app/build.gradle的依赖中添加脱糖库:

dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
}

5. 临时排查:关闭资源压缩

如果以上步骤无效,先关闭资源压缩确认问题根源:

buildTypes {
    release {
        minifyEnabled true
        shrinkResources false // 临时关闭,测试是否正常
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

若关闭后正常,说明资源压缩误删了相关依赖,需进一步调整资源压缩规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:20:31