zoukankan      html  css  js  c++  java
  • 关于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文件。
    1. C++运行时:静态编译 & 动态编译
    2. 当只有一个.so文件,静态编译C++运行时是没问题的;存在多个.so文件,应该让所有的.so文件都动态链接相同的C++运行时。
    (5)需要注意.so文件位置;
    (6)不应该只提供armeabi架构的.so文件而忽略其他ABIs的
    1. 影响函数库的性能、兼容性;
    2. 丢失转为64位优化过的性能(ART、webview、media)
    3. 可以选择在应用市场上传指定的API版本的APK。
  • 相关阅读:
    将本地文件夹添加到Git仓库
    flex调用Webservice(一)
    经典的sql
    打印相关
    reporting services订阅
    关于TabIndex
    试题(一)
    试试用手机
    2010.07.13_19:30
    基础知识
  • 原文地址:https://www.cnblogs.com/amyzhu/p/8060467.html
Copyright © 2011-2022 走看看