随着项目不断地完善,资源不断地增多,导致apk大小越来越大,编译以及安装等待时间越来越长,虽然对应用使用并没有影响,但是用户会越不愿意下载。还有特别是在使用移动网络的时候,用户更不会浪费流量去下载,所以我们得尽量缩小apk大小。

安装包主要由7部分组成:

assets:存放一些配置文件、资源文件,assets不会自动生成对应的 ID,而是通过 AssetManager 类的接口获取。
res: 是 resource 的缩写,这个目录存放资源文件,会自动生成对应的 ID 并映射到 .R 文件中,访问直接使用资源 ID。
AndroidManifest.xml:这个文件用来描述 Android 应用的配置信息,一些组件的注册信息、可使用权限等。
META-INF:保存应用的签名信息,签名信息可以验证 APK 文件的完整性。

resources.arsc:记录着资源文件和资源 ID 之间的映射关系,用来根据资源 ID 寻找资源。

classes.dex:Dalvik 字节码程序,让 Dalvik 虚拟机可执行,一般情况下,Android 应用在打包时通过 Android SDK 中的 dx 工具将 Java 字节码转换为 Dalvik 字节码。

lib:程序依赖的库,包含特定于处理器软件层的编译代码。该目录包含了每种平台的子目录,像armeabi,armeabi-v7a, arm64-v8a,x86,x86_64,和mips。

目前我的Apk大在3个方面

重复的第三方库(so.jar等)

assets文件太大(含有多余资源)

res太大(含有多余资源,资源图片太大)
解决办法

1.三方库优化

避免引用重复库以及清除冗余库。一般引用so库都需要适应各个so架构("armeabi-v7a", "x86", "arm64-v8a", "x86_64", "armeabi"),每个文件里都会放重复的so文件,当so文件一旦过大,占用的空间会很大。这就要考虑apk使用机型范围了,因为市面大多都是Android 5.0 -Android 7.1之间的系统,具备浮点运算的硬件指令集,所以直接用"armeabi-v7a"可以提高app的浮点运算性能,同时能兼容大多数安卓设备,如果机型不支持v7a那么就尽量把so替换成其他更小的so文件或者是自己重新编译。

2、res优化

移除无用的资源,可以手动删掉,也可以一键清除(不建议,容易误删出现动态id使用资源问题)

推荐使用lint检查, Android Lint Tool 是 Android Sutido 集成的一个代码规范提示工具,不仅让你及时发现代码种隐藏的一些问题,更能让你养成良好的代码风格。可以使用 Lint 检测代码、布局文件、去除多余资源。

  • 尽量使用统一一套资源,各个分辨率都一套资源太浪费。
  • 图片可以使用小点的图片或者 PNG优化工具(tinypng) 对图片做压缩处理,会使图片收缩50% - 70%,如果机型在4.0以上可以使用Webp,这样会更小。(使用方法:右键图片)
  • 尽量别使用帧动画,一个动画就十几张图片占用空间太大。
  • 背景能使用shape的就尽量别使用图片背景

3、assets优化 

这里面一般存的都是软件自带的一些配置文件,以及资源。如果是单机版不能连网的手机那这是不可避免的,只能尽量删除一下不必要的资源。如果能连网那么就不需要这个文件了,应该在第一次启动时网上下载配置文件,这样更方便。

4、插件化热修复

能连网的前提下,把功能模块以及资源放在服务器上,按需下载。

5、代码混淆

在build.gradle中使用minifyEnabled 混淆代码

