Android 瘦身之道 ---- so文件

[TOC]

1. 前言

目前Android 瘦身只有几个方面可以入手,因为apk的结构就已经固定了。

  1. res 目录下的资源文件。(通常是压缩图片,比如 矢量图 --> webp --> png 等。)
  2. src 目录下的java文件。(通常是混淆,压缩等。)
  3. asset 目录下的资源文件。(类似 res 目录。)
  4. lib 目录下的第三方库。(gradle 依赖的其实也可以算到这个目录下,一般就是不要引用重复功能的第三方库等。)
  5. 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 瘦身之道的更多相关文章

  1. Android 瘦身之道 ---- so文件

    Android 瘦身之道 ---- so文件 [TOC] 1. 前言 目前Android 瘦身只有几个方面可以入手,因为apk的结构就已经固定了. res 目录下的资源文件.(通常是压缩图片,比如 矢 ...

  2. Android 瘦身攻略

    http://www.jayfeng.com/2015/12/29/APK%E7%98%A6%E8%BA%AB%E5%AE%9E%E8%B7%B5/

  3. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  4. Android APK瘦身之Android Studio Lint (代码审查)

    ******** ******** 第一部分: 瘦身内容介绍 ******** ******** 项目新版本的迭代接近尾声, 因为历史累积问题, 导致有很多无效的资源让已经臃肿的APK变得更肿, 因此 ...

  5. 利用 Android Gradle 瘦身 apk

    http://devyang.me/blog/2014/11/11/li-yong-android-gradleshou-shen-apk/ apk瘦身一般有两条线, 去除无用的代码,例如引用一个比较 ...

  6. 如何给你的Android 安装文件(APK)瘦身

    如何给你的Android 安装文件(APK)瘦身 本文翻译自:Putting Your APKs on Diet           原作者:Cyril Mottier Android的apk文件越来 ...

  7. Android APK 瘦身 - JOOX Music项目实战

    导语 JOOX Music是腾讯海外布局的一个音乐产品,2014年发布以来已经成为5个国家和地区排名第一的音乐App.东南亚是JOOX Music的主要发行地区,由于JOOX Music所面对的市场存 ...

  8. 包建强的培训课程(6):Android App瘦身优化

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  9. Android Studio 之 项目瘦身、代码检查

    项目瘦身, 一.删除没有用到的资源(图片,string 等等) 先看怎么样找到没有用到的资源,注意:注释掉的 也属于没有用到的. 1.进行代码分析操作 2.查看分析结果 3.选择 Unused res ...

随机推荐

  1. hydra 中文文档

    hydra(九头蛇)是一款开源的协议爆破工具,功能十分强大!!! 具体使用如下: -R   继续从上一次进度接着破解 -I 忽略已破解的文件进行破解 -S 采用SSL链接 -s 端口 指定非默认服务端 ...

  2. 关于 QObject 类

    1.QObject类   简述 QObject类是所有Qt对象的基类. QObject是Qt对象模型的核心. 该模型的核心特征是称为信号和槽的对象通信机制. 您可以使用connect()将信号连接到槽 ...

  3. Html5怎么导出图片

    其实很简单, 首先需要两个js文件 jquery.min.js html2canvas.js 直接上代码,几行就解决了 <a id="example1" onclick=&q ...

  4. tomcat BIO 、NIO 、AIO

    11.11活动当天,服务器负载过大,导致部分页面出现了不可访问的状态.那后来主管就要求调优了,下面是tomcat bio.nio.apr模式以及后来自己测试的一些性能结果. 原理方面的资料都是从网上找 ...

  5. java获取本地计算机MAC地址

    java获取本地计算机MAC地址代码如下: public class SocketMac { //将读取的计算机MAC地址字节转化为字符串 public static String transByte ...

  6. rootfs注册挂载过程分析

    参考:Linux Filesystem: 解析 Linux 中的 VFS 文件系统机制 主要代码, init_rootfs(); init_mount_tree(); 1.init_rootfs()解 ...

  7. PHP-redis命令之 字符串 (strings)

    一.string (字符串) 1.set:设置键 $reids->set('mykey',111); 2.get:获取键 $redis->get('mykey'); 3.del:删除键 $ ...

  8. 算法学习记录-排序——冒泡排序(Bubble Sort)

    冒泡排序应该是最常用的排序方法,我接触的第一个排序算法就是冒泡,老师也经常那这个做例子. 冒泡排序是一种交换排序, 基本思想: 通过两两比较相邻的记录,若反序则交换,知道没有反序的记录为止. 例子: ...

  9. OSPF 提升 一 ----基础

    ospf  ccnp内容   一  link-state protocols      IGP   开放式的最短路径优先协议     公有协议 支持中到大型的网络    spf算法 链路状态协议 1. ...

  10. linux 第五部分 系统管理员 网络设定与备份

    linux 第五部分 系统管理员   网络设定与备份 系统基本设置   1.网络的设置  手动设置与dhcp自动获得     以及更改主机名称 centos 7   对网卡编号的规则 enol1  b ...