【问题标题】:Android 7 Native Crash: libc.so tgkillAndroid 7 原生崩溃:libc.so tgkill
【发布时间】:2017-10-20 05:15:34
【问题描述】:

我看到这个本机崩溃并带有以下堆栈跟踪。

这仅在 Android 7.0 和 7.1 中发生。该应用程序没有添加任何新内容,该应用程序已经投入生产几年了,但是随着更多设备更新为 Nougat,这种崩溃现在经常发生,并且正在变得令人讨厌。

任何建议将不胜感激。

native: pc 000000000007a6c4  /system/lib64/libc.so (tgkill+8)
  native: pc 0000000000077920  /system/lib64/libc.so (pthread_kill+64)
  native: pc 000000000002538c  /system/lib64/libc.so (raise+24)
  native: pc 000000000001d24c  /system/lib64/libc.so (abort+52)
  native: pc 000000000001225c  /system/lib64/libcutils.so (__android_log_assert+224)
  native: pc 00000000000610e0  /system/lib64/libhwui.so
  native: pc 000000000003908c  /system/lib64/libhwui.so
  native: pc 000000000003609c  /system/lib64/libhwui.so
  native: pc 000000000003b4fc  /system/lib64/libhwui.so
  native: pc 000000000003c520  /system/lib64/libhwui.so
  native: pc 000000000003e694  /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread12RenderThread10threadLoopEv+152)
  native: pc 00000000000127f0  /system/lib64/libutils.so (_ZN7android6Thread11_threadLoopEPv+336)
  native: pc 00000000000a50b0  /system/lib64/libandroid_runtime.so (_ZN7android14AndroidRuntime15javaThreadShellEPv+116)
  native: pc 00000000000770f4  /system/lib64/libc.so (_ZL15__pthread_startPv+204)
  native: pc 000000000001e7d0  /system/lib64/libc.so (__start_thread+16)

以下是受影响的设备列表:

7/18 更新:

仍然无法追根究底,所以我决定购买一台出现次数最多且价格合理的设备,结果是三星 Galaxy J3 2017 版本,搭载 Android 7.0。不幸的是,我仍然无法重现崩溃。

我还对生产中的应用程序进行了一些内存使用改进,但崩溃仍在发生。

从所有 cmets 和我自己的研究来看,它似乎与动态链接的 NDK 有关,但我没有使用任何依赖项,而且很难找出是否有任何依赖项。

我想分享我的依赖项,如果其他面临相同问题的人能够指出他们是否使用相同的依赖项之一,那就太好了 - 也许我们可以通过这种方式找出罪魁祸首。

// App Compat
    compile 'com.android.support:support-v4:23.0.1'
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.android.support:cardview-v7:23.0.1'
    compile 'com.android.support:recyclerview-v7:23.0.1'

    // Play Services
    compile 'com.google.android.gms:play-services-location:8.3.0'
    compile 'com.google.android.gms:play-services-maps:8.3.0'
    compile 'com.google.android.gms:play-services-analytics:8.3.0'
    compile 'com.google.android.gms:play-services-appindexing:8.3.0'
    compile 'com.google.android.gms:play-services-ads:8.3.0'

    // Misc Libraries
    compile 'fr.avianey.com.viewpagerindicator:library:2.4.1@aar'
    compile files('app/libs/htmlcleaner-2.7.jar')
    compile files('app/libs/protobuf-java-2.6.0.jar')
    compile files('app/libs/nineoldandroids-2.4.0.jar')

    // Fabric
    compile('com.twitter.sdk.android:twitter:1.13.0@aar') { transitive = true; }
    compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar') { transitive = true; }

对于面临同样崩溃的人,如果您正在使用这些依赖项/版本中的任何一个,请在 cmets 中回复。也许我们可以挑出问题的依赖关系。

【问题讨论】:

  • 也许我认为您的本机崩溃与以下问题相同。 issuetracker.google.com/issues/37123764我的应用程序有类似的bug,但我没有找到任何解决方案...我认为是android 7、7.1的bug。
  • 我也看到了这个,完全相同的堆栈跟踪和完全相同的受影响设备列表!最新版本于 5 月 15 日发布,但我在崩溃页面中有两行具有相同的“tgkill”名称。
  • 我也遇到了同样的问题,完全相同的堆栈跟踪,完全相同的设备受到影响,使用零本机库,以及使用位置和地图服务。也许它与此有关?有人有解决办法吗?
  • 在过去 2 个月中,我们有超过 30k 的此类 tgkill 崩溃影响了 14k+ 用户。在过去的几周里,我慢慢地删除了我们正在使用的任何 3rd 方库,并发布了分阶段的部署,看看我是否可以追踪导致这些崩溃的原因。除 Retrofit、Okhttp、Jackson、Picasso、Firebase、Google Play Services、MultiDex 和 Apache Legacy 之外的所有内容都被删除。基于此线程,我们正在讨论向 1% 的用户发布,并删除我们的地图。当前运行:'com.google.android.gms:play-services-maps:11.0.1'
  • 我们发布了分阶段部署,只删除了“com.google.android.gms:play-services-maps:11.0.1”。在整个周末看完之后,没有发生 tgkill 崩溃的实例。是的,这个问题是由@Deo 提到的地图引起的,并链接到下面的问题跟踪器。

