关于Android中so解析那些事
1、Android系统目前支持的CPU架构:ARMv5、ARMv7、x86、MIPS、ARMv8、MIPS64、x86_64,每一种都关联着一个ABI(Application Binary Interface)
2、ABI:定义了二进制文件(尤其是.so文件)如何运行在相应系统平台上,包括使用的指令集、内存对齐、可用的系统函数库。Android系统上,每一个CPU架构对应一个ABI。
3、Native Lib Monitor(https://play.google.com/store/apps/details?id=com.xh.nativelibsmonitor.app)—— 查看手机上安装的APK使用哪些.so文件,以及.so文件来源于哪些函数库或者框架。
4、设置支持多于一种的ABI
(1)通过模拟层实现 —— 最好针对特定平台提供相应平台的二进制包,运行时候可以少一个模拟层,从而得到更好的性能。
(2)通过 Build.SUPPORTED_ABIS得到根据偏好排序的设备支持的ABI列表。
(3)Android包管理器安装APK时,如果在对应的lib/ABI目录存在.so文件,会自动选择APK包中为对应系统ABI预编译好的.so文件。
5、重要法则
(1)应该尽可能的提供转为每个ABI优化过的.so文件,但要么全部支持,要么都不支持,不应该混合着用。当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。
(2)当你引入一个.so文件,不止影响到CPU架构。
(3)NDK平台是向前兼容,而不是向后兼容的。推荐使用app的minSdkVersion对应的编译平台。引入一个预编译好的.so文件,需要检查它编译使用的平台版本。
(4)不能混合使用不同C++运行时编译的.so文件。
- C++运行时:静态编译 & 动态编译
- 当只有一个.so文件,静态编译C++运行时是没问题的;存在多个.so文件,应该让所有的.so文件都动态链接相同的C++运行时。
(5)需要注意.so文件位置;
(6)不应该只提供armeabi架构的.so文件而忽略其他ABIs的
- 影响函数库的性能、兼容性;
- 丢失转为64位优化过的性能(ART、webview、media)
- 可以选择在应用市场上传指定的API版本的APK。
作者:AmyZYX
出处:http://www.cnblogs.com/amyzhu/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/amyzhu/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