You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取APK对应的libc.so以排查Android应用Native崩溃问题

获取对应libc.so排查Android Native崩溃的方法

我的Android应用出现Native崩溃,崩溃日志如下:

Crashed: Thread: SIGABRT  0x0000000000000000
#00 pc 0x51ba8 libc.so (BuildId: 8b687b4d600e1faa82af5a5197e82129)
#01 pc 0x51b78 libc.so (BuildId: 8b687b4d600e1faa82af5a5197e82129)
#02 pc 0x6d122c libart.so (BuildId: a49c773ef6221a996ecea990e9753caa)
#03 pc 0x16ea8 libbase.so (BuildId: 420d56eac27a210c92900f3ddb760c86)
#04 pc 0x6e10 liblog.so (BuildId: 28ea5154585a4fc544f1324fcd9ea010)
#05 pc 0x4aef1c libhwui.so (BuildId: 8b1c450dc05daf2fbdb01856d197d12b)
#06 pc 0x4c971c libhwui.so (BuildId: 8b1c450dc05daf2fbdb01856d197d12b)
#07 pc 0x72bb5450
#08 pc 0x4cbc4 libc++.so (BuildId: c43691f579c6316722d646cc6daa2e0e)

解压APK后,仅在myapp.zip/lib/arm64-v8a目录下找到libc++_shared.so,需要获取对应BuildId的libc.so来排查崩溃原因。


获取对应libc.so的可行方法:

  • 从崩溃设备直接提取
    如果能拿到出现崩溃的设备,通过ADB命令拉取系统中的libc.so:

    adb pull /system/lib64/libc.so ./
    

    拉取完成后,用readelf -n libc.so命令输出的BuildId,核对是否与崩溃日志中的8b687b4d600e1faa82af5a5197e82129一致。部分非Root设备可能无法直接访问系统目录,可尝试开启调试模式或使用备份工具导出。

  • 从匹配的系统镜像提取
    libc.so是系统库,与设备的Android版本、架构(arm64-v8a)强绑定。找到崩溃设备对应Android版本的官方系统镜像,解压后在system/lib64/目录下找到libc.so,同样用readelf验证BuildId是否匹配。

  • 使用NDK sysroot(备选方案)
    若知道应用编译时使用的NDK版本,可在NDK的sysroot目录中找到对应架构的libc.so,路径一般为${NDK_PATH}/platforms/android-<API_LEVEL>/arch-arm64/usr/lib/libc.so。但注意NDK中的libc.so可能与设备实际系统库存在差异,仅作为临时备选。

拿到libc.so后的排查步骤:

使用NDK toolchain中的addr2line工具解析崩溃地址,命令格式:

${NDK_PATH}/toolchains/llvm/prebuilt/<HOST_ARCH>/bin/aarch64-linux-android<API_LEVEL>-addr2line -f -e libc.so 0x51ba8 0x51b78

该命令会输出崩溃点对应的函数名和代码位置,帮助定位崩溃原因。


内容的提问来源于stack exchange,提问作者flamyoad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:13:34