Giter Club home page Giter Club logo

flutter_bugly's Introduction

flutter_bugly

Bugly package Bugly Play package Gitter

腾讯 Bugly 插件,支持Android/iOS 运营统计、原生异常上报、flutter 异常上报、应用更新。


一、引入

AndroidX

因为大部分主流插件都已升级 androidx,所以 pub 库升级 androidx,版本更新弹窗问题见下面说明

dependencies:
  flutter_bugly: lastVersion

Google Play

dependencies:
  flutter_bugly_play: lastVersion

Android Support

dependencies:
  flutter_bugly:
    git:
      url: git://github.com/crazecoder/flutter_bugly.git
      ref: dev

二、项目配置

android/app/build.gradle 的 android 下加入:

    lintOptions {
        // 如打包出现Failed to transform libs.jar to match attributes
        checkReleaseBuilds false
    }
    defaultConfig {
        ndk {
            // 设置支持的 so 库架构 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
            abiFilters 'armeabi-v7a'
        }
    }

三、使用

import 'package:flutter_bugly/flutter_bugly.dart';

/// 使用 flutter 异常上报
void main() {
  FlutterBugly.postCatchedException(() {
    // 如果需要 ensureInitialized,请在这里运行。
    // WidgetsFlutterBinding.ensureInitialized();
    runApp(MyApp());
    FlutterBugly.init(
      androidAppId: "your android app id",
      iOSAppId: "your iOS app id",
    );
  });
}

四、release打包(Android)

64-bit

flutter build apk --release --target-platform android-arm64

32-bit(目前配合armeabi-v7a可以打出32位64位通用包)

flutter build apk --release --target-platform android-arm

五、支持属性(Android)

 String channel, //自定义渠道标识
 bool autoCheckUpgrade = true,//自动检查更新开关
 bool autoInit = true,//自动初始化
 bool autoDownloadOnWifi = false,//设置Wifi下自动下载
 bool enableNotification = false,//通知栏
 bool showInterruptedStrategy = true, //设置开启显示打断策略
 bool canShowApkInfo = true, //设置是否显示弹窗中的apk信息
 bool customUpgrade = true, //设置是否使用flutter自定义窗口,false为bugly自带弹窗
 int initDelay = 0, //延迟初始化,单位秒
 int upgradeCheckPeriod = 0, //升级检查周期设置,单位秒
 
 //手动检查更新
 checkUpgrade({
   bool isManual = false,//用户手动点击检查,非用户点击操作请传false
   bool isSilence = false,//是否显示弹窗等交互,[true:没有弹窗和toast] [false:有弹窗或toast]
 })
 FlutterBugly.setUserId("user id");
 FlutterBugly.putUserData(key: "key", value: "value");
 int tag = 9527;
 FlutterBugly.setUserTag(tag);

六、自定义弹窗(Android)

通过 FlutterBugly.getUpgradeInfo() 获取更新策略信息填入自定义 flutter widget,手动弹窗

UpgradeInfo 参数:

String id = "";//唯一标识
String title = "";//升级提示标题
String newFeature = "";//升级特性描述
long publishTime = 0;//升级发布时间,ms
int publishType = 0;//升级类型 0测试 1正式
int upgradeType = 1;//升级策略 1建议 2强制 3手工
int popTimes = 0;//提醒次数
long popInterval = 0;//提醒间隔
int versionCode;
String versionName = "";
String apkMd5;//包md5值
String apkUrl;//APK的CDN外网下载地址
long fileSize;//APK文件的大小
String imageUrl; // 图片url

七、说明(Android)

异常上报说明

1、flutter异常上报不属于崩溃,所以如需查看 flutter 的异常上报,请在「错误分析」tab页查看

2、iOS的异常上报没有过多测试,如出现问题请 issue

目前已知问题

1、第一次接受到更新策略之后,不会弹窗,即使手动检查更新也不会,需要退出app之后再进入,才会有弹窗(已解决)

2、官方没有适配8.0的notification,所以如果需要用到notification的时候请关闭后(默认关闭),自己写相关业务逻辑,或者直接把gradle里的targetSdkVersion设成26以下(方法见示例) 官方已适配

3、请勿在targetSdkVersion 26以上设置autoDownloadOnWifi = true,会导致在8.0以上机型更新策略没有反应

