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解析那些事的更多相关文章

  1. Android中XML解析-Dom解析

    Android中需要解析服务器端传过来的数据,由于XML是与平台无关的特性,被广泛运用于数据通信中,有的时候需要解析xml数据,格式有三种方式,分别是DOM.SAX以及PULL三种方式,本文就简单以D ...

  2. Android中XML解析

    package com.example.thebroadproject; public class Book { private int id; private String name; privat ...

  3. Android中XML解析-SAX解析

    昨天由于时间比较匆忙只写了Android中的XML解析的Dom方式,这种方式比较方便,很容易理解,最大的不足就是内容多的时候,会消耗内存.SAX(Simple API for XML)是一个解析速度快 ...

  4. Android中pull解析XML文件的简单使用

    首先,android中解析XML文件有三种方式,dom,sax,pull 这里先讲pull,稍候会说SAX和DOM pull是一种事件驱动的xml解析方式,不需要解析整个文档,返回的值是数值型,是推荐 ...

  5. Android中那些有你不知道的事

    在安卓开发中,总有那么一些看似简单,实则绊脚的难题,等你去探索,等你去解决,也许你已经遇见了解决了,也许你还没碰上,写下这篇总结,希望能帮助那行即将遇到的朋友,快速解决这些小问题! 一.activit ...

  6. Android中XML解析-PULL解析

    前面写了两篇XML解析的Dom和SAX方式,Dom比较符合思维方式,SAX事件驱动注重效率,除了这两种方式以外也可以使用Android内置的Pull解析器解析XML文件. Pull解析器的运行方式与 ...

  7. Android 中Json解析的几种框架(Gson、Jackson、FastJson、LoganSquare)使用与对比

    介绍 移动互联网产品与服务器端通信的数据格式,如果没有特殊的需求的话,一般选择使用JSON格式,Android系统也原生的提供了JSON解析的API,但是它的速度很慢,而且没有提供简介方便的接口来提高 ...

  8. Android中XML解析,保存的三种方法

    简单介绍 在Android开发中,关于XML解析有三种方式,各自是: SAX 基于事件的解析器.解析速度快.占用内存少.非常适合在Android移动设备中使用. DOM 在内存中以树形结构存放,因此检 ...

  9. Android中Context解析

    Context概念 当我们访问当前应用的资源,启动一个新的activity的时候都需要提供Context. Context是一个抽象基类,我们通过它访问当前包的资源(getResources.getA ...

随机推荐

  1. Java多线程由易到难

    线程可以驱动任务,因此你需要一种描述任务的方式,这可以由Runnable接口来提供.要想定义任务,只需实现Runnable接口并编写run方法,使得该任务可以执行你的命令. public class ...

  2. 设计模式-模板方法模式(Head First)

    参考书籍:Head First设计模式 什么是模板方法模式 定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 怎 ...

  3. IIFE(立即执行函数表达式)

    我们经常会看到这样的写法: ;(fuction () { // do something })() 这就是一个简单的IIFE(立即执行函数表达式,immediately-invoked functio ...

  4. 巧学DBhelper

    这几天在教我很重要的人学习,她属于那种超级小白,很超级的那种. 教她的过程中 发现有的知识点 不管这么教都不会.DBhelper就是不知道怎么记. 当时我就想到 杰哥(程杰)的出的大话系列,和他写书的 ...

  5. dSYM文件分析

    什么是 dSYM 文件 Xcode编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且每次编 ...

  6. ip地址与整数相互转换

    一.将ip地址转成long数值 将IP地址转化成整数的方法如下: 1.通过String的split方法按.分隔得到4个长度的数组 2.通过左移位操作(<<)给每一段的数字加权,第一段的权为 ...

  7. 学习爬虫的day03 (通过代理去爬去数据)

    代理的IP通过去网上找# -*- coding: utf-8 -*- import re import _thread from time import sleep, ctime from urlli ...

  8. Mybatis(一)实现单表的增删改查

    1.1 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...

  9. 前端构建工具之争——Webpack vs Gulp 谁会被拍死在沙滩上

    .table tr>td:nth-child(1){width: 2em !important;padding-left: .6rem !important;padding-right: .6r ...

  10. openstack Keystone验证服务集群

    #Keystone验证服务群集 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ##.Keystone验证服务集群 ...