关于Android中so解析那些事

摘要:
在Android系统上,每个CPU架构对应一个ABI。Id=通信。xh。nativelibmonitor。app)--检查哪个。所以文件被安装在手机上的APK使用,以及文件来自哪些函数库或框架。当Android软件包管理器安装APK时,如果。因此文件存在于相应的lib/ABI目录中,它将自动选择。因此,为APK包中的相应系统ABI预编译文件。当您导入.so文件时,它不仅会影响CPU架构。建议使用与应用程序的minSdkVersion相对应的编译平台。
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文件。
  1. C++运行时:静态编译 & 动态编译
  2. 当只有一个.so文件,静态编译C++运行时是没问题的;存在多个.so文件,应该让所有的.so文件都动态链接相同的C++运行时。
(5)需要注意.so文件位置;
(6)不应该只提供armeabi架构的.so文件而忽略其他ABIs的
  1. 影响函数库的性能、兼容性;
  2. 丢失转为64位优化过的性能(ART、webview、media)
  3. 可以选择在应用市场上传指定的API版本的APK。

免责声明:文章转载自《关于Android中so解析那些事》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇泛微云桥e-Bridge 目录遍历,任意文件读取redis中的hash、列表、集合操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【原生】CocosCreator apk打包发布 (APPABI、jsc、网易易盾、权限、app名称图标、包名、签名)

Cocos版本:2.4.4  一 打包apk 二 App ABi的勾选 三 加密脚本 四 网易易盾插件 五 其它问题 一 打包apk 在android studio中,选择生成带签名的apk  选择APK 选择Module处,选择你的项目。 然后如果已有签名jks文件则选择choose existing,并输入你的key store密码。  没有jks...

使用adb命令安装安卓apk包

   虽然网上也有许多adb安装安卓包的教程,但经过自己亲自试了一下后,觉得自己写下来的才是自己的收获。 一、下载安装adb工具         下载地址有很多,这里是我下载的地址:https://pan.baidu.com/s/1mgGkNZM,下载文件比较齐全。         下载后是个压缩包,解压后一共有5个文件,如下图:这里我都是解压到当前文件夹...

架构之美阅读笔记二

软件系统就像一座城市一样,而架构就是对这座城市的规划,有了一个良好的规划城市的创建就会井然有序,最后的结果也会符合规律。 “混乱大都市”的构建是在向我们诉说一个糟糕的架构甚至没有架构会产生多么严重的后果。首先,它会让新进成员浪费很多时间在阅读代码上,因为没有架构,所以就缺少了设计文档或者文档一团糟。其次,坏的设计之上只能堆积更坏的设计,最后可能会导致系统的...

第一章Android系统移植与驱动开发概述

第一章 首先了解到Android系统一直与驱动开发的关系;它是在为特定设备Android的移植过程中,需要linux驱动程序来支持各种硬件设备的(Android是基于linux内核的),因此,学习移植必需要学习驱动,有了这样一个大体框架后,接下来往更深层次学习。 1.1 Android系统架构 总共分为4层:第一层linux内核;主要包括linux驱动程序...

创建以Microsoft .NET Remoting为基础的分布式应用架构

在论坛里经常看见有人问:使用.NET Remoting如何从服务器主动发出事件通知客户端?的确,初接触.NET Remoting的人多半会有这样的疑问,因为大部分的文章和书籍在介绍.NET Remoting时都只介绍了通道,对象,激活和生存周期等等概念,在谈到如何进行远程通信的时候,都只告诉读者如何从客户端激活一个服务器对象然后传递参数调用其方法。所以很多...

大型网站技术架构,架构师领导艺术

架构师的工作:架构设计,软件开发, 其他一些管理职能:规划产品路线、估算人力资源和时间资源、安排人员职责分工,确定计划里程碑点、指导工程师工作、过程风险评估与控制。 这些管理事务需要对产品技术架构、功能模块划分、技术风险都熟悉的架构师参与或直接负责。 在软件开发过程中,架构师除了实现技术架构,完成产品技术实现外,还需要和项目组内外各种角色沟通协调,可以说架...