Android崩溃:/system/lib/libhwui.so

16

我偶尔会遇到崩溃问题,看起来像是JNI崩溃,但我的应用程序中没有任何JNI代码。这是一个图形应用程序,将加载一些图片。

有人能告诉我如何找到问题所在吗?libhwui.so是什么?

 I/DEBUG   (  141): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 000000e8
I/DEBUG   (  141):  r0 ffffffff  r1 000000e8  r2 00000000  r3 00000000
I/DEBUG   (  141):  r4 ffffffff  r5 000000e8  r6 018fea18  r7 018fe9c8
I/DEBUG   (  141):  r8 40baa190  r9 018fea40  10 0000001c  fp 0000001c
I/DEBUG   (  141):  ip 40bab590  sp be818c98  lr 4005510c  pc 4005510c  cpsr 68000010
I/DEBUG   (  141):  d0  4300000043000000  d1  44d0000043000000
I/DEBUG   (  141):  d2  41d0000000000040  d3  4000000000000002
I/DEBUG   (  141):  d4  4000000040200000  d5  4000000000000002
I/DEBUG   (  141):  d6  4000000040000000  d7  0000000000000000
I/DEBUG   (  141):  d8  43e6000040000000  d9  403c800000000000
I/DEBUG   (  141):  d10 403c800000000000  d11 4038000000000000
I/DEBUG   (  141):  d12 447a000042363498  d13 3f6ed2573c23d700
I/DEBUG   (  141):  d14 3f4959923ed2d2d3  d15 00000000c1600000
I/DEBUG   (  141):  d16 c000000000000000  d17 c000000000000000
I/DEBUG   (  141):  d18 4000000000000000  d19 0000000000000000
I/DEBUG   (  141):  d20 3ff0000000000000  d21 8000000000000000
I/DEBUG   (  141):  d22 c000000000000000  d23 0000000000000000
I/DEBUG   (  141):  d24 0000000000000000  d25 3fca515880000000
I/DEBUG   (  141):  d26 0000000000000000  d27 3fca515880000000
I/DEBUG   (  141):  d28 0000000000000000  d29 3ff0000000000000
I/DEBUG   (  141):  d30 0000000000000000  d31 3ff0000000000000
I/DEBUG   (  141):  scr 68000013
I/DEBUG   (  141): 
I/DEBUG   (  141):          #00  pc 0000510c  /system/lib/libcutils.so (android_atomic_add)
I/DEBUG   (  141):          #01  pc 0000ae3e  /system/lib/libhwui.so
I/DEBUG   (  141):          #02  pc 0000ae4e  /system/lib/libhwui.so
I/DEBUG   (  141):          #03  pc 000162f2  /system/lib/libhwui.so
I/DEBUG   (  141):          #04  pc 000163a6  /system/lib/libhwui.so
I/DEBUG   (  141):          #05  pc 000226a0  /system/lib/libutils.so (_ZN7android10VectorImpl5_growEjj)
I/DEBUG   (  141):          #06  pc 000226d2  /system/lib/libutils.so (_ZN7android10VectorImpl8insertAtEPKvjj)
I/DEBUG   (  141):          #07  pc 0002280e  /system/lib/libutils.so (_ZN7android16SortedVectorImpl3addEPKv)
I/DEBUG   (  141):          #08  pc 00016874  /system/lib/libhwui.so
I/DEBUG   (  141): 
I/DEBUG   (  141): code around pc:
I/DEBUG   (  141): 400550ec e1853f92 e3530000 1afffffa e8bd8070  .?....S.....p...
I/DEBUG   (  141): 400550fc e92d4070 e1a04000 e1a05001 ebffffd1  p@-..@...P......
I/DEBUG   (  141): 4005510c e1950f9f e0802004 e1853f92 e3530000  ..... ...?....S.
I/DEBUG   (  141): 4005511c 1afffffa e8bd8070 e1a01000 e3e00000  ....p...........
I/DEBUG   (  141): 4005512c eafffff2 e1a01000 e3a00001 eaffffef  ................
I/DEBUG   (  141): 
I/DEBUG   (  141): stack:
I/DEBUG   (  141):     be818c58  01887204  [heap]
I/DEBUG   (  141):     be818c5c  be818db8  [stack]
I/DEBUG   (  141):     be818c60  00000000  
I/DEBUG   (  141):     be818c64  00000002  
I/DEBUG   (  141):     be818c68  00000368  
I/DEBUG   (  141):     be818c6c  00000000  
I/DEBUG   (  141):     be818c70  00000310  
I/DEBUG   (  141):     be818c74  00000000  
I/DEBUG   (  141):     be818c78  014d84e0  [heap]
I/DEBUG   (  141):     be818c7c  0000001c  
I/DEBUG   (  141):     be818c80  00000310  
I/DEBUG   (  141):     be818c84  0000001c  
I/DEBUG   (  141):     be818c88  00001906  
I/DEBUG   (  141):     be818c8c  400cee59  /system/lib/libc.so
I/DEBUG   (  141):     be818c90  df0027ad  
I/DEBUG   (  141):     be818c94  00000000  
I/DEBUG   (  141): #00 be818c98  000000e8  
I/DEBUG   (  141):     be818c9c  0000004d  
I/DEBUG   (  141):     be818ca0  018fea18  [heap]
I/DEBUG   (  141):     be818ca4  40b92e41  /system/lib/libhwui.so
I/DEBUG   (  141): #01 be818ca8  01856aa8  [heap]
I/DEBUG   (  141):     be818cac  40b92e53  /system/lib/libhwui.so
我又见到一次崩溃了。
I/DEBUG   (10037): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
I/DEBUG   (10037):  r0 deadbaad  r1 00000001  r2 40000000  r3 00000000
I/DEBUG   (10037):  r4 00000000  r5 00000027  r6 400f34c8  r7 401025d8
I/DEBUG   (10037):  r8 0146dc68  r9 40102598  10 5bdf7b8c  fp 5bdf7c24
I/DEBUG   (10037):  ip ffffffff  sp 5bdf79e8  lr 400d45c9  pc 400d0958  cpsr 60000030
I/DEBUG   (10037):  d0  72656c69706d6f43  d1  726f7470008ed744
I/DEBUG   (10037):  d2  617369646f6e5f57  d3  6f6c6f685f656c50
I/DEBUG   (10037):  d4  9933333399333333  d5  9933333399333333
I/DEBUG   (10037):  d6  00d2aff099333333  d7  000000434e5f30de
I/DEBUG   (10037):  d8  0000000000000000  d9  0000000000000000
I/DEBUG   (10037):  d10 0000000000000000  d11 0000000000000000
I/DEBUG   (10037):  d12 0000000000000000  d13 0000000000000000
I/DEBUG   (10037):  d14 0000000000000000  d15 0000000000000000
I/DEBUG   (10037):  d16 0000000700000001  d17 40c4400000000000
I/DEBUG   (10037):  d18 4146605000000000  d19 bfb1be5a93a83e1d
I/DEBUG   (10037):  d20 3f1155e54e7e8408  d21 bebbbc6c1a570a20
I/DEBUG   (10037):  d22 3ff0000000000000  d23 3fede16b9c24a98f
I/DEBUG   (10037):  d24 3e66376972bea4d0  d25 3fc39a09d078c69f
I/DEBUG   (10037):  d26 0000000000000000  d27 0000000000000000
I/DEBUG   (10037):  d28 0000000000000000  d29 0000000000000000
I/DEBUG   (10037):  d30 0000000000000000  d31 0000000000000000
I/DEBUG   (10037):  scr 80000012
I/DEBUG   (10037): 
D/ti_hwc  (  142): [handle_uevents] :: Uevent : change@/devices/platform/omap/omap_i2c.1/i2c-1/1-0049/twl6030_bci/power_supply/battery
D/PowerManagerService(  292): mPowerState = SCREEN_BRIGHT_BIT SCREEN_ON_BIT 
I/DEBUG   (10037):          #00  pc 00017958  /system/lib/libc.so
I/DEBUG   (10037):          #01  pc 000137e2  /system/lib/libc.so
I/DEBUG   (10037):          #02  pc 00015b20  /system/lib/libc.so (dlfree)
I/DEBUG   (10037):          #03  pc 00016198  /system/lib/libc.so (free)
I/DEBUG   (10037):          #04  pc 000009bc  /system/lib/libstdc++.so (_ZdlPvRKSt9nothrow_t)
I/DEBUG   (10037):          #05  pc 00016afe  /system/lib/libhwui.so
I/DEBUG   (10037):          #06  pc 00016b10  /system/lib/libhwui.so
I/DEBUG   (10037):          #07  pc 0001640a  /system/lib/libhwui.so
I/DEBUG   (10037):          #08  pc 00016bc4  /system/lib/libhwui.so
I/DEBUG   (10037):          #09  pc 0000d752  /system/lib/libhwui.so
I/DEBUG   (10037):          #10  pc 0000d8e0  /system/lib/libhwui.so (_ZN7android10uirenderer11DisplayListD1Ev)
I/DEBUG   (10037):          #11  pc 0005e896  /system/lib/libandroid_runtime.so
I/DEBUG   (10037):          #12  pc 0001edb0  /system/lib/libdvm.so (dvmPlatformInvoke)
I/DEBUG   (10037):          #13  pc 000590f4  /system/lib/libdvm.so (_Z16dvmCallJNIMethodPKjP6JValuePK6MethodP6Thread)
I/DEBUG   (10037): 
I/DEBUG   (10037): code around pc:
I/DEBUG   (10037): 400d0938 4623b15c 2c006824 e026d1fb b12368db  \.#F$h.,..&..h#.
I/DEBUG   (10037): 400d0948 21014a17 6011447a 48124798 24002527  .J.!zD.`.G.H'%.$
I/DEBUG   (10037): 400d0958 f7f47005 2106eeb4 ef50f7f5 460aa901  .p.....!..P....F
I/DEBUG   (10037): 400d0968 f04f2006 94015380 94029303 eb0cf7f5  . O..S..........
I/DEBUG   (10037): 400d0978 4622a905 f7f52002 f7f4eb16 2106eea0  .."F. .........!
I/DEBUG   (10037): 
I/DEBUG   (10037): code around lr:
I/DEBUG   (10037): 400d45a8 41f0e92d 46804c0c 447c2600 68a56824  -..A.L.F.&|D$h.h
I/DEBUG   (10037): 400d45b8 e0076867 300cf9b5 dd022b00 47c04628  gh.....0.+..(F.G
I/DEBUG   (10037): 400d45c8 35544306 37fff117 6824d5f4 d1ee2c00  .CT5...7..$h.,..
I/DEBUG   (10037): 400d45d8 e8bd4630 bf0081f0 00028f96 41f0e92d  0F..........-..A
I/DEBUG   (10037): 400d45e8 fb01b086 9004f602 461f4815 4615460c  .........H.F.F.F
I/DEBUG   (10037): 
I/DEBUG   (10037): memory map around addr deadbaad:
I/DEBUG   (10037): be7f9000-be81a000 [stack]
I/DEBUG   (10037): (no map for address)
I/DEBUG   (10037): ffff0000-ffff1000 [vectors]
I/DEBUG   (10037): 
I/DEBUG   (10037): stack:
I/DEBUG   (10037):     5bdf79a8  00000001  
I/DEBUG   (10037):     5bdf79ac  5bdf79e8  
I/DEBUG   (10037):     5bdf79b0  400fd840  /system/lib/libc.so
I/DEBUG   (10037):     5bdf79b4  0000000c  
I/DEBUG   (10037):     5bdf79b8  400fd7d4  /system/lib/libc.so
I/DEBUG   (10037):     5bdf79bc  401028c8  
I/DEBUG   (10037):     5bdf79c0  00000000  
I/DEBUG   (10037):     5bdf79c4  400d45c9  /system/lib/libc.so
I/DEBUG   (10037):     5bdf79c8  00000000  
I/DEBUG   (10037):     5bdf79cc  5bdf79fc  
I/DEBUG   (10037):     5bdf79d0  400f34c8  /system/lib/libc.so
I/DEBUG   (10037):     5bdf79d4  401025d8  
I/DEBUG   (10037):     5bdf79d8  0146dc68  [heap]
I/DEBUG   (10037):     5bdf79dc  400d3735  /system/lib/libc.so
I/DEBUG   (10037):     5bdf79e0  df0027ad  
I/DEBUG   (10037):     5bdf79e4  00000000  
I/DEBUG   (10037): #00 5bdf79e8  5bdf79e4  
I/DEBUG   (10037):     5bdf79ec  00000001  
I/DEBUG   (10037):     5bdf79f0  400f34ac  /system/lib/libc.so
I/DEBUG   (10037):     5bdf79f4  00000005  
I/DEBUG   (10037):     5bdf79f8  5bdf7a14  
I/DEBUG   (10037):     5bdf79fc  fffffbdf  
I/DEBUG   (10037):     5bdf7a00  5bdf7a14  
I/DEBUG   (10037):     5bdf7a04  5bdf7a14  
I/DEBUG   (10037):     5bdf7a08  400f6a64  /system/lib/libc.so
I/DEBUG   (10037):     5bdf7a0c  400cc7e7  /system/lib/libc.so
I/DEBUG   (10037): #01 5bdf7a10  5bdf7ae8  
I/DEBUG   (10037):     5bdf7a14  20404040  
I/DEBUG   (10037):     5bdf7a18  524f4241  /dev/ashmem/dalvik-mark-stack (deleted)
I/DEBUG   (10037):     5bdf7a1c  474e4954  /dev/ashmem/dalvik-heap (deleted)
I/DEBUG   (10037):     5bdf7a20  4e49203a  /dev/ashmem/dalvik-heap (deleted)
I/DEBUG   (10037):     5bdf7a24  494c4156  /dev/ashmem/dalvik-heap (deleted)
I/DEBUG   (10037):     5bdf7a28  45482044  /dev/ashmem/dalvik-heap (deleted)
I/DEBUG   (10037):     5bdf7a2c  41205041  /dev/ashmem/dalvik-heap (deleted)
I/DEBUG   (10037):     5bdf7a30  45524444  /dev/ashmem/dalvik-heap (deleted)
I/DEBUG   (10037):     5bdf7a34  49205353  /dev/ashmem/dalvik-heap (deleted)
I/DEBUG   (10037):     5bdf7a38  6c64204e  
I/DEBUG   (10037):     5bdf7a3c  65657266  
I/DEBUG   (10037):     5bdf7a40  01417700  [heap]
I/DEBUG   (10037):     5bdf7a44  4034d558  /system/lib/libcrypto.so
I/DEBUG   (10037):     5bdf7a48  013648c8  [heap]
I/DEBUG   (10037):     5bdf7a4c  401025c0  
I/DEBUG   (10037):     5bdf7a50  00000068  
I/DEBUG   (10037):     5bdf7a54  40102588  
I/DEBUG   (10037):     5bdf7a58  014186c8  [heap]
I/DEBUG   (10037):     5bdf7a5c  40102588  
I/DEBUG   (10037):     5bdf7a60  40354c80  /system/lib/libcrypto.so
I/DEBUG   (10037):     5bdf7a64  400ceb39  /system/lib/libc.so
I/DEBUG   (10037):     5bdf7a68  409054aa  /system/lib/libdvm.so
I/DEBUG   (10037):     5bdf7a6c  4034d558  /system/lib/libcrypto.so
I/DEBUG   (10037):     5bdf7a70  5bdf7b20  
I/DEBUG   (10037):     5bdf7a74  00000000  
I/DEBUG   (10037):     5bdf7a78  5bdf7b28  
I/DEBUG   (10037):     5bdf7a7c  40354c80  /system/lib/libcrypto.so
I/DEBUG   (10037):     5bdf7a80  40354c80  /system/lib/libcrypto.so
I/DEBUG   (10037):     5bdf7a84  400cf19b  /system/lib/libc.so
I/DEBUG   (10037):     5bdf7a88  409054aa  /system/lib/libdvm.so
I/DEBUG   (10037):     5bdf7a8c  402c79df  /system/lib/libcrypto.so
I/DEBUG   (10037):     5bdf7a90  5bdf7b40  
I/DEBUG   (10037):     5bdf7a94  402cacf7  /system/lib/libcrypto.so
I/DEBUG   (10037):     5bdf7a98  01364880  [heap]
I/DEBUG   (10037):     5bdf7a9c  40102608  
I/DEBUG   (10037):     5bdf7aa0  013b5e00  [heap]
I/DEBUG   (10037):     5bdf7aa4  401025c0  
I/DEBUG   (10037):     5bdf7aa8  00000068  
I/DEBUG   (10037):     5bdf7aac  401025a0  
I/DEBUG   (10037):     5bdf7ab0  409054aa  /system/lib/libdvm.so
I/DEBUG   (10037):     5bdf7ab4  401025a8  
I/DEBUG   (10037):     5bdf7ab8  5bdf7b68  
I/DEBUG   (10037):     5bdf7abc  0145c410  [heap]
I/DEBUG   (10037):     5bdf7ac0  00000009  
I/DEBUG   (10037):     5bdf7ac4  40102558  
I/DEBUG   (10037):     5bdf7ac8  00000000  
I/DEBUG   (10037):     5bdf7acc  400cdcd5  /system/lib/libc.so
I/DEBUG   (10037):     5bdf7ad0  013c2758  [heap]
I/DEBUG   (10037):     5bdf7ad4  40102590  
I/DEBUG   (10037):     5bdf7ad8  00000038  
I/DEBUG   (10037):     5bdf7adc  40102534  
I/DEBUG   (10037):     5bdf7ae0  0145f8d8  [heap]
I/DEBUG   (10037):     5bdf7ae4  40102580  
I/DEBUG   (10037):     5bdf7ae8  0146c5d0  [heap]
I/DEBUG   (10037):     5bdf7aec  0146c5f0  [heap]
I/DEBUG   (10037):     5bdf7af0  00000001  
I/DEBUG   (10037):     5bdf7af4  40102558  
I/DEBUG   (10037):     5bdf7af8  5bdf7b8c  
I/DEBUG   (10037):     5bdf7afc  400cdcd5  /system/lib/libc.so
I/DEBUG   (10037):     5bdf7b00  012fb8d8  [heap]
I/DEBUG   (10037):     5bdf7b04  012fb928  [heap]
I/DEBUG   (10037):     5bdf7b08  01479db0  [heap]
I/DEBUG   (10037):     5bdf7b0c  00000035  
I/DEBUG   (10037):     5bdf7b10  011a31e4  [heap]
I/DEBUG   (10037):     5bdf7b14  1c5bddbe  
I/DEBUG   (10037):     5bdf7b18  01479d68  [heap]
I/DEBUG   (10037):     5bdf7b1c  01479de8  [heap]
I/DEBUG   (10037):     5bdf7b20  00000080  
I/DEBUG   (10037):     5bdf7b24  400ceb25  /system/lib/libc.so

听起来像是硬件层的问题。你在AnimationListener中使用了setLayerType(LAYER_TYPE_HARDWARE, null)吗? - Kevin Coppock
我使用了PullToRefreshListView,我在它的代码中发现了这个: ViewCompat.setLayerType(mRefreshableViewWrapper, value != 0 ? View.LAYER_TYPE_HARDWARE : View.LAYER_TYPE_NONE); - mike
这是在哪个操作系统上发生的?这是4.0.x设备吗? - Kevin Coppock
是的,它是Android 4.0.4。 - mike
2个回答

24

我知道这是一个旧的帖子,但我一直在为类似的崩溃问题苦苦挣扎,最近才找到了根本原因。以下是关于我的崩溃问题的更多细节:

  • 崩溃可能出现在 libhwui.so、libskia.so、libutils.so 或 libc.so 中
  • 应用程序没有使用 NDK
  • 与设备之间存在强相关性。三星 S6/S7 和 Nexus 5 有很多这样的实例。在旧的 Kyocera 上从未看过崩溃情况

由于我的应用程序也没有本地代码,堆栈转储/墓碑文件没有引用我的任何代码。通过临时测试,我将问题源头缩小到了应用程序中的自定义 ProgressBar。

ProgressBar 在底层使用了 TimerTask!幸运的是,当我正在研究其他内容时,我最近遇到了这篇文章

将代码改为处理程序后,从那以后就没有再见到崩溃!希望这能帮助其他人。


18
谁给负评能否解释一下?开发人员经常继承别人的代码,我也是如此,所以我认为这是对世界的有效贡献。 - Mike Jancola
1
链接无法使用,您能告诉我您所做的处理吗? - Rajat Gupta
1
抱歉,链接已失效。基本上,您需要实例化Handler和Runnable对象。在Runnables run命令中执行任务,然后将其postDelayed(this)到UX对象。这是另一个示例。https://medium.com/@dnkilic/very-simple-comparison-between-java-util-timer-and-android-os-handler-ea6749038b12 - mjancola
2
这是一个有效的链接 - l33t

9

我记得曾经看到过类似的崩溃,并阅读了有关4.0.x中特定bug的内容,其中在AnimationListener(onAnimationEnd())中删除硬件层会导致这种崩溃。解决方法是将层转换作为一个Runnable发布。例如:

@Override
public void onAnimationEnd (Animation animation) {
    //This will cause a crash
    setLayerType(LAYER_TYPE_NONE, null);
}

@Override
public void onAnimationEnd (Animation animation) {
    //This will work successfully
    post(new Runnable() {
        @Override
        public void run () {
            setLayerType(LAYER_TYPE_NONE, null);
        }
    }
}

谢谢,如果这个崩溃是由setLayerType引起的,我认为这是一个Android-PullToRefresh的bug,但我没有时间修复它。 - mike
可能是这样。没时间修复吗?它是开源的;只需将ViewCompat.setLayerType()方法更改为在layerType == LAYER_TYPE_NONE时作为可运行项发布,这应该很容易(或者您可以为所有图层类型执行此操作)。 - Kevin Coppock
жҳҜзҡ„пјҢжҲ‘жІЎжңүд»”з»Ҷйҳ…иҜ»д»Јз ҒпјҢжҲ‘дёҚзҹҘйҒ“е®ғдјҡеј•иө·е…¶д»–й”ҷиҜҜгҖӮдҪ зҡ„ж„ҸжҖқжҳҜеҰӮжһңжҲ‘е°ҶViewCompat.setLayerType(mRefreshableViewWrapper, value != 0 ? View.LAYER_TYPE_HARDWARE : View.LAYER_TYPE_NONE);жӣҙж”№дёәViewCompat.setLayerType(View.LAYER_TYPE_NONE);дјҡи§ЈеҶіиҝҷдёӘй—®йўҳеҗ—пјҹ - mike
不完全正确。如果您不确定发生了什么,那么最好不要去修改它,但是从硬件层调用setLayerType到无层应该作为可运行项发布,而不是直接在onAnimationEnd()中进行。 - Kevin Coppock
我又遇到了一个崩溃,但是堆栈与之前的有所不同,这是同样的问题吗?我已经将崩溃放在了提问中。 - mike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接