Android按需打包多种ABI(cpu)架构的so文件库
来源:互联网 发布:蚁群算法公式解析 编辑:程序博客网 时间:2024/06/06 10:51
ABI 管理
大家先来看看Google官方对Android ABI管理的介绍:
不同 Android 手机使用不同的 CPU,因此支持不同的指令集。CPU 与指令集的每种组合都有其自己的应用二进制界面(或 ABI)。 ABI 可以非常精确地定义应用的机器代码在运行时如何与系统交互。 您必须为应用要使用的每个 CPU 架构指定 ABI。
典型的 ABI 包含以下信息:
- 机器代码应使用的 CPU 指令集。
- 运行时内存存储和加载的字节顺序。
- 可执行二进制文件(例如程序和共享库)的格式,以及它们支持的内容类型。
- 用于解析内容与系统之间数据的各种约定。这些约定包括对齐限制,以及系统如何使用堆栈和在调用函数时注册。
- 运行时可用于机器代码的函数符号列表 - 通常来自非常具体的库集。
本页枚举了 NDK 支持的 ABI,并且提供每个 ABI 如何运行的信息。
支持的 ABI
每个 ABI 支持一个或多个指令集。表 1 提供每个 ABI 支持的指令集概览。
armeabi
armeabi-v7a
arm64-v8a
x86
x86_64
mips
mips64
Android 平台 ABI 支持
Android 系统在运行时知道它支持哪些 ABI,因为版本特定的系统属性会指示:
- 设备的主要 ABI,与系统映像本身使用的机器代码对应。
- 可选的辅助 ABI,与系统映像也支持的另一个 ABI 对应。
此机制确保系统在安装时从软件包提取最佳机器代码。
为实现最佳性能,应直接针对主要 ABI 进行编译。例如,基于 ARMv5TE 的典型设备只会定义主要 ABI:armeabi
。 相反,基于 ARMv7 的典型设备将主要 ABI 定义为 armeabi-v7a
,而将辅助 ABI 定义为 armeabi
,因为它可以运行为每个 ABI 生成的应用原生二进制文件。
许多基于 x86 的设备也可运行 armeabi-v7a
和 armeabi
NDK 二进制文件。对于这些设备,主要 ABI 将是 x86
,辅助 ABI 是 armeabi-v7a
。
基于 MIPS 的典型设备只定义主要 ABI:mips
。
安装时自动解压缩原生代码
安装应用时,软件包管理器服务将扫描 APK,查找以下形式的任何共享库:
lib/<primary-abi>/lib<name>.so
如果未找到,并且您已定义辅助 ABI,该服务将扫描以下形式的共享库:
lib/<secondary-abi>/lib<name>.so
找到所需的库时,软件包管理器会将它们复制到应用的 data
目录 (data/data/<package_name>/lib/
) 下的 /lib/lib<name>.so
。
如果根本没有共享对象文件,应用也会构建并安装,但在运行时会崩溃。
问题所在
armeabi-v7a一种平台的库,这种方式很好解决,直接使用Google官方提供的方案打包即可,方法如下:
1.在项目application model的build.gradle添加如下节点
android {
splits {
abi {
enable true
reset()
include 'armeabi-v7a'
universalApk true
}
}
}
参数解析
我们要解决的问题就是:如何打包多个平台的so包到同一个apk中,我提供两种解决方案解决这个问题
第一种:
1.在项目application model的build.gradle添加如下节点
android {
defaultConfig {
ndk {
abiFilters 'armeabi' ,'armeabi-v7a'
}
}
}
然后在project的根目录(和local.properties同级)找到gradle.properties文本文件,
文件里面加入下面这行
android.useDeprecatedNdk=true
第二种:
1.在项目application model的build.gradle添加如下节点
android {
packagingOptions {
exclude 'lib/armeabi/**' //exclude 'lib/armeabi-v7a/**' exclude 'lib/arm64-v8a/**' exclude 'lib/mips/**' exclude 'lib/mips64/**' //exclude 'lib/x86/**' exclude 'lib/x86_64/**'
}
}
参数解析
- Android按需打包多种ABI(cpu)架构的so文件库
- ABI-CPU架构-.so库
- Android的.so文件、ABI和CPU的关系
- Android的.so文件、ABI和CPU的对应关系
- Android的.so文件、ABI和CPU的关系
- Android的.so文件、ABI和CPU的关系
- Android的.so文件、ABI和CPU的关系
- 关于Android的.so文件 CPU架构
- Android .so abi兼容,通用armeabi架构的方法
- Android cpu架构 so文件相关
- android cpu架构兼容 so文件找不到
- Android Studio指定引用jnilibs 特定CPU架构的so库文件
- Android:打包so文件
- Android ABI和CPU的问题
- Android Studio打包.so文件
- android studio so文件打包
- android 高德地图 和 fresco abi so 库冲突的问题。
- Android Native CPU ABI Management
- 【编程初学者】创建自己的开源项目5-在主分支上创建新分支(myeclipse+git)
- 基于Hadoop的好友推荐系统项目综述
- 专注服务,而非容器
- Android list按照时间排序的问题
- opencv中头文件详解
- Android按需打包多种ABI(cpu)架构的so文件库
- TCP报文段中的URG和PSH
- echarts:Uncaught TypeError: Cannot read property '0' of undefined 问题根源所在
- 关于angular中内置指令的介绍
- 纯干货,Spring-data-jpa详解,全方位介绍。
- linux之用route命令看简单路由信息
- 理解一下回调函数Callback Function
- 【案例分享】项目施工进度报告
- 安卓FragmentTabHost+Fragment+ViewPager+TabLayout仿今日头条