在DEBUG模式下没有任何问题,但在打包release时却一直闪退。
跟着官方的步骤:https://flutterchina.club/android-release/走到:
使用命令行:
cd
(
为您的工程目录).flutter build apk
(flutter build
默认会包含 --release
选项).打包好的发布APK位于/build/app/outputs/apk/app-release.apk
。然后把包在 手机上安装后一直闪退,就是打不开。
尝试切换命令:
1 |
flutter build apk --target-platform android-arm64 |
打出来的包小了,但依然闪退。
1 |
flutter build apk --target-platform android-arm |
依然闪退。
全网搜索到的贴子基本两种
abiFilters
配置缺失,补充或修改可解决但是,我检查了上面几种,我的项目均不存在,于是才有了这篇小记。那么要如何解决呢?送鱼不如授渔。
DEBUG没问题,release有问题的不同点在于DEBUG有可视的错误,但release你看不到,这就无法定位问题,只能盲人摸象?不,有方法:
Logcat 是一个命令行工具,用于转储系统消息日志,包括设备抛出错误时的堆栈轨迹,以及从您的应用中使用 Log
类写入的消息。
要通过 adb shell 运行 Logcat,一般用法是:
1 |
[adb] logcat [<option>] ... [<filter-spec>] ... |
您可以将 logcat
作为 adb 命令运行,也可以直接在模拟器或关联设备的 Shell 提示中运行它。要使用 adb 查看日志输出,请转到您的 SDK platform-tools/
目录并执行:
1 |
adb logcat |
V
:详细(最低优先级)D
:调试I
:信息W
:警告E
:错误F
:严重S
:静默(最高优先级,未曾输出过任何内容)继续讲正题,那么到底如何使用它并解决闪退问题?跟着这个步骤来:
flutter doctor
检查你的环境是否有问题,没有继续flutter run --release
adb logcat
adb logcat | grep "xxx"
, xxx是包名以查看包名为 com.test
的应用日志为例
使用 adb shell ps
查询得到应用进程号 PID 为 16180。如果进程过多,可以使用 adb shell ps | grep com.test
直接过滤出结果
1 2 3 4 5 6 7 8 |
$ adb shell ps USER PID PPID VSIZE RSS WCHAN PC NAME root 1 0 2052 860 SyS_epoll_ 00000000 S /init root 2 0 0 0 kthreadd 00000000 S kthreadd root 3 2 0 0 smpboot_th 00000000 S ksoftirqd/0 root 5 2 0 0 worker_thr 00000000 S kworker/0:0H root 6 2 0 0 msm_mpm_wo 00000000 D kworker/u8:0 u0_a327 16180 563 1303504 139472 SyS_epoll_ 00000000 S com.test复制代码 |
使用 adb logcat | grep 16180
过滤出该应用的日志
adb命令查看列出手机装的所有 app 的包名:
1 |
adb shell pm list packages |
列出系统应用的所有包名:
1 |
adb shell pm list packages -s |
列出除了系统应用的第三方应用包名:
1 |
adb shell pm list packages -3 |
推测一个包中可能带有的关键字:
1 |
adb shell dumpsys activity | findstr mFocusedActivity |
清除应用数据与缓存
1 |
adb shell pm clear 应用包名 |
原文连接
的情况下转载,若非则不得使用我方内容。