标签: android crash native android-7.0-nougat android-7.1-nougat


【解决方案1】:

查看您提供的转储可以提供一些线索:

_ZN7android10uirenderer12renderthread12RenderThread10threadLoopEv

这表明错误发生在 UI 线程中。

libhwui.so x 6

这表明这发生在一些图形/ui相关代码的中间。

libcutils.so - __android_log_assert

这是一个断言处理程序,因此很可能在 libwhui 中违反了某种断言。

中止:

这是告诉操作系统“异常”关闭的应用程序。

raise + pthread_kill + tgkill: 这是关闭应用程序的 O/S (Android)。

您可以查看一些用于调试此类崩溃的文档here

无论如何,恐怕除了对您提供的数据的这种粗略和不精确的解释之外,很难进行推测。

如果您在附加到 Android 日志查看器时发现了该错误,您将获得更多特定于应用程序的数据(甚至是断言函数通常会发出的错误消息)。

我的建议是使用 ACRA 之类的东西来追踪与错误相关的所有细节,或者获取受影响的设备并在连接到调试器时实际重现它。

祝你好运!

编辑 2017-06-16:我只想添加一些额外的信息,Fco P 的礼貌评论。显然 Google 已决定对允许在最新版本中运行的本地库进行一些更改安卓 (7.x)。更多详情在this link

【讨论】:

  • raise + pthread_kill + tgkill:这是操作系统(Android)关闭应用程序。这是在用户杀死应用程序时发生还是从操作系统自动发生?跨度>
  • 据我所知,这是操作系统将其关闭了一个故障进程。如果应用程序“和平”终止,则不会是“杀死”操作。
【解决方案2】:

这里报道: https://issuetracker.google.com/issues/37123764

重现:获取受影响的模式,启用开发者模式,并将后台活动设置为 0。同时启用“显示后台崩溃”。

然后打开应用程序,然后再次关闭它: 您将看到崩溃。

