flutter 打开后闪退_Flutter打包release APK闪退百分百解决方法

Flutter打包release APK闪退

在DEBUG模式下没有任何问题,但在打包release时却一直闪退。

使用命令行:cd ( 为您的工程目录).

运行flutter build apk (flutter build 默认会包含 --release选项).

打包好的发布APK位于/build/app/outputs/apk/app-release.apk。然后把包在 手机上安装后一直闪退,就是打不开。

尝试切换命令:

flutter build apk --target-platform android-arm64

1flutterbuildapk--target-platformandroid-arm64

打出来的包小了,但依然闪退。

flutter build apk --target-platform android-arm

1flutterbuildapk--target-platformandroid-arm

依然闪退。

寻找闪退解决办法

全网搜索到的贴子基本两种缺少so库文件,或so引用冲突造成,检查并修正可解决

切换上面提到的命令后可解决

abiFilters配置缺失,补充或修改可解决

但是,我检查了上面几种,我的项目均不存在,于是才有了这篇小记。那么要如何解决呢?送鱼不如授渔。

Flutter打包闪退百分百解决的方法

DEBUG没问题,release有问题的不同点在于DEBUG有可视的错误,但release你看不到,这就无法定位问题,只能盲人摸象?不,有方法:

adb logcat 命令行工具

Logcat 是一个命令行工具,用于转储系统消息日志,包括设备抛出错误时的堆栈轨迹,以及从您的应用中使用 Log 类写入的消息。

命令行语法

要通过 adb shell 运行 Logcat,一般用法是:

[adb] logcat [] ... [] ...

1[adb]logcat[]...[]...

您可以将 logcat 作为 adb 命令运行,也可以直接在模拟器或关联设备的 Shell 提示中运行它。要使用 adb 查看日志输出,请转到您的 SDK platform-tools/ 目录并执行:

adb logcat

1adblogcat

过滤日志输出日志消息的标记是一个简短的字符串,指示消息所源自的系统组件(例如,“View”表示视图系统)。

优先级是以下字符值之一(按照从最低到最高优先级的顺序排列):V:详细(最低优先级)

D:调试

I:信息

W:警告

E:错误

F:严重

S:静默(最高优先级,未曾输出过任何内容)

继续讲正题,那么到底如何使用它并解决闪退问题?跟着这个步骤来:使用:flutter doctor检查你的环境是否有问题,没有继续

USB连接手机,确保USB调试,文件传输模式

cd到项目根目录下:flutter run --release

命令行运行:adb logcat

使用应用的包名通过logcat命令来过滤某个应用的日志?adb logcat | grep "xxx", xxx是包名

点击你的release,查看命令行输出的报告,这时候你会看到错误信息,根据错误信息提示即可解决闪退。现在就跟DEBUG模式差不多了。

查看指定应用的日志

以查看包名为 com.test 的应用日志为例

使用 adb shell ps 查询得到应用进程号 PID 为 16180。如果进程过多,可以使用 adb shell ps | grep com.test 直接过滤出结果

$ 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复制代码

1

2

3

4

5

6

7

8$adbshellps

USERPIDPPIDVSIZERSSWCHANPCNAME

root102052860SyS_epoll_00000000S/init

root2000kthreadd00000000Skthreadd

root3200smpboot_th00000000Sksoftirqd/0

root5200worker_thr00000000Skworker/0:0H

root6200msm_mpm_wo00000000Dkworker/u8:0

u0_a327161805631303504139472SyS_epoll_00000000Scom.test复制代码

使用 adb logcat | grep 16180 过滤出该应用的日志

其它常用命令

adb命令查看列出手机装的所有 app 的包名:

adb shell pm list packages

1adbshellpmlistpackages

列出系统应用的所有包名:

adb shell pm list packages -s

1adbshellpmlistpackages-s

列出除了系统应用的第三方应用包名:

adb shell pm list packages -3

1adbshellpmlistpackages-3

推测一个包中可能带有的关键字:

adb shell dumpsys activity | findstr mFocusedActivity

1adbshelldumpsysactivity|findstrmFocusedActivity

清除应用数据与缓存

adb shell pm clear 应用包名

1adbshellpmclear应用包名

参考


版权声明:本文为weixin_39662834原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。