4、因为版本更新弹窗封装进sdk,使用的是support包,所以使用androidx包时,请配合FlutterBugly.getUpgradeInfo()或者FlutterBugly.checkUpgrade()【两种方法区别见方法注释】方法自定义弹窗界面 弹窗示例或者有下载打开安装的完整示例

flutter_bugly's People

Contributors

alexv525 avatar crazecoder avatar geekcarl avatar qiuxiang avatar silencezhou avatar wolffei1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flutter_bugly's Issues

在Release模式下lineNumber获取异常

Release 模式下Integer.parseInt(packageContentArray[1].split(":")[0])可能会出现数字转换异常,在Debug模式下又正常,原因暂时不知。后来使用正则匹配获取行数解决。
建议使用正则匹配获取行数,解决方法如下:

                            Pattern patternTrace = Pattern.compile("[1-9]\d*");
                            Matcher m = patternTrace.matcher(packageContentArray[1]);
                            if (m.find()) {
                                String lineNumStr = m.group();
                                lineNum = Integer.parseInt(lineNumStr);
                            }

clone仓库下来运行,闪退报错

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ei8z.flutter_pluginfuuuuu_example, PID: 27328
java.lang.RuntimeException: Unable to get provider com.tencent.bugly.beta.utils.BuglyFileProvider: java.lang.ClassNotFoundException: Didn't find class "com.tencent.bugly.beta.utils.BuglyFileProvider" on path: DexPathList[[zip file "/data/app/com.example.ei8z.flutter_pluginfuuuuu_example-Egw1mRMX9vlJlZy1wIRIIA==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.ei8z.flutter_pluginfuuuuu_example-Egw1mRMX9vlJlZy1wIRIIA==/lib/arm64, /data/app/com.example.ei8z.flutter_pluginfuuuuu_example-Egw1mRMX9vlJlZy1wIRIIA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
at android.app.ActivityThread.installProvider(ActivityThread.java:6575)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:6127)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6037)
at android.app.ActivityThread.-wrap1(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1764)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.tencent.bugly.beta.utils.BuglyFileProvider" on path: DexPathList[[zip file "/data/app/com.example.ei8z.flutter_pluginfuuuuu_example-Egw1mRMX9vlJlZy1wIRIIA==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.ei8z.flutter_pluginfuuuuu_example-Egw1mRMX9vlJlZy1wIRIIA==/lib/arm64, /data/app/com.example.ei8z.flutter_pluginfuuuuu_example-Egw1mRMX9vlJlZy1wIRIIA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.app.ActivityThread.installProvider(ActivityThread.java:6560)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:6127) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6037) 
at android.app.ActivityThread.-wrap1(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1764) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6938) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 
Suppressed: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/core/content/FileProvider;
at java.lang.VMClassLoader.findLoadedClass(Native Method)
at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738)
at java.lang.ClassLoader.loadClass(ClassLoader.java:363)
... 12 more
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.core.content.FileProvider" on path: DexPathList[[zip file "/data/app/com.example.ei8z.flutter_pluginfuuuuu_example-Egw1mRMX9vlJlZy1wIRIIA==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.ei8z.flutter_pluginfuuuuu_example-Egw1mRMX9vlJlZy1wIRIIA==/lib/arm64, /data/app/com.example.ei8z.flutter_pluginfuuuuu_example-Egw1mRMX9vlJlZy1wIRIIA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 15 more

应用更新策略的疑问

感谢写的这个flutter插件,我这边测试了bugly应用更新的功能

首先是我在bugly平台添加了一条应用更新策略
image
在代码中执行了checkUpgrade

RaisedButton(
  child: Text('check'),
  onPressed: () async {
    await FlutterBugly.checkUpgrade(
      isManual: true,
      isSilence: false,
    );
  },
),

但表现结果是没有弹窗,控制台有输出

