Flutter使用printing等包时APK构建失败、安装后无法打开怎么解决
问题解决方案
编译警告说明
你贴出的几个unchecked/unsafe operations、deprecated API提示均是第三方Flutter插件内部的Java代码编译警告,不属于你的项目代码问题,也不会导致应用安装后无法打开,无需针对这些警告做额外处理。
APK安装后无法打开的排查解决步骤
- 首先检查
android/app/src/main/AndroidManifest.xml中启动Activity的配置
Android 12及以上系统要求所有带有<intent-filter>的组件必须显式声明android:exported属性,你的启动Activity必须配置如下属性:
如果漏加<activity android:name=".MainActivity" android:exported="true" <!-- 其他原有配置 --> > <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity>android:exported="true"会出现能安装但点击图标无法启动的问题。 - 排查混淆与资源收缩配置
先临时关闭编译优化验证问题:打开android/app/build.gradle,找到release构建配置,将两个参数改为false:
修改后重新打包测试,如果此时应用可以正常打开,说明是混淆规则缺失导致的问题,需要在buildTypes { release { minifyEnabled false shrinkResources false // 其他原有配置 } }android/app/proguard-rules.pro中补充你用到的第三方插件对应的混淆规则,例如Flutter核心、Firebase、printing插件的规则:# 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.** { *; } # Firebase 混淆规则 -keep class com.google.firebase.** { *; } -keep class io.flutter.plugins.firebase.** { *; } # printing 插件混淆规则 -keep class net.nfet.flutter.printing.** { *; } - 检查ABI架构适配
如果你打包时使用了--split-per-abi参数,需要确认你安装的APK架构匹配你的手机处理器架构,也可以直接打全架构通用包测试:
全架构包体积更大,但兼容性最好,若该包可以正常打开,说明之前的打包架构配置有问题,可以在build.gradle的defaultConfig中补充ABI配置:flutter build apk --debugndk { abiFilters 'armeabi-v7a', 'arm64-v8a' } - 抓取崩溃日志定位具体问题
上述方法都无法解决的话,将手机连接到电脑,开启USB调试,打开应用时执行以下命令抓取崩溃日志:
日志会明确显示应用启动崩溃的具体原因,可根据报错信息针对性处理。adb logcat -s AndroidRuntime
关于compileSdkVersion的说明
你当前使用compileSdkVersion 31、targetSdkVersion 30的配置是合法可用的,无需强行降级到30,之前降级构建失败大概率是部分插件适配问题,不用调整该配置。
内容的提问来源于stack exchange,提问作者GBerga
相关产品推荐
相关产品推荐

