Gradle 使用技巧(二) - SO/NDK过滤

引言

作为一个Android开发人员,so对于我们来讲是极其常见的,各种大厂的SDK中都包含着各种各样的so,而so也是apk瘦身的重要一环,减少so平台的数量,可以极大限度的减少apk的大小。

Android 中的so

先看一张官方的图:

img_732bf222876fb38652e77daad311b542.png
ABI

可以将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

  1. 在main目录下创建jniLibs文件夹,将相应的so库存放进去。
img_ab58652935f3b3fa624962fb5e4ce149.png
jinLibs
  1. 在相应的module下的gradle中进行配置
android{repositories {flatDir {dirs 'libs'}}
}

同步项目即可。

如何选择so

先不说原理,我们可以看看大厂是怎么做的。

先看看 TIM

img_c91e8296d1c9d3ac8bb59fac4826ea82.png
Tim

再看看淘宝

img_443ef97e4cd78886ce2d8fc42372e506.png
淘宝

从Tim和淘宝的apk包中可以看到,两个都只是保留了armeabi平台的lib,所以我们也可以直接参照大厂的做法只保留armeabi平台,其它的暂时可以不考虑,因为我们也做不到兼容全平台。

如何过滤

直接在gradle中配置即可

buildTypes{release{...ndk {abiFilters "armeabi" // 保留这种架构的CPU}...}
}
img_97838d0b0193599c06e5e66163d81749.png
过滤so

一般情况下是在打包的时候指定so,但是也有特殊情况,需要debug模式下过滤,同上,直接在debug中配置即可。

ndk {abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}

后续敬请期待!
免为其难的关注一下公众号吧!!

img_f0790f8ed7e67ea3b5a4d6bc3f65b0aa.png
生活实在是太苦啦
img_b246dc41a34e6fdd3598d113e0f65194.jpe
FullScreenDeveloper

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java两个数之间质数求法,求任意两个整数之间质数的个数的代码!!!(新手编写)...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*** Title:Calculate acount of prime number between preNum and rearNum;* Author: public* Time:2008.12.5 21:09:35*/import java.awt.*;import java.awt.event.*;class Arithmetic{//将计算质数个数的类封装在此类…

VMware——安装CentOS

VMware——安装CentOS 摘要:本文主要记录了在VMware虚拟机里安装CentOS的步骤。 下载操作系统 可以从下面的镜像地址去下载各种版本的CentOS,此次安装使用的版本是7.2: http://archive.kernel.org/centos-vault/ http://mirror.nsc.liu.se/ce…

django1.4.9 OMserverweb站点管理

1.项目setting.py配置: 2.项目url.py配置: 错误提示:auth_user这个表没有创建,那个因为,admin站点默认数据表需要迁移。执行python manage.py syncdb 会创建所有应用程序需要的数据库表4.接下来就是根据要求一步一步来&#xff1a…

matlab读取气象数据,基于MATLAB实现3种气象数据的读取和绘图

第 29卷第 4期 2007年 11月 广 东 气 象 GuangdongMeteorology Vol. 29  No. 4 November 2007 基于 MATLAB实现 3种气象数据的读取和绘图 刘  峰 , 刘  娟 , 李  萍 , 林  智 (民航中南空中交通管理局气象中心 ,广东广州  510406)   摘  要 :针对 M ICAPS、 GR IB和…

[USACO17JAN]Promotion Counting 题解

前言 巨佬说:要有线段树,结果蒟蒻打了一棵树状数组... 想想啊,奶牛都开公司当老板了,我还在这里码代码,太失败了。话说奶牛开个公司老板不应该是FarmerJohn吗? 题解 刚看到这道题的时候竟然没有想到深搜,然…

牛客小白月赛6 水题 求n!在m进制下末尾0的个数 数论

链接:https://www.nowcoder.com/acm/contest/135/C来源:牛客网 题目描述 其中,f(1)1;f(2)1;Z皇后的方案数:即在ZZ的棋盘上放置Z个皇后,使其互不攻击的方案数。 输入描述: 输入数据共一行,两个正整数x,m&am…

centos php7 apcu,centos php5.4 升级 php7

接上篇,edusoho需要php5.5以上版本,于是需要升级本地phpphp是通过yum默认安装的。以下安装参考 linkhttps://blog.csdn.net/u012569217/article/details/77506902因此先查看本地php版本php -v检查当前php的安装包yum list installed | grep php将本地php…

子类访问父类和方法覆写

子类不能直接访问父类的私有成员; 但是子类可以调用父类中的非私有方法来间接访问父类的私有成员。 Person类中有私有字段name,Student继承Person new Sudent().name; new Student().getName(); √ 子类拓展父类(子类是父类的一种特殊…

面向对象笔试题练习一

1.接口只能被类实现,类不能继承接口,遵循单继承多实现原则; 2.静态方法中不能引用其外部的非静态成员; 3.实现 Runnable 接口,接口中有一个抽象方法 run,实现类中重写该方法; 4.public修饰的方法…

curl 升级 php,将命令行cURL转换为PHP cURL

我从来没有做过任何卷曲,所以需要一些帮助。我试图从例子中解决这个问题,但无法理解它!我有一个curl命令,我可以从linux(ubuntu)命令行成功运行,该命令行通过api将文件放入wiki。我需要将这个curl命令合并到我正在构建…

VM-ESXI 相关常用命令(Updateing)

# ESXI计划任务路径:cat /var/spool/cron/crontabs/root # 获取虚拟机列表vim-cmd vmsvc/getallvms获取vm状态vim-cmd vmsvc/power.getstat [vmid]关闭虚机vim-cmd vmsvc/power.shutdown [vmid]vim-cmd vmsvc/power.off [vmid] # 强制关闭长期脚本存放路径 vi /etc/…

sql server中的go

1. 作用:向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号.2. 语法:一批 Transact-SQL 语句GO如Select 1Select 2Select 3GO3. 说明:1) GO 不是 Transact-SQL 语句;2) 它是 sqlcmd 和 osql 实用工具以及 SQL Server Management Studio 代码编辑器识别的…

java 图片缓存工具,java缓存读取图片解决方案

java缓存读取图片老师布置了任务&#xff0c;需要把数据库中的图片一缓存的形式读出&#xff0c;不要说什么数据库中路劲&#xff0c;图片整体较大&#xff0c;在给别人使用时不现实。关键代码&#xff1a;for(int i0;i<1;i){downloadDB(bi);pm[i]new paintimage(bi);}publi…

杭电Acm刷题顺序

第一阶段&#xff1a;开始入门吧&#xff01;&#xff08;15天&#xff0c;53题&#xff09; 一&#xff0e;输入输出练习&#xff08;2天&#xff0c;10题&#xff09; 1000、1089—1096、1001 二&#xff0e;简单操作&#xff1a;&#xff08;2—4天&#xff0c;12题&…

[Vue CLI 3] 源码系列之useTaobaoRegistry

通过下列方式可以安装最新版本的 Vue CLI&#xff08;注释&#xff1a;sudo 自行选择&#xff09; sudo npm install -g vue/cli然后通过下列命令创建项目&#xff1a; vue create demo这时候&#xff0c;会询问你是否使用 taobao 的 registry Your connection to the default …

python pcm,python pcm音频添加头转成Wav格式文件的方法

如下所示&#xff1a;add Head Infomation for pcm fileimport sysimport structimport os__author__ bob_hu, hewitt924gmail.com__date__ Dec 19,2011__update__ Dec 19,2011def geneHeadInfo(sampleRate,bits,sampleNum):生成头信息&#xff0c;需要采样率&#xff0c;每…

ajax 页面无刷新

<!-- 使用原生Ajax 和 $.ajax 实现局部刷新的过程 --><!-- 封装通用XMLHttpRequest对象 --><!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>创建XMLHttpRequest</title> <style&…

javascript字符串方法总结

javascript中常用的字符串方法 String 的静态方法 fromCharCode&#xff1a;使用指定的Unicode值序列创建字符串 String.fromCharCode(num1, ..., numN) fromCodePoint: 使用指定的代码点序列创建的字符串 String.fromCharCode(num1, ..., numN) **注意**: 以上两个方法都是S…

php larval开发规范,数据模型 |《 Laravel 项目开发规范 5.5》| Laravel China 社区

本文档最新版为 7.x&#xff0c;旧版本可能放弃维护&#xff0c;推荐阅读最新版&#xff01;放置位置所有的数据模型文件&#xff0c;都 必须 存放在&#xff1a;app/Models/ 文件夹中。命名空间&#xff1a;namespace App\Models;User.phpLaravel 5.1 默认安装会把 User 模型存…

课程总结

大一的我初次学习JAVA&#xff0c;尽管以前也有所了解过但是还是觉得有点难&#xff0c;这个和c语言相似但是又有很多的不同&#xff0c;比如关键字什么的&#xff0c;一个学期下来现在回望真的感觉学到的并不是很多&#xff0c;可能是我上课的时候喜欢分神吧&#xff0c;尽管在…