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

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

引言

作为一个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
目录
相关文章
|
API 开发工具 Android开发
Gradle 系列(5)一键检索未适配 64 位架构的 so 文件
Gradle 系列(5)一键检索未适配 64 位架构的 so 文件
428 0
Gradle 系列(5)一键检索未适配 64 位架构的 so 文件
|
Android开发 C++ Java
JNI学习笔记之AS+ndk+gradle自动编译出so并集成流程
上一篇的方法完全是我们手动编译并拷来拷去集成so库的,这样会很麻烦,但对初学者来说就应该这样一步一步前进,混合编程本来就是个很复杂的流程,我觉得这样把每个流程分开来学习是最好的。
1332 0
Gradle脚本打包so库
要让引用的第三方的so库被打包进去,只需要把相关的armeabi文件夹放在libs下面,然后在builld.gradle脚本中加上这一句: sourceSets{ main { jniLibs.srcDirs 'libs' } } 这样就可以把so文件也打包进去了。
1249 0
|
人工智能 移动开发 Java
Android Studio插件版本与Gradle 版本对应关系
Android Studio插件版本与Gradle 版本对应关系
2374 0
Android Studio插件版本与Gradle 版本对应关系
|
存储 Java Android开发
Android 开发 - 充分利用Gradle
Android 开发 - 充分利用Gradle
172 2
|
1月前
|
Android开发
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况
|
1月前
|
Android开发
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
|
5月前
|
C# Android开发 开发者
Android gradle编译时字节码处理
Android gradle编译时字节码处理
72 1
|
5月前
|
Android开发
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
284 0
|
6月前
|
Java 测试技术 Android开发
Android Gradle 干货,看这篇文章就行了
Android Gradle 干货,看这篇文章就行了