I/CrashReport(29834): Failed to get boot time of device.
W/com.ecardhelper(29834): type=1400 audit(0.0:4319788): avc: denied { search } for name="usb" dev="sysfs" ino=53936 scontext=u:r:untrusted_app_27:s0:c512,c768 tcontext=u:object_r:sysfs_usb_supply:s0 tclass=dir permissive=0
W/com.ecardhelper(29834): type=1400 audit(0.0:4319789): avc: denied { search } for name="battery" dev="sysfs" ino=54040 scontext=u:r:untrusted_app_27:s0:c512,c768 tcontext=u:object_r:sysfs_battery_supply:s0 tclass=dir permissive=0
D/CrashReport(29834): app version is: [1.0.0.1], [deviceId:null|null|9614fe758c2ff8e7], channel: [null], base tinkerId:[], patch tinkerId:[], patch version:[]
D/CrashReport(29834): [UploadManager] Add upload task (pid=29834 | tid=29834)
D/CrashReport(29834): [UploadManager] Sucessfully got session ID, try to execute upload task now (pid=29834 | tid=29834)
D/CrashReport(29834): [UploadManager] Add upload task to queue (pid=29834 | tid=29834)
D/CrashReport(29834): [UploadManager] Try to poll all upload task need and put them into temp queue (pid=29834 | tid=29834)
D/CrashReport(29834): [UploadManager] Execute urgent upload tasks of queue which has 1 tasks (pid=29834 | tid=29834)
I/CrashReport(29834): [UploadManager] Create and start a new thread to execute a upload task: BUGLY_ASYNC_UPLOAD
D/CrashReport(29834): [AsyncTaskHandler] Post a normal task: com.tencent.bugly.proguard.ak$2
D/CrashReport(29834): [UploadManager] Local network consume: 33 KB
D/CrashReport(29834): [Upload] Run upload task with cmd: 804
D/CrashReport(29834): [UploadManager] Integrate security to HTTP headers (pid=29834 | tid=29994)
D/CrashReport(29834): [Util] Zip 1038 bytes data with type Gzip
W/com.ecardhelper(29834): type=1400 audit(0.0:4319790): avc: denied { read } for name="u:object_r:vendor_iop_prop:s0" dev="tmpfs" ino=17705 scontext=u:r:untrusted_app_27:s0:c512,c768 tcontext=u:object_r:vendor_iop_prop:s0 tclass=file permissive=0
E/libc    (29834): Access denied finding property "vendor.perf.iop_v3.enable"
E/libc    (29834): Access denied finding property "vendor.perf.iop_v3.enable.debug"
W/com.ecardhelper(29834): type=1400 audit(0.0:4319791): avc: denied { read } for name="u:object_r:vendor_iop_prop:s0" dev="tmpfs" ino=17705 scontext=u:r:untrusted_app_27:s0:c512,c768 tcontext=u:object_r:vendor_iop_prop:s0 tclass=file permissive=0
D/CrashReport(29834): [Database] deleted t_lr data 1
D/CrashReport(29834): [Database] insert t_lr success.
D/CrashReport(29834): [UploadManager] Uploading(ID:1002) time: 2019-01-31 13:10:02
D/CrashReport(29834): [Upload] Send 770 bytes
D/CrashReport(29834): [Upload] Upload to http://android.bugly.qq.com/rqd/async?aid=ce9a3138-7e31-469f-ba61-20bc33285cc1 with cmd 804 (pid=29834 | tid=29994).
D/CrashReport(29834): request: http://android.bugly.qq.com/rqd/async?aid=ce9a3138-7e31-469f-ba61-20bc33285cc1, send: 770 (pid=29834 | tid=29994)
D/CrashReport(29834): [Upload] Bugly version from headers is: bugly/1.0
D/CrashReport(29834): [Upload] Status from server is 0 (pid=29834 | tid=29994).
D/CrashReport(29834): [Upload] Received 126 bytes
D/CrashReport(29834): [Util] Unzip 110 bytes data with type Gzip
D/CrashReport(29834): [Upload] Response cmd is: 0, length of sBuffer is: 0
I/CrashReport(29834): [Upload] Success: 804
D/CrashReport(29834): [UploadManager] Local network consume: 33 KB
D/CrashReport(29834): [Database] deleted t_lr data 1
D/CrashReport(29834): [Database] insert t_lr success.
D/CrashReport(29834): [UploadManager] Network total consume: 34 KB
I/CrashReport(29834): upload succ:[804] [sended 770] [recevied 126]

其中输出的app version是否为检测到的版本信息呢?
D/CrashReport(29834): app version is: [1.0.0.1], [deviceId:null|null|9614fe758c2ff8e7], channel: [null], base tinkerId:[], patch tinkerId:[], patch version:[]

app闪退

flutter build apk --release --target-platform android-arm64 如果不加--target-platform android-arm64默认是怎么处理的?华为荣耀10 用这个命令打包安装后直接闪退

