查看手机CPU架构:

$adb shell

$cat /proc/cpuinfo

OnePlus6:

AArch64 Processor rev 12 (aarch64)

➜ ~ adb shell

OnePlus6:/ $ cat /proc/cpuinfo

Processor : AArch64 Processor rev 12 (aarch64)

processor : 0

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x7

CPU part : 0x803

CPU revision : 12

processor : 1

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x7

CPU part : 0x803

CPU revision : 12

processor : 2

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x7

CPU part : 0x803

CPU revision : 12

processor : 3

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x7

CPU part : 0x803

CPU revision : 12

processor : 4

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x6

CPU part : 0x802

CPU revision : 13

processor : 5

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x6

CPU part : 0x802

CPU revision : 13

processor : 6

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x6

CPU part : 0x802

CPU revision : 13

processor : 7

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x6

CPU part : 0x802

CPU revision : 13

Hardware : Qualcomm Technologies, Inc SDM845

那么我的OnePlus6的CPU架构是ARM v8 64位

ARM v8 64

ARM v8 64

SO库

image.png

一种CPU架构 = 一种ABI = 一种对应的SO库;

加载SO库时,需要加载对应类型的SO库;

尽量提供全平台CPU类型的SO库支持;

SO库类型和CPU架构类型

现在至少支持以下七种不同的CPU架构:ARMv5,ARMv7,x86,MIPS,ARMv8,MIPS64和x86_64。每一种CPU类型都对应一种ABI(Application Binary Interface),“armeabi-v7a”文件夹前面的“armeabi”指的就是ARM这种类型的ABI,后面的“v7a”指的是ARMv7。这7种CPU类型对应的SO库的文件夹名是:armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64。

只提供armeabi架构的.so文件而忽略其他ABIs的

armeabi与armeabi-v7a表示支持不同的CPU类型

armeabi是指的该so库用于ARM的通用CPU,而v7a的CPU支持硬件浮点运算。因此armeabi通用性强,但速度慢,而v7a能充分发挥v7a CPU的能力,在AIR打包APK调试模式adobe选择的是通用性强的armeabi模式。

android支持不同CPU的深层含义

首先从硬件支持方便来看,我们的adnroid设备目前为止大部分都是支持ARM芯片,(当然市面上此刻最新的android机器还支持intel等另外的几个芯片,例如intel最新的凌动项目芯片,就获得了android4.1的青睐)。从android版本与支持ARM硬件编码的程度来看:

起初android1.6:只支持armv4与armv5te指令集。

到了android2.0:增加了支持arm-vfp,armv6,armv6t2指令集。

到了android2.2:增加支持armv7-a指令集。

所以armeabi-v7a 应该是与AIR限定支持android2.2以上的条件有关。android2.2以上能让硬件发挥更大的作用。

我项目中使用armeabi还是armeabi-v7a

对于AIR项目来说性能问题是最大的瓶颈,能优化一点就一点,所以如果接平台方SDK或者写ANE的时候使用到SO库,个人推荐全部放到armeabi-v7a下,而不要为了兼容放到armeabi

当你引入一个.so文件时,不止影响到CPU架构。我从其他开发者那里可以看到一系列常见的错误,其中最多的是"UnsatisfiedLinkError","dlopen: failed"以及其他类型的crash或者低下的性能:

所有的x86/x86_64/armeabi-v7a/arm64-v8a设备都支持armeabi架构的.so文件,因此似乎移除其他ABIs的.so文件是一个减少APK大小的好技巧。但事实上并不是:这不只影响到函数库的性能和兼容性。

x86设备能够很好的运行ARM类型函数库,但并不保证100%不发生crash,特别是对旧设备。64位设备(arm64-v8a, x86_64, mips64)能够运行32位的函数库,但是以32位模式运行,在64位平台上运行32位版本的ART和Android组件,将丢失专为64位优化过的性能(ART,webview,media等等)。

以减少APK包大小为由是一个错误的借口,因为你也可以选择在应用市场上传指定ABI版本的APK,生成不同ABI版本的APK可以在build.gradle中如下配置:

android {

...

splits {

abi {

enable true

reset()

include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' //select ABIs to build APKs for

universalApk true //generate an additional APK that contains all the ABIs

}

}

// map for the version code

project.ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'arm64-v8a': 3, 'mips': 5, 'mips64': 6, 'x86': 8, 'x86_64': 9]

android.applicationVariants.all { variant ->

// assign different version code for each output

variant.outputs.each { output ->

output.versionCodeOverride =

project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) * 1000000 + android.defaultConfig.versionCode

}

}

}

