Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Native crashes on abort in developer console with Oreo (8.1)

Tags:

android

native

In the developer console I get more and more a native crash in abort. This occurs ONLY for android 8.1 device! Is anybody aware of a regression? Here is the backtrace:

   #00  pc 000000000001da4c  /system/lib64/libc.so (abort+112)
   #01  pc 0000000000007f7c  /system/lib64/liblog.so (__android_log_assert+312) 
   #02  pc 000000000006cff8  /system/lib64/libhwui.so (android::uirenderer::renderthread::EglManager::createSurface(ANativeWindow*, bool)+324) 
   #03  pc 000000000006ad14  /system/lib64/libhwui.so (android::uirenderer::renderthread::OpenGLPipeline::setSurface(android::Surface*, android::uirenderer::renderthread::SwapBehavior, android::uirenderer::renderthread::ColorMode)+72) 
   #04  pc 00000000000679ec  /system/lib64/libhwui.so (android::uirenderer::renderthread::CanvasContext::setSurface(android::Surface*)+144) 
   #05  pc 00000000000703bc  /system/lib64/libhwui.so (android::uirenderer::renderthread::Bridge_initialize(android::uirenderer::renderthread::initializeArgs*)+16) 
   #06  pc 00000000000726c4  /system/lib64/libhwui.so (android::uirenderer::renderthread::MethodInvokeRenderTask::run()+24) 
   #07  pc 00000000000738d8  /system/lib64/libhwui.so (android::uirenderer::renderthread::RenderThread::threadLoop()+336) 
   #08  pc 0000000000011504  /system/lib64/libutils.so (android::Thread::_threadLoop(void*)+264) 
   #09  pc 00000000000a9830  /system/lib64/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+140) 
   #10  pc 0000000000069c94  /system/lib64/libc.so (__pthread_start(void*)+36) 
   #11  pc 000000000001eeec  /system/lib64/libc.so (__start_thread+68)

UPDATE: I guess the issue can be solved only by Google themselves :( Issue is tracked here https://issuetracker.google.com/issues/70259031
In the meantime, could someone already reproduce the issue or at least explain when the issue occurs? This would help to find a workaround!

like image 659
JB Cha Avatar asked Jan 26 '18 08:01

JB Cha


2 Answers

Check out this answer:

tgkill - native error on Android 8.0 Samsung S8

It seems it might be related to Samsung S8 and Samsung S8+.

Basically, if you have an edit text in a dialog or dialog fragment, highlight the text and then close the dialog (or do an orientation change) this crash will occur.

To resolve the issue, I had to turn off hardwareAcceleration on the offending activities - this can be done in the manifest and will cause the activity to lag a bit.

   <activity android:name=".activities.CarDamageActivity"
           android:hardwareAccelerated="false" />

To help prevent the lag on OTHER devices, one can check the device model and if it is NOT a S8 or S8+, turn ON the hardware acceleration.

    String phoneMake =  Build.MANUFACTURER;
    String phoneModel =  Build.MODEL.toUpperCase();
    if (!(phoneMake.equalsIgnoreCase("samsung") && (phoneModel.startsWith("SM-G950")
            ||  phoneModel.startsWith("SM-G955")))) {
        window.setFlags(
                WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
                WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
    }
like image 143
Zee Avatar answered Nov 02 '22 02:11

Zee


that a Surface is being used hints for OpenGL ES and GLSurfaceView - which extends View.

a possible workaround might be to disable hardware acceleration for the views, which cause it to crash on Android 8.1 and 9.0 (as libhwui.so hints for) - because even if it gets fixed, any device not updated will still keep crashing. this can be done per View (see the documentation):

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
    mSurface.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

of course, this would result in sub-optimal performance; but still better than a crash.

like image 3
Martin Zeitler Avatar answered Nov 02 '22 00:11

Martin Zeitler