关于纯gradle配置的功能需求

此项目很多需求都是关于gradle配置的问题,个人想法是如果只能看android目录下gradle里配置的话,没有任何去添加这类相关功能的必要。需要寻求一个flutter yaml里version配置的类似解决方法,如果有研究过的大佬,可以讨论指点一下

最新版编译打包失败

依赖的.so
ndk {
//设置支持的SO库架构
abiFilters 'armeabi-v7a'//, 'arm64-v8a', 'x86', 'x86_64'
}
报以下错误:

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:transformNativeLibsWithMergeJniLibsForDebug'.

More than one file was found with OS independent path 'lib/arm64-v8a/libBugly.so'

怎样关闭debug模式?

/dalvikvm(16492): Unable to resolve superclass of Lcom/tencent/bugly/beta/tinker/TinkerApplicationLike; (4601)
W/dalvikvm(16492): Link of class 'Lcom/tencent/bugly/beta/tinker/TinkerApplicationLike;' failed
I/dalvikvm(16492): Could not find method com.tencent.bugly.beta.tinker.TinkerApplicationLike.getTinkerPatchApplicationLike, referenced from method com.tencent.bugly.beta.Beta.installTinker
W/dalvikvm(16492): VFY: unable to resolve static method 34244: Lcom/tencent/bugly/beta/tinker/TinkerApplicationLike;.getTinkerPatchApplicationLike ()Lcom/tencent/tinker/entry/ApplicationLike;
D/dalvikvm(16492): VFY: replacing opcode 0x71 at 0x0003
W/CrashReport(16492): Bugly debug模式开启,请在发布时把isDebug关闭。 -- Running in debug model for 'isDebug' is enabled. Please disable it when you release.
E/CrashReport(16492): --------------------------------------------------------------------------------------------
W/CrashReport(16492): Bugly debug模式将有以下行为特性 -- The following list shows the behaviour of debug model:
W/CrashReport(16492): [1] 输出详细的Bugly SDK的Log -- More detailed log of Bugly SDK will be output to logcat;
W/CrashReport(16492): [2] 每一条Crash都会被立即上报 -- Every crash caught by Bugly will be uploaded immediately.
W/CrashReport(16492): [3] 自定义日志将会在Logcat中输出 -- Custom log will be output to logcat.
E/CrashReport(16492): --------------------------------------------------------------------------------------------
I/CrashReportInfo(16492): [init] Open debug mode of Bugly.
I/CrashReport(16492): [init] Bugly version: v2.6.5
I/CrashReport(16492): crash report start initializing...
I/CrashReportInfo(16492): [init] Bugly start initializing...
I/CrashReport(16492): [init] Bugly complete version: v2.6.5(1.3.7)

与你的open_file冲突,咋整

Execution failed for task ':app:processDebugManifest'.

Manifest merger failed : Attribute meta-data#android.support.FILE_PROVIDER_PATHS@resource value=(@xml/provider_paths) from [:flutter_bugly] AndroidManifest.xml:18:17-55
is also present at [:open_file] AndroidManifest.xml:20:17-50 value=(@xml/filepaths).

androidx 编译无法通过

/Users/zhancheng/Code/haipei-flutter/android/app/src/debug/AndroidManifest.xml:13:13-64 Error:
	Attribute provider#androidx.core.content.FileProvider@authorities value=(im.weshine.haipei.fileProvider) from [:flutter_bugly] AndroidManifest.xml:13:13-64
	is also present at [com.sangcomz:FishBun:0.9.0] AndroidManifest.xml:14:13-60 value=(im.weshine.haipei.provider).
	Suggestion: add 'tools:replace="android:authorities"' to <provider> element at AndroidManifest.xml:11:9-19:20 to override.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute provider#androidx.core.content.FileProvider@authorities value=(im.weshine.haipei.fileProvider) from [:flutter_bugly] AndroidManifest.xml:13:13-64
  	is also present at [com.sangcomz:FishBun:0.9.0] AndroidManifest.xml:14:13-60 value=(im.weshine.haipei.provider).
  	Suggestion: add 'tools:replace="android:authorities"' to <provider> element at AndroidManifest.xml:11:9-19:20 to override.

能帮忙升级下FileProvider库文件吗?

