Gradle 使用技巧(二) - SO/NDK过滤
引言
作为一个Android开发人员,so对于我们来讲是极其常见的,各种大厂的SDK中都包含着各种各样的so,而so也是apk瘦身的重要一环,减少so平台的数量,可以极大限度的减少apk的大小。
Android 中的so
先看一张官方的图:
可以将so分为以下几种:
- armeabi: ARM v5 这是相当老旧的一个版本,缺少对浮点数计算的硬件支持,在需要大量计算时有性能瓶颈
- armeabi-v7a: ARM v7 目前主流版本
- arm64-v8a: 64位支持
- mips / mips64 极少用于手机,可以直接忽略
- x86 / x86_64: x86 架构的手机都会包含由 Intel 提供的称为 Houdini 的指令集动态转码工具,实现对 arm .so 的兼容,再考虑 x86 1% 以下的市场占有率,x86 相关的两个 .so 也是可以忽略的
Android Studio中如何引用so
- 在main目录下创建jniLibs文件夹,将相应的so库存放进去。
- 在相应的module下的gradle中进行配置
android{ repositories { flatDir { dirs 'libs' } } }
同步项目即可。
如何选择so
先不说原理,我们可以看看大厂是怎么做的。
先看看 TIM
再看看淘宝
从Tim和淘宝的apk包中可以看到,两个都只是保留了armeabi平台的lib,所以我们也可以直接参照大厂的做法只保留armeabi平台,其它的暂时可以不考虑,因为我们也做不到兼容全平台。
如何过滤
直接在gradle中配置即可
buildTypes{ release{ ... ndk { abiFilters "armeabi" // 保留这种架构的CPU } ... } }
一般情况下是在打包的时候指定so,但是也有特殊情况,需要debug模式下过滤,同上,直接在debug中配置即可。
ndk { abiFilters "armeabi", "armeabi-v7a", "x86", "mips" }
后续敬请期待!
免为其难的关注一下公众号吧!!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
架构设计之「服务隔离」
我们在做系统架构设计的时候,经常离不开的一个话题就是进行服务的隔离设计。 那什么是「服务隔离」呢? 顾名思义,它是指将系统按照一定的原则划分为若干个服务模块,各个模块之间相对独立,无强依赖。当有故障发生时,能将问题和影响隔离在某个模块内部,而不扩散风险,不波及其它模块,不影响整体的系统服务。 其实隔离设计并非软件行业独创,它是借鉴于造船行业。 如上图,造船行业有一个专业术语叫做「舱壁隔离」。利用舱壁将不同的船舱隔离起来,如果某一个船舱进了水,那么就可以立即封闭舱门,形成舱壁隔离,只损失那一个船舱,其他船舱不受影响,整个船只还是可以正常航行。 一、为什么要做服务隔离设计呢? 我们在做系统设计的时候,必须有一个清楚的认知是:任何软件系统,故障是不可避免的,并且大多数还是不可预测的,因此,我们只能在系统的设计之初就充分的考虑好应对措施,如何在故障发生时,去尽最大可能的止损和减少故障范围。 没有人敢说他的系统是百分百可用,我们能做的就是,使用一切方法去减少故障的影响面,尽可能的去提高系统的整体可用率。 而把系统分离成子服务,将子服务进行一定程度隔离的做法,能保证在有不可预测的故障发生时,缩小故...
- 下一篇
胶囊网络到底是什么东东?
胶囊网络(CapsNets)是一种可能会对深度学习产生深远影响的热门新型神经网络结构,特别是在计算机视觉领域。那么问题来了:计算机视觉相关问题不是已经解决了吗?我们不是都已经见过卷积神经网络(CNNs)在各种计算机视觉任务(如分类、定位、目标检测、语义分割或实例分割)中达到超人水平的例子吗?(如图1) 图1:为一些主要的计算机视觉任务。如今,这些任务都需要一个非常不同的卷积神经网络(CNN)架构,例如用于分类的残差网络(ResNet)、用于目标检测的目标检测系统(YOLO)、用于实例分割的Mask R-CNN等等。 我们已经了解了卷积神经网络,但是:卷积神经网络要在大量的图像上进行训练(或者它们重复使用了神经网络的一部分),而胶囊网络可以很好地推广使用更少的训练数据。 卷积神经网络不能很好地处理模糊性,胶囊网络却可以,甚至可以在拥挤的场
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- Mario游戏-低调大师作品
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS关闭SELinux安全模块