【讨论】:

    【解决方案3】:

    不在 cmets 中(代表不足)。

    在您列出的依赖项中,我们使用:

    compile 'com.android.support:cardview-v7:25.3.1'
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:support-v4:25.3.1'
    
    compile 'com.google.android.gms:play-services-maps:10.2.1'
    compile 'com.google.android.gms:play-services-location:10.2.1'
    

    与您的不同版本。 我强烈怀疑 play-services-maps 包含该错误。

    也许您像我们一样在 viewpager 中使用地图片段,并且 Koji Matsubara (https://issuetracker.google.com/issues/37123764) 已经提到了许多问题

    【讨论】:

    • 您知道基于该错误报告的解决方法吗?我没有看到任何解决方案或解决方法或任何东西。
    • 我的所有应用程序都有同样的问题,但我只使用支持库:注释、v4、appcompat 和设计。
    【解决方案4】:

    我不知道,也许这个问题和我们的一样,也许不同,因为我在依赖项中看到了包括carview。在这里分享希望对将来有用的人

    我在下面的 Android 7.0 和 7.1 上也遇到了问题

    03-04 23:44:51.489 2173-2173/? A/DEBUG: Abort message: 'Error: Ambient Vertex Buffer overflow!!! used 420, total 284'
    03-04 23:44:51.489 2173-2173/? A/DEBUG:     eax 00000000  ebx 0000083b  ecx 00000857  edx 00000006
    03-04 23:44:51.489 2173-2173/? A/DEBUG:     esi d19ff978  edi d19ff920
    03-04 23:44:51.489 2173-2173/? A/DEBUG:     xcs 00000023  xds 0000002b  xes 0000002b  xfs 0000006b  xss 0000002b
    03-04 23:44:51.489 2173-2173/? A/DEBUG:     eip f00a6bb9  ebp d19fee68  esp d19fee0c  flags 00000292
    03-04 23:44:51.555 2173-2173/? A/DEBUG: backtrace:
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #00 pc 00000bb9  [vdso:f00a6000] (__kernel_vsyscall+9)
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #01 pc 0007a2ec  /system/lib/libc.so (tgkill+28)
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #02 pc 00075b35  /system/lib/libc.so (pthread_kill+85)
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #03 pc 0002784a  /system/lib/libc.so (raise+42)
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #04 pc 0001ee26  /system/lib/libc.so (abort+86)
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #05 pc 0000fa65  /system/lib/libcutils.so (__android_log_assert+245)
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #06 pc 00084356  /system/lib/libhwui.so
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #07 pc 0003a5ba  /system/lib/libhwui.so
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #08 pc 00083d04  /system/lib/libhwui.so
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #09 pc 0008c5df  /system/lib/libhwui.so
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #10 pc 0008e6d8  /system/lib/libhwui.so
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #11 pc 0008e5d2  /system/lib/libhwui.so
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #12 pc 000350fe  /system/lib/libhwui.so
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #13 pc 0001201f  /system/lib/libutils.so (_ZN7android6Thread11_threadLoopEPv+207)
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #14 pc 0006e53b  /system/lib/libandroid_runtime.so (_ZN7android14AndroidRuntime15javaThreadShellEPv+111)
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #15 pc 00011873  /system/lib/libutils.so (_ZN13thread_data_t10trampolineEPKS_+259)
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #16 pc 00075292  /system/lib/libc.so (_ZL15__pthread_startPv+210)
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #17 pc 0002028e  /system/lib/libc.so (__start_thread+30)
    03-04 23:44:51.555 2173-2173/? A/DEBUG:     #18 pc 0001e066  /system/lib/libc.so (__bionic_clone+70)
    

    在google上研究和搜索后,我将cardview替换为Framelayout然后这个问题解决了

    【讨论】:

    • 嗨@songoku1610,您是如何发现问题是由 Cardview 引起的。
    • 我尝试用Framelayout 替换cardview 然后这个问题解决了,这个问题只发生在Android 7.x 上
    • 另外一件事,上面的问题已经过编辑,删除了与成绩无关的文字,所以我的回答because I see in dependencies have including carview似乎与问题不匹配
    【解决方案5】:

    我在谷歌播放控制台中遇到了与你相同的设备的相同问题。

    在我的情况下,问题出在 TextureView 中,带有锁定和解锁画布的单独线程中的动画。

    我将 TextureView 动画更改为 7 和 7.1 android 的 invalidate-onDraw 动画,这很有帮助。

    【讨论】:

    • 我的应用程序使用 TextureView。您能否详细说明invalidate-onDraw 动画
    • @ShishirShetty 我不再使用 TextureView 我覆盖 View,在 onDraw 方法中描述所有动画并每 16 毫秒 (~60fps) 调用 postInvalidateOnAnimation() 方法
    【解决方案6】:

    我从运行 Android 8.0 的一位用户设备“Huawei Honor 7X (HWBND-H)”的崩溃报告中看到了这个问题。由于其他设备/操作系统版本没有出现在现场,我的想法是它可能已经在操作系统更新中修复(这个用户没有拿起,或者华为可能没有提供)。

    backtrace:
      #00  pc 000000000006a808  /system/lib64/libc.so (tgkill+8)
      #01  pc 000000000001db50  /system/lib64/libc.so (abort+88)
      #02  pc 0000000000007f4c  /system/lib64/liblog.so (__android_log_assert+304)
      #03  pc 000000000004e314  /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread10EglManager13createSurfaceEP13ANativeWindow+192)
      #04  pc 000000000004c790  /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread14OpenGLPipeline10setSurfaceEPNS_7SurfaceENS1_12SwapBehaviorE+64)
      #05  pc 00000000000492b4  /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread13CanvasContext10setSurfaceEPNS_7SurfaceE+140)
      #06  pc 000000000005123c  /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthreadL17Bridge_initializeEPNS1_14initializeArgsE+16)
      #07  pc 0000000000052fc4  /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread22MethodInvokeRenderTask3runEv+24)
      #08  pc 0000000000053f1c  /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread12RenderThread10threadLoopEv+348)
      #09  pc 0000000000011670  /system/lib64/libutils.so (_ZN7android6Thread11_threadLoopEPv+280)
      #10  pc 00000000000be1e8  /system/lib64/libandroid_runtime.so (_ZN7android14AndroidRuntime15javaThreadShellEPv+136)
      #11  pc 00000000000671b8  /system/lib64/libc.so (_ZL15__pthread_startPv+36)
      #12  pc 000000000001eee4  /system/lib64/libc.so (__start_thread+68)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      相关资源
      最近更新 更多