Flutter Android(安卓)端集成 Bugly 的异常上报和升级功能
16lz
2021-01-25
前提
Flutter
版本:1.17.0
地址,别用最新版本或者比较老的版本。我之前使用1.13.0
版本也会出现问题。
Dart
版本:2.8.1
使用Flutter
中提供的版本
flutter_bugly package 地址
ok ,在大版本相同的情况下。我能搞定的问题,你也没问题。
不多说了,打包这块真的是卡了好久...
在 Bugly 官网注册
在官网注册一个App,我这里只注册了 Android 渠道的。iOS 的不熟悉,所以以后再搞吧。
注册之后会拿到androidAppId
,在初始化的时候填写即可。
集成上报功能
App的线上问题收集有助于开发定位问题。而且还可以自定义上报功能,例如埋点数据上报。之前在开发Android App
的时候集成过Bugly
。那么这里也就直接在Flutter App
中再集成一次。
Bugly
提供了flutter_bugly
包,我们直接使用即可。 flutter_bugly package 地址
按照官方文档集成即可。
这里说一下注意事项。
- 在项目配置中,如果支持全部的
SO
库架构,apk
的大小会增大两倍左右。但是不支持全部SO
库架构,有可能会出现flutter build apk
失败的情况。
defaultConfig { ndk { //设置支持的SO库架构,apk 的大小会增大两倍左右 abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } }
如只支持armeabi-v7a
,打出来的apk
只有5.6M
左右,下面是支持全部so
库架构打出来的apk
大小
- 打包的时候根据不同的平台打不同的包
64-bitflutter build apk --release --target-platform android-arm6432-bitflutter build apk --release --target-platform android-arm
问题
- debug apk 包出现异常或者崩溃不会上报,所以只能打 release 包。我这边使用还会一分钟左右的延迟
集成升级功能
升级也是App必备的功能,这里为了快速验证升级效果,也是使用的 Bugly 提供的升级功能。
在官方文档中说明使用了AndroidX的话的自定义升级弹窗了。官方也给了一个示例,那么我们直接使用示例中的弹窗效果
实现
由于想快速实现升级功能,且考虑了每个手机必备浏览器,所以下载的操作直接使用浏览器来实现。
流程图大概如下:
实现的核心代码如下:
使用的也基本是 Bugly 提供的升级弹窗,跳转浏览器 使用的是 【 launchurl 库】
void _checkUpdate(){ if (Platform.isAndroid) { FlutterBugly.checkUpgrade(); FlutterBugly.getUpgradeInfo().then((_info) { FlutterBugly.getUpgradeInfo().then((UpgradeInfo info) { if (info != null && info.id != null) { showUpdateDialog(info.versionName, info.newFeature, info.apkUrl); }else{ ToastUtil.showBasicToast("暂未检测到新版本"); } }); }); } } void showUpdateDialog(String versionName, String feature, String url) async { await showDialog( barrierDismissible: false, context: context, builder: (_) => _buildDialog(versionName,feature, url), ); } Widget _buildDialog(String versionName, String feature, String url) { return new UpdateDialog( key:_dialogKey, version:versionName, feature:feature, onClickWhenDownload:(_msg) { //2. 提示不要重复下载 print("---------提示不要重复下载---------${_msg}"); }, onClickWhenNotDownload:() { // 1. 直接使用浏览器下载 _launchURL(url); // 2. 下个计划:本地下载 // 下载apk,完成后打开apk文件,建议使用dio+open_file插件 print("---------下载apk,完成后打开apk文件,建议使用dio+open_file 插件---------"); }, ); } /// 跳转应用市场升级 _launchURL(url) async { if (await canLaunch(url)) { await launch(url); } else { throw 'Could not launch $url'; } }
问题
-
UpgradeInfo
经常会返回null
,多试几次。 - 上传 bugly 的 apk 的版本号一定要大于本地 apk 的版本号才能升级。
源码
- Flutter-WanAndroid
更多相关文章
- Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
- Android(安卓)studio 升级到4.0-4.0.1版本项目编译异常问题总结
- Android用户不想让iOS用户知道的9个杀手性功能
- FFmpeg 1.2 for Android(安卓)生成一个动态库
- Android(安卓)设置无线热点模块隐藏SSID
- Android软件自动更新升级(自动下载安装新版本)
- ios 类似android的toast
- Android快速实现地图功能(不仅快!而且小!)
- 清洁和新Android架构的认知诉求