最新版本还是androidX不兼容,编译失败

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:preReleaseBuild'.

Android dependency 'androidx.fragment:fragment' has different version for the compile (1.0.0-rc01) and runtime (1.0.0) classpath. You should manually set the same version via DependencyResolution

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 54s

一堆的bug啊

await FlutterBugly.init(
  autoCheckUpgrade: false,
  autoDownloadOnWifi: false,
  androidAppId: "c4888681a0",
  // iOSAppId: "c4888681a0",
);
await FlutterBugly.checkUpgrade(isManual: false, isSilence: true);
await FlutterBugly.checkUpgrade(isManual: false, isSilence: true);
await FlutterBugly.checkUpgrade(isManual: false, isSilence: true);
var info = await FlutterBugly.getUpgradeInfo();

很大几率info为空,做了延迟处理还是不行,是官方的问题还是你的问题啊?

Rejecting re-init on previously-failed class java.lang.Class<com.tencent.bugly.beta.tinker.TinkerApplicationLike>: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/tencent/tinker/entry/DefaultApplicationLike;

各种错误,头疼

Didn't find class "com.tencent.tinker.lib.util.TinkerLog

明明没用到热更新,为什么报这个错呢
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.tencent.tinker.lib.util.TinkerLog$TinkerLogImp" on path: DexPathList[[zip file "/data/app/com.ifavorite.pet.petlittle-l9V9fh7FQ7V87N7UGRFVVw==/base.apk"],nativeLibraryDirectories=[/data/app/com.ifavorite.pet.petlittle-l9V9fh7FQ7V87N7UGRFVVw==/lib/arm, /data/app/com.ifavorite.pet.petlittle-l9V9fh7FQ7V87N7UGRFVVw==/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
I/zygote (12929): at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:125)
I/zygote (12929): at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
I/zygote (12929): at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
I/zygote (12929): at void com.tencent.bugly.beta.tinker.TinkerManager.setPatchRestartOnScreenOff(boolean) (BUGLY:79)
I/zygote (12929): at void com.tencent.bugly.beta.Beta.init(android.content.Context, boolean) (BUGLY:479)
I/zygote (12929): at void com.tencent.bugly.beta.Beta.init(android.content.Context, boolean, com.tencent.bugly.BuglyStrategy) (BUGLY:594)
I/zygote (12929): at void com.tencent.bugly.b.a(android.content.Context, java.lang.String, boolean, com.tencent.bugly.BuglyStrategy) (BUGLY:170)
I/zygote (12929): at void com.tencent.bugly.Bugly.init(android.content.Context, java.lang.String, boolean, com.tencent.bugly.BuglyStrategy) (BUGLY:63)
I/zygote (12929): at void com.tencent.bugly.Bugly.init(android.content.Context, java.lang.String, boolean) (BUGLY:37)
I/zygote (12929): at void com.crazecoder.flutterbugly.FlutterBuglyPlugin.onMethodCall(io.flutter.plugin.common.MethodCall, io.flutter.plugin.common.MethodChannel$Result) (FlutterBuglyPlugin.java:80)
I/zygote (12929): at void io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(java.nio.ByteBuffer, io.flutter.plugin.common.BinaryMessenger$BinaryReply) (MethodChannel.java:201)
I/zygote (12929): at void io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(java.lang.String, byte[], int) (DartMessenger.java:88)
I/zygote (12929): at void io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(java.lang.String, byte[], int) (FlutterJNI.java:219)
I/zygote (12929): at void android.os.MessageQueue.nativePollOnce(long, int) (MessageQueue.java:-2)
I/zygote (12929): at android.os.Message android.os.MessageQueue.next() (MessageQueue.java:325)
I/zygote (12929): at void android.os.Looper.loop() (Looper.java:169)
I/zygote (12929): at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:7022)
I/zygote (12929): at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
I/zygote (12929): at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:515)
I/zygote (12929): at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:837)

调用checkUpgrade后无任何反应

1.FlutterBugly.init(androidAppId: "xxxx");
2.FlutterBugly.checkUpgrade(isManual: true,isSilence: false)

我一共使用了这两个,app入口处先调用了init方法了,然后在一个按钮那里点击调用了checkUpgrade,检测的toast弹出后就没任何反应了。我有放了个versionName 和 versionCode比较高的版本到后台的,不会弹出那个已经是最新版的toast了,应该是能证明检测到了新版本的

