libnativehelper 加载库失败

Android启动失败分析与解决
本文分析了Android设备启动失败的问题,特别是在zygote初始化阶段遇到的错误。问题源自一个已不再使用的动态库libcommonsystem_jni.so未能从白名单中移除,导致zygote无法正常启动。通过从public.libraries.android.txt中移除该动态库,问题得以解决。

问题现象

Android无法正常启动,但是不影响native进程运行。主要影响zygote 初始化

pid: 8035, tid: 8035, name: main  >>> zygote <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Abort message: 'Error preloading public library libcommonsystem_jni.so: dlopen failed: library "libcommonsystem_jni.so" not found'
    r0  00000000  r1  00001f63  r2  00000006  r3  e979b830
    r4  00001f63  r5  00001f63  r6  ffe7337c  r7  0000010c
    r8  e69a9fc0  r9  0000002f  r10 00000071  r11 00000070
    ip  00000041  sp  ffe73368  lr  e9727105  pc  e971ee92

01-01 08:46:09.307  8035  8035 I zygote  : option<
### `cc_library` 生成的类型 在 Android 构建配置中,`cc_library` 是一个通用的 C/C++ 模块定义,它可以生成静态(`.a` 文件)或共享(`.so` 文件),具体取决于构建配置和依赖关系。默认情况下,如果模块被其他共享或可执行文件依赖,构建系统可能会选择生成共享;如果模块被指定为静态链接,或者构建目标不支持动态链接,则会生成静态[^1]。 #### 静态(`.a`)生成条件 `cc_library` 模块在以下情况下会生成静态: - 当模块被显式指定为静态依赖(如被 `cc_binary` 或 `cc_library_static` 引用)。 - 当构建配置要求静态链接,例如在某些嵌入式环境或 Recovery 模式中。 - 当模块中使用了 `static_libs` 属性并依赖其他静态。 ```python cc_library { name: "libexample", srcs: ["example.cpp"], static_libs: ["libutils"], } ``` #### 共享(`.so`)生成条件 `cc_library` 模块在以下情况下会生成共享: - 当模块被其他共享或可执行文件依赖。 - 当模块中使用了 `shared_libs` 属性并依赖其他共享。 ```python cc_library { name: "libexample", srcs: ["example.cpp"], shared_libs: ["libnativehelper"], } ``` #### 显式控制输出类型 虽然 `cc_library` 的输出类型会根据构建环境自动判断,但可以通过 `defaults` 或 `target` 属性进行更细粒度的控制,例如强制生成静态或共享。若需要确保始终生成共享,推荐使用 `cc_library_shared` 模块类型。 ```python cc_library { name: "libexample", srcs: ["example.cpp"], target: { android_arm: { cflags: ["-DFORCE_ARM"], }, android_arm64: { cflags: ["-DFORCE_ARM64"], }, }, } ``` #### 总结 `cc_library` 模块可以生成静态或共享,具体取决于构建配置和依赖关系。若需确保生成特定类型的,应使用 `cc_library_static` 或 `cc_library_shared` 显式定义[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值