潜在问题:在 API 23 之前应用的是 DT_NEEDED 条目标根本名称,但大年夜 API 23 开端,Android 运行时将测验测验应用指定路径加载库,但设备上却不存在该路径。有些已破坏的第三方对象链/构建体系应用的是构建主机而非 SONAME 上的路径。
缺乏 SONAME(大年夜 API 23 开端应用)
每个 ELF 共享对象(“本机库”)都必须具备 SONAME(共享对象名称)属性。NDK 对象链会默认添加此属性,如不雅此属性不存在,则注解备用对象链设备有误或构建体系中存在缺点设备。缺乏 SONAME 可能会导致运行时问题,例如加载缺点的看魏缺乏此属性时会改为应用文件名。
- $ readelf --dynamic libWithSoName.so | grep SONAME
- 0x0000000e (SONAME) Library soname: [libWithSoName.so]
- $
潜在问题:定名空间冲突可能会导致在运行时加载缺点的看维进而导致在未找到所需符号时或您测验测验应用非预期且不兼容 ABI 的库时体系崩溃。
解决筹划:最新版 NDK 会默认生成精确的 SONAME。请确保您应用的是最新版 NDK,且未将构建体系设备为生成不精确的 SONAME 条目(应用 -soname 链接器选项)。
请留意,应用最新版 NDK 构建的┞符洁的跨平台代码应当可以在 Android N 上正常运行。我们建议您修改本机代码构建设备,以便生成精确的二进制文件。

Android 的兼容性一向是很多开辟者所关怀的问题,我们将持续存眷 Android 兼容性的变更,并宣布一系列相干文┞仿赞助大年夜家及时懂得。如不雅内涵应用 NDK 对象集的过程中发清楚明了我们榭龃屎布的 Android 兼容性问题,迎接留言,我们将尽力寻找谜底,并在新的文┞仿中赐与解答。
【编辑推荐】
- 一个能让你懂得所有函数调用次序的Android库
- 关于Android strings.xml-你应当懂得的几个原则
- Android上岸页面仿拉钩动效,你总会须要它!
- Gradle for Android第一篇( 大年夜Gradle和AS开端 )
- Android多线程的四种方法
推荐阅读
当我们启动一个App的时刻,Android体系会启动一个Linux Process,该Process包含一个Thread,称为UI Thread或Main Thread。平日一个应用的所有组件都运行在章一?Process中,当然,你可以>>>详细阅读
地址:http://www.17bianji.com/lsqh/34819.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示