Android 瘦身之道 ---- so文件
Android 瘦身之道 ---- so文件
[TOC]
1. 前言
目前Android 瘦身只有几个方面可以入手,因为apk的结构就已经固定了。
- res 目录下的资源文件。(通常是压缩图片,比如 矢量图 --> webp --> png 等。)
- src 目录下的java文件。(通常是混淆,压缩等。)
- asset 目录下的资源文件。(类似 res 目录。)
- lib 目录下的第三方库。(gradle 依赖的其实也可以算到这个目录下,一般就是不要引用重复功能的第三方库等。)
- so库 (这个其实是很顽固的东西,你没法压缩它,如果没有用到还好,用到了它体积3MB就是 3MB 没有压缩的空间了,更要命的是通常还不止放一套!本文主要谈这个。)
关于 APK 瘦身,我觉得这篇文章总结的不错:Android-APP终极瘦身指南
2. ABI 的种类
官方的一张表格列举了常用的几种 CPU 架构。

3. 目前主流 APP 所用的 ABI 各是哪些
数据是 2017/4/8看的市场最新版,采集的几个代表性样本如下:
仅有 armeabi : 微博,今日头条,淘宝,QQ,微信。
armeabi 与 armeabi-v7a: UC 浏览器。
armeabi,armeabi-v7a,armeabi-x86:优酷,哔哩哔哩动画。
7种类型全有:知乎。

我也看了目前流行的游戏 王者荣耀(因为我只安装了它。。。哈哈),发现它仅有 armeabi-v7a。
4. ABI 兼容性
目前搜索的资料总结如下:
- armeabi-v7a :armeabi-v7a向下兼容armeabi
- arm64-v8a : 能兼容 armeabi-v7a 和 armeabi
- x86_64 : 兼容 x86
- mips64 : 兼容 mips
注意: 兼容只是理论上的,实际还是可能有极少数手机会崩溃,这是不可避免的。
5. 动态加载 so 文件
当你加上更多的支持架构之后,发现包体的增长已经影响了用户的下载意愿。广告的转化率提不上去啊,运营会找你麻烦的!
可能的一个解决方法是:分别发不同架构的包,让用户自己去选择(太傻了,而且用户哪有那么聪明)。
最好的方案还是动态下载 so 文件,发布的 APK 不包含 Native 代码,启动时根据不同的架构下载相应的 so 文件。
道理很简单,而且网上也有一堆堆的教程,我也不细说。需要注意的是一定要将下载的 so 文件放置在程序目录才可以 load,否则会遇到权限问题。
6. 总结
实际我们只需要保留 armeabi差不多就够了,更好的方案是动态的加载 so文件,已达到兼容性和apk文件大小的控制的目的。
Android 瘦身之道 ---- so文件的更多相关文章
- Android 瘦身之道
Android 瘦身之道 ---- so文件 [TOC] 1. 前言 目前Android 瘦身只有几个方面可以入手,因为apk的结构就已经固定了. res 目录下的资源文件.(通常是压缩图片,比如 矢 ...
- Android 瘦身攻略
http://www.jayfeng.com/2015/12/29/APK%E7%98%A6%E8%BA%AB%E5%AE%9E%E8%B7%B5/
- 如何给你的Android 安装文件(APK)瘦身
如何给你的Android 安装文件(APK)瘦身 本文翻译自:Putting Your APKs on Diet 原作者:Cyril Mottier Android的apk文件越来 ...
- 怎样给你的Android 安装文件(APK)瘦身
本文源地址:怎样给你的Android 安装文件(APK)瘦身 Android的apk文件越来越大了这已经是一个不争的事实. 在Android 还是最初版本号的时候,一个app的apk文件大小也还仅仅有 ...
- 性能优化7--App瘦身
1. 前言 如果你对App优化比较敏感,那么Apk安装包的大小就一定不会忽视.关于瘦身的原因,大概有以下几个方面: 对于用户来说,在功能差别不大的前提下,更小的Apk大小意味更少的流量消耗,也意味着更 ...
- Apk大瘦身
Android的apk文件越来越大了这已经是一个不争的事实.在Android 还是最初版本的时候,一个app的apk文件大小也还只有2 MB左右,到了现在,一个app的apk文件大小已经升级到10MB ...
- iOS代码瘦身实践
1 分析当前ipa的组成 一般一个ipa会包含: 1) 资源文件 本地文件:数据.配置.数据库等等 字体文件 图片资源 2) 源代码 通过生成linkmap文件,分析源代码生成的编译文件的大小.在B ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- Android APK瘦身之Android Studio Lint (代码审查)
******** ******** 第一部分: 瘦身内容介绍 ******** ******** 项目新版本的迭代接近尾声, 因为历史累积问题, 导致有很多无效的资源让已经臃肿的APK变得更肿, 因此 ...
随机推荐
- webpack从0开始---(一)
换了新环境,同时也有了新目标,从webpack开始. webpack:具体是什么,大家还是自行去看吧,这里就不多做介绍了! 传送门---webpack.github.io 网上的安装方法很多,这里我就 ...
- 《C#语言和数据库技术基础》单词必备
<C#语言和数据库技术基础> 第一章1..NET Framework 框架2.sharp 尖锐,强烈的3.application 应用程序4.devel ...
- 使用Spring构建RMI服务器和客户端
上一篇文章我们实用JDK原生API构造了简单RMI应用,本篇将实用Spring框架来构造RMI的应用,实用Spring你会体验到简单,不需要那么多的条条框框,因为Spring给你做了很多封装. 项目构 ...
- CentOs下安装PHP环境的步骤
前言 在CentOs环境下安装php开发环境,需要首先安装一些源文件,然后使用yum命令直接安装即可,在Fedora 20 源中已经有了PHP的源,直接可以使用以下命令安装即可: # yum inst ...
- Java面试系列
如果你的面试简历是如下这样写的,请务必准备回答下面的所有问题. 面试职位:Java高级工程师 专业技能: (1)牢固掌握Java基础知识,如集合.并发.I/O等,并对Java源码有一定的研究. (2) ...
- Reverse Words in a String leetcode
Given an input string, reverse the string word by word. For example,Given s = "the sky is blue& ...
- wemall app商城源码中基于JAVA通过Http请求获取json字符串的代码
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.分享其中关于通过Http请求获取json字符串的代码供 ...
- 自定义 Layout布局 UICollectionViewLayout
from: http://www.tuicool.com/articles/vuyIriN 当我们使用系统自带的UICollectionViewFlowLayout无法实现我们的布局时,我们就可以 ...
- Go语言并发机制初探
Go 语言相比Java等一个很大的优势就是可以方便地编写并发程序.Go 语言内置了 goroutine 机制,使用goroutine可以快速地开发并发程序, 更好的利用多核处理器资源.这篇文章学习 g ...
- 浅谈python 手机crash和app crash循环执行问题
----------------引子---------------- app自动化测试人员经常遇见的问题,第一:手机抛的异常导致脚本循环停止!!!!!!!!第二:app抛的异常导致脚本循环停止!!!! ...