无法获取到更新数据

新建一个version: 1.0.1+2 传到bugly后台,然后本地装1.0.0+1

FlutterBugly.getUpgradeInfo().then((UpgradeInfo info) {});

这个info打印一直是null,从未获取到新版信息,都一个小时也没反应,反复打开都是null。奇怪的是bugly后台已下发数量会增加,求作者解答~

三星平板加入这句闪退

    ndk {
        //设置支持的SO库架构
        abiFilters 'armeabi-v7a'//, 'arm64-v8a', 'x86', 'x86_64'
    }

Samsung Galaxy Tab S2
型号 sm-t713

Key features:
System: Android 7.0
Processor: Octa Core / Quad 1.8 GHz & Quad 1.4 GHz
Memory: Internal: 32 GB / RAM: 3 GB / Slot type: microSD / Max. slot capacity: 128 GB

flutter升级后的异常

当前环境flutter升级后的版本号为:Flutter 1.5.4-hotfix.2
bugly版本:flutter_bugly: ^0.2.3

然后在使用插件做更新时会触发以下异常,能否协助看看:

I/flutter (18717): 0===1562652127
E/MethodChannel#crazecoder/flutter_bugly(18717): Failed to handle method call
E/MethodChannel#crazecoder/flutter_bugly(18717): java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference
E/MethodChannel#crazecoder/flutter_bugly(18717): 	at com.crazecoder.flutterbugly.FlutterBuglyPlugin.onMethodCall(FlutterBuglyPlugin.java:137)
E/MethodChannel#crazecoder/flutter_bugly(18717): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:201)
E/MethodChannel#crazecoder/flutter_bugly(18717): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:88)
E/MethodChannel#crazecoder/flutter_bugly(18717): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:219)
E/MethodChannel#crazecoder/flutter_bugly(18717): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#crazecoder/flutter_bugly(18717): 	at android.os.MessageQueue.next(MessageQueue.java:330)
E/MethodChannel#crazecoder/flutter_bugly(18717): 	at android.os.Looper.loop(Looper.java:137)
E/MethodChannel#crazecoder/flutter_bugly(18717): 	at android.app.ActivityThread.main(ActivityThread.java:5546)
E/MethodChannel#crazecoder/flutter_bugly(18717): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#crazecoder/flutter_bugly(18717): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
E/MethodChannel#crazecoder/flutter_bugly(18717): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
E/CrashReport(18717): Java Catch Happen
I/System.out(18717): [logcat, -d, -v, threadtime]
I/System.out(18717): null
I/System.out(18717): null
I/System.out(18717): Calling by::className:com.tencent.bugly.proguard.aq  MethodName:a
I/CrashReport(18717): [LogUtil] Get user log from native.
I/CrashReport-Native(18717): Native log has not been initiated.
I/CrashReport(18717): user log size:0
E/CrashReport(18717): stack frame :161, has cause false
E/CrashReport(18717): #++++++++++Record By Bugly++++++++++#
E/CrashReport(18717): # You can use Bugly(http:\\bugly.qq.com) to get more Crash Detail!
E/CrashReport(18717): # PKG NAME: com.letabc.zaxt
E/CrashReport(18717): # APP VER: 0.0.4
E/CrashReport(18717): # LAUNCH TIME: 2019-07-09 14:01:02
E/CrashReport(18717): # CRASH TYPE: JAVA_CATCH
E/CrashReport(18717): # CRASH TIME: 2019-07-09 14:02:11
E/CrashReport(18717): # CRASH PROCESS: com.letabc.zaxt
E/CrashReport(18717): # CRASH THREAD: main
E/CrashReport(18717): # REPORT ID: e10355b2-7eb6-4186-964b-92e09d06872d
E/CrashReport(18717): # CRASH DEVICE: HUAWEI MT7-TL10 UNROOT
E/CrashReport(18717): # RUNTIME AVAIL RAM:1918181376 ROM:12407660544 SD:12386689024
E/CrashReport(18717): # RUNTIME TOTAL RAM:3158274048 ROM:27691012096 SD:27670040576
E/CrashReport(18717): # CRASH STACK: 
E/CrashReport(18717): java.lang.Throwable: PlatformException(error, Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference, null)
E/CrashReport(18717): 	at Dart.0      StandardMethodCodec.decodeEnvelope(package:flutter/src/services/message_codecs.dart:564)
E/CrashReport(18717): 	at Dart.1      MethodChannel.invokeMethod(package:flutter/src/services/platform_channel.dart:302)
E/CrashReport(18717): 	at Dart.2      FlutterBugly.checkUpgrade(package:flutter_bugly/src/flutter_bugly.dart:100)
E/CrashReport(18717): 	at Dart.3      HomePageState.upgradeApk(package:flutter_app/pages/public/home.dart:119)
E/CrashReport(18717): 	at Dart.4      HomePageState.initState(package:flutter_app/pages/public/home.dart:63)
E/CrashReport(18717): 	at Dart.5      StatefulElement._firstBuild(package:flutter/src/widgets/framework.dart:3846)
E/CrashReport(18717): 	at Dart.6      ComponentElement.mount(package:flutter/src/widgets/framework.dart:3717)
E/CrashReport(18717): 	at Dart.7      Element.inflateWidget(package:flutter/src/widgets/framework.dart:2961)
E/CrashReport(18717): 	at Dart.8      Element.updateChild(package:flutter/src/widgets/framework.dart:2764)
E/CrashReport(18717): 	at Dart.9      SingleChildRenderObjectElement.mount(package:flutter/src/widgets/framework.dart:4876)
E/CrashReport(18717): 	at Dart.10     Element.inflateWidget(package:flutter/src/widgets/framework.dart:2961)
E/CrashReport(18717): 	at Dart.11     Element.updateChild(package:flutter/src/widgets/framework.dart:2764)
E/CrashReport(18717): 	at Dart.12     SingleChildRenderObjectElement.mount(package:flutter/src/widgets/framework.dart:4876)
E/CrashReport(18717): 	at Dart.13     Element.inflateWidget(package:flutter/src/widgets/framework.dart:2961)
E/CrashReport(18717): 	at Dart.14     Element.updateChild(package:flutter/src/widgets/framework.dart:2764)
E/CrashReport(18717): 	at Dart.15     ComponentElement.performRebuild(package:flutter/src/widgets/framework.dart:3750)
E/CrashReport(18717): 	at Dart.16     Element.rebuild(package:flutter/src/widgets/framework.dart:3565)
E/CrashReport(18717): 	at Dart.17     ComponentElement._firstBuild(package:flutter/src/widgets/framework.dart:3722)
E/CrashReport(18717): 	at Dart.18     ComponentElement.mount(package:flutter/src/widgets/framework.dart:3717)
E/CrashReport(18717): 	at Dart.19     Element.inflateWidget(package:flutter/src/widgets/framework.dart:2961)
E/CrashReport(18717): 	at Dart.20     Element.updateChild(package:flutter/src/widgets/framework.dart:2764)
E/CrashReport(18717): 	at Dart.21     ComponentElement.performRebuild(package:flutter/src/widgets/framework.dart:3750)
E/CrashReport(18717): 	at Dart.22     Element.rebuild(package:flutter/src/widgets/framework.dart:3565)
E/CrashReport(18717): 	at Dart.23     ComponentElement._firstBuild(package:flutter/src/widgets/framework.dart:3722)
E/CrashReport(18717): 	at Dart.24     ComponentElement.mount(package:flutter/src/widgets/framework.dart:3717)
E/CrashReport(18717): 	at Dart.25     ParentDataElement.mount(package:flutter/src/widgets/framework.dart:4063)
E/CrashReport(18717): 	at Dart.26     Element.inflateWidget(package:flutter/src/widgets/framework.dart:2961)
E/CrashReport(18717): 	at Dart.27     Element.updateChild(package:flutter/src/widgets/framework.dart:2764)
E/CrashReport(18717): 	at Dart.28     ComponentElement.performRebuild(package:flutter/src/widgets/framework.dart:3750)
E/CrashReport(18717): 	at Dart.29     Element.rebuild(package:flutter/src/widgets/framework.dart:3565)
E/CrashReport(18717): 	at Dart.30     ComponentElement._firstBuild(package:flutter/src/widgets/framework.dart:3722)
E/CrashReport(18717): 	at Dart.31     StatefulElement._firstBuild(package:flutter/src/widgets/framework.dart:3864)
E/CrashReport(18717): 	at Dart.32     ComponentElement.mount(package:flutter/src/widgets/framework.dart:3717)
E/CrashReport(18717): 	at Dart.33     Element.inflateWidget(package:flutter/src/widgets/framework.dart:2961)
E/CrashReport(18717): 	at Dart.34     Element.updateChild(package:flutter/src/widgets/framework.dart:2764)
E/CrashReport(18717): 	at Dart.35     SliverMultiBoxAdaptorElement.updateChild(package:flutter/src/widgets/sliver.dart:1034)
E/CrashReport(18717): 	at Dart.36     SliverMultiBoxAdaptorElement.createChild.<anonymous closure>(package:flutter/src/widgets/sliver.dart:1019)
E/CrashReport(18717): 	at Dart.37     BuildOwner.buildScope(package:flutter/src/widgets/framework.dart:2258)
E/CrashReport(18717): 	at Dart.38     SliverMultiBoxAdaptorElement.createChild(package:flutter/src/widgets/sliver.dart:1012)
E/CrashReport(18717): 	at Dart.39     RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure>(package:flutter/src/rendering/sliver_multi_box_adaptor.dart:275)
E/CrashReport(18717): 	at Dart.40     RenderObject.invokeLayoutCallback.<anonymous closure>(package:flutter/src/rendering/object.dart:1740)
E/CrashReport(18717): 	at Dart.41     PipelineOwner._enableMutationsToDirtySubtrees(package:f
E/CrashReport(18717): #++++++++++++++++++++++++++++++++++++++++++#
I/CrashReportInfo(18717): [crash] a caught exception occur, handling...
I/CrashReportInfo(18717): [crash] save crash success
I/CrashReport(18717): try to upload right now
I/System  (18717): core_booster, getBoosterConfig = false
I/CrashReport(18717): [Upload] Success: crash

这个错误有影响吗?

D/CrashReport(18375): [UploadManager] Local network consume: 61 KB
D/CrashReport(18375): [Database] deleted t_lr data 1
D/CrashReport(18375): [Database] insert t_lr success.
D/CrashReport(18375): [UploadManager] Network total consume: 62 KB
I/CrashReport(18375): upload succ:[804] [sended 800] [recevied 129]
I/CrashReport(18375): 你已放弃让SDK来处理策略
I/CrashReport(18375): betaStrategy is null
I/CrashReport(18375): 用户自定义activity,创建task失败 [strategy:null]

启动时一堆不影响运行的报错是什么鬼

W/CrashReport(29438): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.os.Bundle.get(java.lang.String)' on a null object reference
W/CrashReport(29438): at com.tencent.bugly.crashreport.common.info.AppInfo.i(BUGLY:471)
W/CrashReport(29438): at com.tencent.bugly.crashreport.common.info.AppInfo.g(BUGLY:496)
W/CrashReport(29438): at com.tencent.bugly.crashreport.common.info.a.T(BUGLY:1074)
W/CrashReport(29438): at com.tencent.bugly.proguard.ah.a(BUGLY:295)
W/CrashReport(29438): at com.tencent.bugly.crashreport.biz.a.c(BUGLY:286)
W/CrashReport(29438): at com.tencent.bugly.crashreport.biz.a.a(BUGLY:35)
W/CrashReport(29438): at com.tencent.bugly.crashreport.biz.a$2.run(BUGLY:335)
W/CrashReport(29438): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457)
W/CrashReport(29438): at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/CrashReport(29438): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
W/CrashReport(29438): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
W/CrashReport(29438): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
W/CrashReport(29438): at java.lang.Thread.run(Thread.java:764)

不支持armeab、armeabi-v7a吗

flutter_bugly:
git:
url: git://github.com/crazecoder/flutter_bugly.git
ref: dev

ndk {
//设置支持的SO库架构
abiFilters 'armeabi-v7a'//'armeabi','armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}

直接运行报错

Process: com.leimo.erp, PID: 28735
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.damo.demo-y8PSY4tok7qoAAb2V4130w==/base.apk"],nativeLibraryDirectories=[/data/app/com.damo.demo-y8PSY4tok7qoAAb2V4130w==/lib/arm, /data/app/com.damo.demo-y8PSY4tok7qoAAb2V4130w==/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib, /product/lib]]] couldn't find "libflutter.so"

通过命令打包没问题
flutter build apk --release --target-platform android-arm

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.