减少SO库体积的正确姿势

构建特定ABI支持的APK

从网络下载当前设备支持的SO库

android so文件的作用,Android SO库相关推荐

  1. android清单文件的作用,Android 清单文件

    每个Android项目都有一个清单文件. 例子 以下代码含有AndroidManifest.xml文件的示例:<?xml version="1.0" encoding=&qu ...

  2. android bp文件_Android 基础 | Android.bp 语法浅析

    相关推荐: 随着 android 工程越来越大,包含的 module 越来越多,以 makefile 组织的项目编译花费的时间越来越多.Google 在 7.0 引入了 ninja 是 Google ...

  3. android主要文件的作用是什么,androidmanifest.xml文件的作用是什么

    androidmanifest.xml文件的作用:1.是每个android程序中必须的文件,它位于整个项目的根目录:2.配置程序运行所必要的组件,权限,以及一些相关信息:3.是整个应用的入口,所以有助 ...

  4. android mkdirs 不起作用,Android mkdirs()创建一个零字节文件而不是文件夹

    在我的 Android应用程序中,我试图在SD卡上创建以下文件夹: /mnt/sdcard/OSGiComponents/admin/felix-cache/ 这是代码: File cacheDir ...

  5. [Android]Android布局文件中的android:id=@*属性使用方法汇总以及介绍

    由于项目需要进行Android开发,因此一边开发,一边查阅资料,一边总结了Android布局文件中android:id="@*"属性的使用方法汇总以及介绍.id资源的引用 andr ...

  6. android bp文件_理解Android.bp

    介绍Android最新的编译系统 一.简介 早期的Android系统都是采用Android.mk的配置来编译源码,从Android 7.0开始引入Android.bp.很明显Android.bp的出现 ...

  7. xamarin Android 开发 文件“obj\Debug\android\bin\packaged_resources”不存在

    严重性 代码 说明 项目 文件 行 禁止显示状态 错误 文件"obj\Debug\android\bin\packaged_resources"不存在. AndroidTest 各 ...

  8. android 读写文件 简书,Android 中的文件操作

    Android 文件操作 概述 Android 中的文件操作主要涉及到两个部分,一个是内部存储的读写,一个是外部存储的读写两者的主要区别如下表: 内部存储 外部存储 始终可用 它并非始终可用,因为用户 ...

  9. android手机文件储存地址,Android手机缓存的位置

    在Android手机里面,缓存的位置分为两类,一类是Internal Storage,即内部存储,另外一类是External Storage,即外部存储. 比较老的手机,有一个手机内部存储,还有一个S ...

最新文章

  1. “35岁才是一个程序员成熟的开始!”
  2. obj + mtl 格式说明
  3. python爬虫反爬 对方是如何丧心病狂的通过css_如何应对网站反爬虫策略?如何高效地爬大量数据?...
  4. pandas常用函数,个人常用的
  5. 服务器母鸡系统,母鸡云服务器
  6. create-react-app入门教程
  7. HDU 5306 线段树
  8. 《深入理解Nginx》 学习笔记(一)
  9. 编程语言为什么不能用中文
  10. 最强代码审查工具报告
  11. spring-boot2 + vue2+ element-ui2 + avue 通用架构 xijia-plus (兮家 plus)
  12. excel保存快捷键_Excel新手必备的5大技巧,看看你会几个?(附26个超实用快捷键)
  13. MATLAB绘制圆、椭圆、矩形等基本平面图形
  14. ubuntu-CPU频率调节
  15. linux服务器中毒挖矿,Linux服务器中挖矿病毒 二
  16. MySQL8.0.22安装及配置(超详细)
  17. 在PHP中使用Mockery进行测试驱动开发(TDD) - 上
  18. 分享Python简短代码,实现TXT转换MySQL文件。
  19. XCTF sherlock WP
  20. 很值得收藏的安卓开源控件库

热门文章

  1. 创业做B2B行业网站团队组建及投资总额预算
  2. php获取整个网页内容,PHP获取网页内容方法总结
  3. flink的mysql两阶段提交_flink 两阶段提交
  4. 计算机组成--SRAM和DRAM
  5. C++ 如何解析PDF文件格式?
  6. 【Linux】Linux下使用wget 命令下载JDK7的方法
  7. 复用技术和多址技术的区别
  8. MODBUS-RTU功能码2
  9. 网页打开速度的心理学
  10. PHP网页输入框中的换行与PHP读入的Excel换行的区别