我的 Flutter 应用程序的 Google Play 控制台中有一堆 ANR 报告。我如何确定 flutter 应用程序中的哪一行导致了问题,因为我在报告中看到的唯一行号是 Java 文件的行号。有没有办法我们可以将这些追溯到实际的 flutter 文件?
以下是 ANR 报告中的代码示例:
"main" tid=1 Native
"main" prio=5 tid=1 Native
| group="main" sCount=1 dsCount=0 flags=1 obj=0x753d2890 self=0x7784c14c00
| sysTid=5725 nice=-10 cgrp=default sched=0/0 handle=0x780af11550
| state=S schedstat=( 783263348209 325919126195 1054920 ) utm=51688 stm=26637 core=1 HZ=100
| stack=0x7fd6d7f000-0x7fd6d81000 stackSize=8MB
| held mutexes=
#00 pc 000000000001f2ac /system/lib64/libc.so (syscall+28)
#01 pc 00000000000d7e50 /system/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+148)
#02 pc 0000000000333fdc /system/lib64/libart.so (art::JNI::CallObjectMethod(_JNIEnv*, _jobject*, _jmethodID*, ...)+556)
#03 pc 00000000000f896c /system/lib64/libandroid_runtime.so (android::NativeDisplayEventReceiver::dispatchVsync(long, int, unsigned int)+48)
#04 pc 0000000000050a14 /system/lib64/libandroidfw.so (android::DisplayEventDispatcher::handleEvent(int, int, void*)+164)
#05 pc 0000000000014ff8 /system/lib64/libutils.so (android::Looper::pollInner(int)+836)
#06 pc 0000000000014c18 /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+60)
#07 pc 000000000012b348 /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+44)
at android.os.MessageQueue.nativePollOnce (Native method)
at android.os.MessageQueue.next (MessageQueue.java:326)
at android.os.Looper.loop (Looper.java:190)
at android.app.ActivityThread.main (ActivityThread.java:7276)
at java.lang.reflect.Method.invoke (Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:575)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:903)
构建应用程序包后,您将在此处找到映射文件:
/app/build/outputs/mapping/release/mapping.txt
(假设您有minifyEnabled true
)
然后您需要将映射文件上传到 Play 管理中心。
Play Console > 应用程序包资源管理器 > 在右上角单击工件并选择您刚刚上传的最新版本 > 然后转到下载选项卡 > 向下滚动到资产选项卡 > 通过上传按钮将其上传到“ReTrace 映射文件”在右边