保留Flutter V2.5.0升级targetSdkVersion 33后安装卡住,如何解决?
解决Flutter 2.5.0升级targetSdkVersion 33后安装/启动失败的问题
1. 适配Android Gradle插件(AGP)与Gradle版本
Flutter 2.5.0默认AGP版本不支持targetSdk 33,需升级到兼容版本:
- 打开
android/build.gradle,修改AGP版本为7.0.4(此版本与Flutter 2.5.0兼容且支持targetSdk 33):dependencies { classpath 'com.android.tools.build:gradle:7.0.4' // 保留其他原有依赖 } - 同步修改
gradle/wrapper/gradle-wrapper.properties中的Gradle版本:distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
2. 配置targetSdkVersion与compileSdkVersion
在android/app/build.gradle中更新版本参数:
android { compileSdkVersion 33 defaultConfig { applicationId "com.your.app.id" minSdkVersion 21 // 根据自身需求调整,不低于官方最低要求即可 targetSdkVersion 33 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } // 保留其他原有配置 }
3. 修复Android 12+的android:exported属性要求
targetSdk 33属于Android 12+范畴,所有四大组件必须显式声明android:exported属性:
- 打开
android/app/src/main/AndroidManifest.xml,为主Activity添加android:exported="true"(启动页Activity同理):<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <!-- 保留其他原有配置 --> </activity> - 应用内其他组件(如自定义Service、BroadcastReceiver)需根据功能需求设置
android:exported为true(允许外部调用)或false(仅内部使用)。
4. 添加Android 13+必要权限
targetSdk 33要求显式申请通知权限,否则可能引发启动异常:
在AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
即使应用不需要通知功能,也建议添加该权限以规避权限缺失导致的启动问题。
5. 清理缓存并重建项目
执行以下命令彻底清理缓存后重新构建APK:
flutter clean flutter pub get cd android ./gradlew clean cd .. flutter build apk --release
6. 排查安装卡住的其他潜在原因
- 确认设备已开启「未知来源应用安装」权限(Android 8+需手动开启);
- 检查APK签名是否正确,避免因签名不匹配导致安装失败;
- 通过Android Studio的Logcat过滤
Error/Warning级别日志,定位具体启动失败原因(如某组件未配置exported导致的崩溃)。
内容的提问来源于stack exchange,提问作者Hoàng Hải Lương
相关产品推荐
相关产品推荐

