使用Oreo(8.1)在开发人员控制台中中止本机崩溃

时间:2018-01-26 08:14:41

标签: android native

在开发者控制台中,我在中止时遇到越来越多的本机崩溃。这只发生在Android 8.1设备上! 有人知道回归吗?这是回溯:

   #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)

更新: 我想这个问题只能由Google自己解决:(此处跟踪问题https://issuetracker.google.com/issues/70259031
在此期间,有人可以重现问题或至少解释问题何时发生?这有助于找到解决方法!

2 个答案:

答案 0 :(得分:1)

正在使用Surface提示OpenGL ESGLSurfaceView-扩展了View

一种可能的解决方法可能是禁用视图的硬件加速,这会导致视图在Android 8.19.0(如libhwui.so的提示)上崩溃-因为即使已修复,任何未更新的设备仍然会崩溃。可以按照View完成此操作(请参见documentation

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

当然,这将导致性能欠佳;但还是比崩溃要好。

答案 1 :(得分:0)

查看此答案:

tgkill - native error on Android 8.0 Samsung S8

似乎它可能与Samsung S8和Samsung S8 +有关。

基本上,如果对话框或对话框片段中有编辑文本,请突出显示该文本,然后关闭对话框(或更改方向),将发生此崩溃。

要解决此问题,我必须在有问题的活动上关闭hardwareAcceleration-这可以在清单中完成,并且会使活动滞后一些。

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

为帮助防止在其他设备上出现延迟,可以检查设备型号,如果它不是S8或S8 +,请打开硬件加速。

    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);
    }