转自:http://blog.csdn.net/justfwd/article/details/49308199

现在很多android第三方 sdk是以aar形式提供的,甚至是远程aar,如果这个sdk对abi的支持比较全,可能会包含armeabi, armeabi-v7a,x86, arm64-v8a,x86_64五种abi,而你应用的其它so只支持armeabi,armeabi-v7a,x86三种,直接引用sdk的aar,会自动编译出支持5种abi的包。

但是应用的其它so缺少对其它两种abi的支持,那么如果应用运行于arm64-v8a,x86_64为首选abi的设备上时,就会CRASH

怎么解决这个问题?其实arm64-v8a,x86_64这两个abi应用并不是必须要做支持,手机一般都会提供自动兼容,像微信就是一个armeabi打天下。

所以我们只要把对x86, arm64-v8a,x86_64的支持去掉就可以。怎么去呢,之前想了一个比较笨的办法,就是写个脚本直接把lib目录下对应的abi文件夹删掉再重新签名。

后来找到两个更方便的办法

一、需要在build.gradle的android里添加如下内容:

  1. productFlavors {
  2. necess {
  3. ndk {
  4. abiFilters "armeabi-v7a"
  5. abiFilters "x86"
  6. abiFilters "armeabi"
  7. }
  8. }
  9. abiall {
  10. ndk {
  11. abiFilters "armeabi-v7a"
  12. abiFilters "x86"
  13. abiFilters "armeabi"
  14. abiFilters "arm64-v8a"
  15. abiFilters "x86_64"
  16. }
  17. }
  18. }

生成apk的界面如下图:

会分别生成app-abiall-release.apk和app-necess-release.apk

如果本来有做渠道包支持,只要添加对应的ndk.abiFilters即可,原理就是设置不同的渠道包指定不同的指令集

二、使用全局设置,这种方法对一般需求来说可能更为实用

build.gradle的android里的defaultConfig内添加如下内容:

  1. defaultConfig {
  2. ndk {
  3. abiFilters "armeabi", "armeabi-v7a", "x86"
  4. }
  5. }

然后所有渠道包都会顶多包含此三种指令集

让APK只包含指定的ABI(转)的更多相关文章

  1. 如何写.gitignore只包含指定的文件扩展名

    # .gitignore # 首先忽略所有的文件 * # 但是不忽略目录 !*/ # 忽略一些指定的目录名 ut/ # 不忽略下面指定的文件类型 !*.c++ !*.cc !*.cp !*.cpp ! ...

  2. C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点

    C#反射实现   一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...

  3. pandas删除包含指定内容的行

    Outline 处理数据时,遇到文件中包含一些不需要的数据(行),需要把这些不符合要求的行给删除掉. 例如:该数据中应该都是2000年的数据,但是包含了一些2001年的数据,所以需要把2001年的数据 ...

  4. 使用 grep 查找所有包含指定文本的文件

    目标:本文提供一些关于如何搜索出指定目录或整个文件系统中那些包含指定单词或字符串的文件. 难度:容易 约定: # - 需要使用 root 权限来执行指定命令,可以直接使用 root 用户来执行也可以使 ...

  5. fiddler filters 使用(fiddler只显示指定请求,fiddler不显示指定请求,即filter请求过滤)(转)

    fiddler filters 使用(fiddler只显示指定请求,fiddler不显示指定请求,即filter请求过滤) Fiddler 有一个filters可以很好的帮助我们只显示我们关系的请求或 ...

  6. Vim 删除不包含指定字符串的行及统计匹配个数

    Vim 删除不包含指定字符串的行及统计匹配个数 转载▼     Help :g/pattern/d 是找到pattern, 删之 :v/pattern/d 是找到非pattern, 删之 :%s/xx ...

  7. [转帖]linux下查找文件及查找包含指定内容的文件常用命令。

    linux下查找文件及查找包含指定内容的文件常用命令. https://blog.csdn.net/yangyu19910407/article/details/18266821 最简单的查找 fin ...

  8. 可视化查询(sp_helptext)——快速查询包含指定字符串的存储过程(附源码)

    前言 在开发中,随着业务逻辑的调整,修改存储过程是必不可免的. 那怎么定位到需要修改的存储过程呢?一个一个的点开查询?存储过程少的话还行,一旦存储过程过多,这样是很浪费时间的,一个不注意还会遗漏掉. ...

  9. 51Nod 1010 只包含因子2 3 5的数 Label:None

    K的因子中只包含2 3 5.满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15. 所有这样的K组成了一个序列S,现在给出一个数n,求S中 >= 给定数的最小的数. 例如:n = ...

随机推荐

  1. windows server 2012 R2修改默认远程端口

    因客户现场网络复杂,将windows系统的默认远程端口3389归入安全策略中,所以服务器需要修改此端口,配置如下: 首先:登录操作系统,win+R调出运行菜单后输入regedit, 进入注册表编辑相关 ...

  2. 一次CTS引发的网络故障

    接到业务部门通知,A机房(库a)到B机房(库b)之间的数据库服务器之间的网络带宽异常突增,影响公司对外业务的整体带宽.一接到通知,作为数据库管理对所涉及的IP还是比较敏感.第一反应就是可能当时主库产生 ...

  3. 在Tomcat中配置404自定义错误页面详解

    这篇文章主要介绍了在Tomcat中配置404自定义错误页面全解,需要的朋友可以参考下 一直使用tomcat,今天想到一个问题,自定义404错误页面, 为了获得很好的用户感受,是不应当向用户暴露404这 ...

  4. jenkins连接gitlab,提示returned status code 128,附解决办法

    在项目中配置git仓库地址,报无权限 Failed to connect to repository : Command "D:\Program Files\Git\mingw64\bin\ ...

  5. sqlserver数据导入问题:报错“对COM组件的调用返回了错误HRESULT E_FAIL”

    SQL server 2008,导出了两个sql文件. 打开第一个文件,没有问题,建好相应的数据库,运行脚本,即可导入. 第二个文件却遇到问题,始终报错“对COM组件的调用返回了错误HRESULT E ...

  6. Ubuntu更新完NVIDIA驱动后,重启电脑进入不了系统,一直处于登录界面

    如题描述,我的系统是Ubuntu16.04,安装caffe的过程将一些驱动更新了,后来重启电脑时发现我进入不了系统了,输入我的登录密码会发现屏幕一闪,然后又重新跳回到登录界面,就是进入了login l ...

  7. boost string algorithm

    The Boost.StringAlgorithms library provides many free-standing functions for string manipulation. 1. ...

  8. Linux指定用户运行程序

    参考:http://blog.useasp.net/archive/2015/07/29/run-command-as-different-user-on-linux.aspx 在实际中,我们有时候想 ...

  9. java的继承 和super关键字 构造器

    面向对象的特性二继承: 继承的好处: 1.减少代码的冗余.提高了代码的复用性 2.便于功能的扩展 3.为之后多态的使用,提供了前提 继承的格式: class A extends B{} A:子类.派生 ...

  10. 实验吧关于隐写术的writeUp(一)

    0x01 Spamcarver 原题链接 http://www.shiyanbar.com/ctf/2002 1.用Hex workshop打开图片,图片的开头是 FF D8 ,这是jpeg格式的文件 ...