【问题标题】:tgkill - native error on Android 8.0 Samsung S8tgkill - Android 8.0 Samsung S8 上的本机错误
【发布时间】:2018-10-25 21:06:06
【问题描述】:

最近我开始遇到 Android 原生崩溃(在 Google Play Vitals 中报告)。它们仅发生在搭载 Android 8 的三星 Galaxy S8 或 S8+ 手机上。

根据堆栈跟踪,它与 UI 渲染器线程有关。但是我不知道如何修复它,甚至不知道它在应用程序中的确切位置发生。

知道如何找出应用中发生这种情况的位置吗?为什么只有搭载 Android 8 的 Galaxy S8 会受到影响?谢谢。

backtrace:
  #00  pc 0000000000071854  /system/lib64/libc.so (tgkill+8)
  #01  pc 000000000001e058  /system/lib64/libc.so (abort+88)
  #02  pc 0000000000008248  /system/lib64/liblog.so (__android_log_assert+328)
  #03  pc 0000000000052430  /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread10EglManager11damageFrameERKNS1_5FrameERK6SkRect+320)
  #04  pc 000000000004f9dc  /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread14OpenGLPipeline4drawERKNS1_5FrameERK6SkRectS8_RKNS0_12FrameBuilder13LightGeometryEPNS0_16LayerUpdateQueueERKNS0_4RectEbRKNS0_15BakedOpRenderer9LightInfoERKNSt3__16vectorINS_2spINS0_10RenderNodeEEENSM_9allocatorISQ_EEEEPNS0_19FrameInfoVisualizerE+76)
  #05  pc 000000000004d7e0  /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread13CanvasContext4drawEv+176)
  #06  pc 00000000000511e8  /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread13DrawFrameTask3runEv+184)
  #07  pc 0000000000058494  /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread12RenderThread10threadLoopEv+356)
  #08  pc 0000000000011c58  /system/lib64/libutils.so (_ZN7android6Thread11_threadLoopEPv+280)
  #09  pc 00000000000fd688  /system/lib64/libandroid_runtime.so (_ZN7android14AndroidRuntime15javaThreadShellEPv+136)
  #10  pc 000000000006de44  /system/lib64/libc.so (_ZL15__pthread_startPv+36)
  #11  pc 000000000001f9a4  /system/lib64/libc.so (__start_thread+68)

【问题讨论】:

  • 我也有同样的问题,android 8 独有。你找到解决办法了吗?
  • @Deividi Cavarzan 还没有。对不起。
  • 对我来说也一样 :(
  • 这里也一样。这是崩溃报告中排名第一的问题。
  • 你的布局中有 EditTexts 吗?你有真正的三星设备要测试吗?

标签: android android-8.0-oreo samsung-galaxy


【解决方案1】:

Logcat 分析

这是您的代码崩溃的地方EglManager.cpp

void EglManager::damageFrame(const Frame& frame, const SkRect& dirty) {
#ifdef EGL_KHR_partial_update
    if (EglExtensions.setDamage && mSwapBehavior == SwapBehavior::BufferAge) {
        EGLint rects[4];
        frame.map(dirty, rects);
        if (!eglSetDamageRegionKHR(mEglDisplay, frame.mSurface, rects, 1)) {
            LOG_ALWAYS_FATAL("Failed to set damage region on surface %p, error=%s",
                    (void*)frame.mSurface, egl_error_str());
        }
    }
#endif
}

来自SkiaOpenGLPipeline.cpp:

SkiaOpenGLPipeline::draw //method

mEglManager.damageFrame(frame, dirty);

为什么?

您的Activity 中可能有一个'Failed to set damage region on surface',可能在screen rotationonPause() 之后的onResume()。见fixing-common-android-lifecycle-issues

修复

我每次更新到Oreo 后都开始崩溃 启动了我的应用程序,并显示消息“Failed to set damage region on surface" 后面是所有关于 libhwui.soEglManager 的行 事实证明,由于某种不明原因,它是由某种原因引起的 由于我的应用程序中一个完全不相关的问题(打开的文件太多 [忘了 关闭它们])。修复了我自己的错误后,不再崩溃 EglManager。 [还请注意,只有在硬件条件下才会发生崩溃 加速开启] Ref: issuetracker.google.com { issue 70259031}

另请参阅:eglCreateWindowSurface {SO problem}Loggingnative-crashes-on-abort-in-developer-console-with-oreo-8-1 {SO problem}hardware-accelerationopenglGLSurfaceView

【讨论】:

  • 谢谢,非常彻底!但是,我不认为 OP(或我)使用任何 openGL。当您打开一个对话框,按住文本字段以调出 textHandlers,然后关闭对话框或更改方向时,会发生此问题。到目前为止,我能找到的唯一解决方法是将所有 DialogFragments 更改为在我的活动上呈现的正常片段。不理想,因为它需要黑客来阻止用户与活动进行交互等。它几乎就像它试图在对话框可用之前绘制它(这将是有意义的查看你的描述),但如何修复那个?
  • 做了一个快速测试,禁用硬件加速就可以了。它并不理想,但比崩溃要好。谢谢乔恩!
  • @Zee 很高兴在三星/谷歌修复问题 70259031 之前,您有一些解决方法(frags/accel)。您崩溃的 EGL(“嵌入式系统图形库”)是Khronos 渲染 API(例如 OpenGL、OpenGL ES 或 OpenVG)和底层原生平台窗口系统。尝试使用 gltracer 查看 EGL 如何/是否使用 OpenGL (OpenGLPipeline) 以及对话框框架中发生的所有事情。祝你好运!。
  • @Zee 您可以尝试在活动级别(在清单中)停用加速,然后动态重新激活任何将从加速中受益的关键视图(并且没有此错误)...有点小技巧,但可能是值得的。
  • 你是冠军!!设法让它像你建议的那样工作。然后,在违规活动中,我将 if (!(phoneMake.equalsIgnoreCase("samsung") && (phoneModel.startsWith("SM-G950") || phoneModel.startsWith("SM-G955")))) { getWindow( ).setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); } 尽可能启用加速。再次感谢您的帮助!
【解决方案2】:

这个问题似乎仅限于搭载 Android 8.0 的三星设备,它是关于文本选择和/或输入文本和/或关闭包含 EditTexts 的对话框和/或旋转屏幕的一些错误。

似乎有一个解决方法。在 res/drawable 文件夹中创建一个 xml 文件,定义一个空的形状,如下所示。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<!-- nothing -->
</shape>

在布局文件中,将以下属性添加到EditTexts:

android:textSelectHandle="@drawable/empty"
android:textSelectHandleRight="@drawable/empty"
android:textSelectHandleLeft="@drawable/empty"

来源:Samsung developers forum crash Samsung Galaxy S8 libhwui.so

【讨论】:

  • 我能够重现此问题,但修复似乎没有任何作用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 2023-04-04
  • 2023-02-16
  • 2018-11-11
  • 1970-01-01
  • 2015-11-19
相关资源
最近更新 更多