tgkill - встроенная ошибка на Android 8.0 Samsung S8

В последнее время я начал получать сбои на базе Android (сообщается в жизнях Google Play). Они происходят только на телефонах Samsung Galaxy S8 или S8+ с Android 8.

Согласно трассировке стека он связан с потоком визуализации пользовательского интерфейса. Однако я не знаю, как это исправить или даже где именно в приложении это происходит.

Любая идея, как узнать, где в приложении это происходит? И почему затрагивается только Galaxy S8 с Android 8? Благодарю.

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)

Ответ 1

Эта проблема, по-видимому, ограничивается устройствами Samsung с Android 8.0, это некоторая ошибка в выборе текста и/или вводе текста и/или закрытии диалога, содержащего EditTexts и/или вращении экрана.

Кажется, что есть обходной путь. Создайте xml файл в папке res/drawable, определяющей пустую форму, следующим образом.

<?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 для разработчиков Samsung Galaxy S8 libhwui.so

Ответ 2

Анализ 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);

Зачем?

Кажется, у вас может быть " Failed to set damage region on surface ", возможно, после onResume() от screen rotation или onPause() в вашей Activity. Смотрите исправление общих проблем с android-жизненным циклом

Исправления

Я начал получать этот сбой после обновления до Oreo, каждый раз, когда я запускал свое приложение, с сообщением " Failed to set damage region on surface ", за которым следовали все эти строки о libhwui.so и EglManager И оказалось, что для некоторых неясных причина, это было так или иначе вызвано совершенно не связанной проблемой в моем приложении (слишком много открытых файлов [забыл закрыть их]). После исправления этой ошибки больше не происходит сбоев в EglManager. [ также обратите внимание, что сбои случаются только при включенном аппаратном ускорении ] Ссылка: issetracker.google.com {проблема 70259031}

См. Также: eglCreateWindowSurface {SO problem}, Ведение журнала, собственные аварийные сбои при аварийном завершении в консоли разработчика с oreo-8-1 {SO problem}, аппаратное ускорение, opengl, GLSurfaceView