buildTypes {release {// 源代码混淆开启minifyEnabled true}}

6、开启资源压缩

在build.gradle中使用shrinkResources压缩资源(据说会有bug,我目前还未遇到)。

buildTypes {release {// 启动资源压缩shrinkResources true}}

7、资源混淆和7zip压缩

资源混淆配合7zip压缩减小apk大小,并且增加了破解难度。

通过resoure.arsc文件格式混淆 步骤为:

  • 解析arsc文件(主要为全局与资源名字符串池)
  • 修改字符串池中,以无意义的abcd等代替
  • 修改apk中res目录资源文件名
  • 7zip打包对齐签名

Android APK瘦身相关推荐

  1. Android Apk瘦身指南大全

    Android Apk瘦身指南大全 前言 为什么Android应用Apk要瘦身?虽然安装包大小对应用使用没有影响,但应用的安装包越大,用户下载的门槛越高,安装等待时间也会越长,特别是在移动网络情况下, ...

  2. Android APK 瘦身

    Android APK 瘦身的几个方法 将项目中的图片由png.jpg转为webp格式.如下操作: 1.1选中图片或者含有图片的文件夹 右键选择Convert toWebP.. 1.2根据自身情况选择 ...

  3. Android apk瘦身之使用TinyPng压缩图片

    1 前言 Android apk太大了怎么办,有的时候需要减小apk的体积,例如上传到服务器的时候有文件大小的限制.百度一下,发现大致有以下几种方法: 使用混淆,减少代码体积 删除不使用的资源 减少使 ...

  4. Android apk瘦身讲解

    apk瘦身 想办法较减少apk大小 必要性 同样功能,apk越小越好,用户下载动机更大 了解apk的组成 classes.dex:是java源码编译后生成的java字节码文件 resources.ar ...

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

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

  6. android APK瘦身全面总结——如何从32.6M到13.6M

    前言 之前我简单介绍了关于svg图片瘦身的问题,在公司,瘦身这个问题是我提出来的,所以这锅我背了.公司项目是32.6M,我给自己的要求就是低于20M.上周花了一个星期瘦身,至于为什么花了一周,主要是s ...

  7. android apk瘦身方法

    参考文档:天之界线2010   http://www.jianshu.com/p/8f14679809b3 我们在新的android studio2.2中可以看到可以对apk 进行分析了: 我们从中可 ...

  8. Android Apk瘦身方案1——R.java文件常量内联

    R.java 文件结构 R.java 是自动生成的,它包含了应用内所有资源的名称到数值的映射关系.先创建一个最简单的工程,看看 R.java 文件的内容: R文件生成的目录为app/build/gen ...

  9. Android apk瘦身

    项目打包apk到达50M(加入高德地图和视频播放的SDK),之前打包才20M多.如何减少apk的大小: Android studio有个分析apk的功能,可以查看apk的结构 选择apk文件 可以看到 ...

最新文章

  1. Del.icio.us应用工具杂烩
  2. 初涉c#设计模式-proxy pattern-从中国足球黑哨开始
  3. Android程序如何实现从网络中获取一张图片
  4. Java DO到DTO转换利用spring 的BeanUtils.copyProperties
  5. 不会和容器一起启动_一起学习docker05-docker容器
  6. ASP.NET五大核心对象解析
  7. 父子进程共享内存通信的三种方法
  8. aop实现原理_Spring学习之AOP
  9. python中oserror winerror_python – OSError:[WinError87]参数不正确
  10. 用于检验手机号的位数以及检验此手机中是否为中国移动的手机号
  11. java阴阳师抽卡概率_《阴阳师》手游随机抽取类玩法概率公示
  12. 数据库文件放在服务器哪里,服务器上数据库文件存放位置
  13. 试验设计系列(一)| 样本量与功效(power)的计算
  14. Linux操作系统的性能将主要取决于,高校邦Linux操作系统安全与性能调优章节测试答案...
  15. 抖音测试小程序功能开发
  16. Arduino整型字符串互转
  17. Swift 类型的检査与转换(is,as,AnyObject,Any)
  18. 【Lawin Transformer2022】Lawin Transformer: Improving Semantic Segmentation Transformer with Multi-Sc
  19. FPGA资源类型简介
  20. 英汉小字典java_java 学习案例之英汉字典

热门文章

  1. C++ 实现堆(heap)
  2. 我是如何一步步被Asch征服的
  3. Linux目录结构与路径
  4. 简述div标签和span标签的不同_SPAN标签和DIV标签的区别
  5. 数据库题——高于部门平均工资查询问题
  6. 为复杂混沌的微服务生产环境设计韧性系统
  7. MyBatis主键回填和自定义主键
  8. 基于JAVA的宠物销售网站设计与实现
  9. 博途V16 与 FactoryIO的连接教程(详细版)
  10. 杰理之耳机底噪处理2【篇】