Android性能优化系列——APK包优化

news2024/10/7 16:26:36

业务功能开发完之后,就需要对App打包了。

有时候明明功能不多,但是包体很大,一是影响上架,二是就几个功能但是很大心里会膈应,于是包体有时候也需要进行优化。同类型的竞品只要40m,你要200M,那我肯定愿意先试试40M的。

Android应用程序包(英语:Android application package,APK)是Android操作系统使用的一种应用程序包文件格式,用于分发和安装移动应用及中间件。一个Android应用程序的代码想要在Android设备上运行,必须先进行编译,然后被打包成为一个被Android系统所能识别的文件才可以被运行,而这种能被Android系统识别并运行的文件格式便是“APK”。 一个APK文件内包含被编译的代码文件(.dex 文件),文件资源(resources), assets,证书(certificates),和清单文件(manifest file)。、

包体分析

在Android Studio工具栏里,打开build–>Analyze APK, 选择要分析的APK包。

优化方法:

1.干掉不需要的文件

有些图片或者资源、代码在实际运用中其实可能并没有用到,这时候可以把他给删除掉,IDE会把未使用到的区块灰色展示,也可以通过lint工具来帮助我们识别到。这个功能在menu中的Analyze的`Run inpection by name`输入`unused xx`。甚至是在编译过程中,我们也可以通过混淆配置来做到,比方说常见的Log删除。(tips:删除代码记得有些代码通过反射获取的,不要删除)

2.此外一些没用到的依赖库也可以给干掉

3.资源优化

图片在App应用中会大量的使用到,尤其一些图片还特别的大。

  • 我们可以选择体积更小的图片,比方说webp格式。要注意的是,webp在4.3以下有一些兼容问题,选择需谨慎。而对于png也可以采用有损或无损压缩图片,常见工具有tinypng或imageoptim等。经常png会有一些空白边距,这些部分也可以删除掉,通过代码或xml来实现边距。
  • 小的icon也可以使用svg格式。一些特定效果也可以通过XML自定义实现。新手常常有个误区,就是做.9图片的原图依旧很大,既然已经让程序帮我们拉伸了,原图实际上可以保持很小的体积。
  • 经常在适配屏幕时,开发会使用多套图片。实际上大部分时候一套图片就可以搞定了,系统会自动帮我们处理图片缩放。
  • 而在适配不同API时,打包过程也会自动生成多个目录。适当选择最低API格式有好处的,更高版本意味着开发效率更高,同时兼容设备变少,需要同业务一起考虑。
  • 打包过程也会生成一个resource.arsc文件,里面是资源ID的映射关系。这个部分也可以通过混淆资源id来优化,可以有效减少体积。
  • 最后同样的,不需要的资源一定要删掉。同样使用lint工具可以帮我们自动删除。模块化也需要当心不同模块出现同样的图片。
  • 删除无用的语言资源;在app的build.gradle下配置(很多时候其实用不到多语言配置)
    •     android {
              defaultConfig {
                  resConfigs "zh"
              }
          }
      

4.SO文件优化

在使用了SO库的时候优先保留v7版本的SO库,删掉其他版本的SO库。原因是在2018年,v7版本的SO库可以满足市面上绝大多数的要求,可能八九年前的手机满足不了,但我们也没必要去适配老掉牙的手机。实际开发中减少apk体积的效果是十分显著的,如果你使用了很多SO库,比方说一个版本的SO库一共10M,那么只保留v7版本,删掉armeabi和v8版本的SO库,一共可以减少20M的体积。当然,测试的时候,记得使用不同的手机进行测试仪检测是否能正常使用。

5.assets资源优化

(1)音频文件最好使用有损压缩的格式,比如采用opus、mp3等格式,但是最好不要使用无损压缩的音乐格式

(2)对ttf字体文件压缩,可以采用FontCreator工具只提取出你需要的文字。比如在做日期显示时,其实只需要数字字体,但是使用原有的字体库可能需要10MB大小,如果只是把你需要的字体提取出来生成的字体文件只有10KB

6.其余常见优化

  • 使用proGuard 代码混淆器工具,它包括压缩、优化、混淆等功能。

    • android {
          buildTypes {
              release {
                  minifyEnabled true
                  shrinkResources true
              }
          }
      }
      

      tips:

    • 为什么代码混淆可以让apk变小?

      1)可以删除注释和不用的代码。
      2)将java文件名改成短名
      3)将方法名改成短名

  • 插件化开发

  • 热更新等等,可将功能模块放服务器,需要用时再加载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1368272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

性能分析与调优: Linux 内存观测工具

目录 一、实验 1.环境 2.vmstat 3.PSI 4.swapon 5.sar 6.slabtop 7.numstat 8.ps 9.top 10.pmap 11.perf 12.bpftrace 二、问题 1.接口读写报错 2.slabtop如何安装 3.numactl如何安装 4.numad启动服务与关闭NUMA 5. perf如何安装 6. kernel-lt-doc与kern…

【卡梅德生物】稳定细胞系构建的原理及流程

稳定细胞株构建的基本原理: 首先改造原始细胞基因组,通过基基因编辑工具,使改造后的细胞拥有某些特定表型,并经过抗性筛选或其他筛选方法,使其表型能够长期稳定传代。 构建稳定细胞株的实验流程: 首先将外源…

外贸企业建站步骤有哪些?海洋建站怎么做?

外贸企业建站平台推荐?做外贸如何搭建贸易网站? 外贸企业要想在激烈的市场竞争中立于不败之地,建立一个专业而吸引人的网站是至关重要的一环。海洋建站将深入探讨外贸企业建站的关键步骤,为您提供一个清晰的指南,助您…

Spring - 配置支持多数据源

目录 SpringBoot整合多数据源整合步骤具体整合步骤如下:1、在application.properties中配置出多个数据源2、在代码中创建出mapper目录,在mapper目录下创建出不同数据源的目录创建出目录MySQL数据源的MapperSQL Server数据源的Mapper 3、创建config packa…

(N-138)基于springboot,vue在线教育平台

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis-plusredis…

vue3 封裝一个常用固定按钮组件(添加、上传、下载、删除)

效果图 这个组件只有四个按钮&#xff0c;添加&#xff0c;上传、下载、删除&#xff0c;其中删除按钮的颜色默认是灰色&#xff0c;当表格有数据选中时再变成红色 实现 组件代码 <script lang"ts" setup> import { Icon } from /components/Icon/index im…

web提示框属性的运用

效果展示&#xff1a; 注意事项&#xff1a; 引用JQuery文件地址和图片地址要更换一下。提示框属性的宽应该和图片的宽保持一致。 html/css/javascript页面代码&#xff1a; <!doctype html> <html> <head> <meta charset"utf-8"> <tit…

选择排序!!!基础排序详解 C语言版

目录 1.什么是选择排序 2.选择排序源代码 3.优化代码 1.什么是选择排序 这是一个选择排序的流程图&#xff0c;其实很简单&#xff0c;就是每次挑选数字中最小的作为第一个 &#xff0c;直到整个数据有序就结束了 顾名思义&#xff0c;选择&#xff0c;那就是选取&#xff0c…

【conda】conda 版本控制和环境迁移/安装conda加速工具mamba /conda常用指令/Anaconda配置

【conda】安装conda加速工具mamba /conda常用指令/Anaconda配置 0. conda 版本控制和环境迁移1. 安装conda加速工具mamba2. conda install version3. [Anaconda 镜像](https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/)使用帮助4. error deal 0. conda 版本控制和环境迁移…

Qt - QML框架

文章目录 1 . 前言2 . 框架生成3 . 框架解析3.1 qml.pro解析3.2 main.cpp解析3.3 main.qml解析 4 . 总结 【极客技术传送门】 : https://blog.csdn.net/Engineer_LU/article/details/135149485 1 . 前言 什么是QML&#xff1f; QML是一种用户界面规范和编程语言。它允许开发人员…

LiveGBS流媒体平台GB/T28181功能-操作日志如何配置保留天数过滤记录的日志根据操作名称过滤记录日志

LiveGBS功能操作日志菜单如何配置保留天数过滤记录的日志根据操作名称过滤记录日志 1、操作日志2、配置保留天数3、配置不记录操作日志3.1、不记录所有3.2、不记录指定操作名称 4、相关问题4.1、级联操作日志筛选 5、搭建GB28181视频直播平台 1、操作日志 LiveGBS操作日志菜单…

裁员+失恋或许不能比这更遭了,敬一塌糊涂与充满感动的2023,也敬曾经的挚爱与寒冬的冰霜

~ 随机抽取评论区的 3位 小伙伴送上精美礼品 ~ 参与方式&#xff1a;关注、点赞、收藏&#xff0c;评论 "2024&#xff0c;一天当做两天卷&#xff01;" 活动时间&#xff1a;截止到 2024-01-21 00:00:00 礼品清单&#xff1a;CSDN活动周边、自选图书 本文目录 序 …

1.2 Hadoop概述

小肥柴的Hadoop之旅 1.2 Hadoop概述 目录1.2 Hadoop概述1.2.1 回归问题1.2.2 Google的三篇论文1.2.3 Hadoop的诞生过程1.2.4 Hadoop特点简介 参考文献和资料 ) 目录 1.2 Hadoop概述 1.2.1 回归问题 通过前一篇帖子的介绍&#xff0c;特别是问题思考部分的说明&#xff0c;我…

java SSM社区文化服务管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM社区文化服务管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的 源代码和数据库&#xff0c;系统主…

二进制部署

HOST HostnameIP地址flannedAPPmaster192.169.116.10ETCD\APIserver\Scheduler\Controller-Managernode1192.168.116.11172.17.28.0ETCD,Flanned,Kubelet,kube-proxynode2192.168.116.12172.17.26.0ETCD,Flanned,Kubelet,kube-proxy Kubernetes社区 Kubernetes文档 ETCD mas…

2024年如何使用WordPress构建克隆Udemy市场

您想创建像 Udemy 这样的学习管理 (LMS) 网站吗&#xff1f;最好的学习管理系统工具LifterLMS将帮助您制作像Udemy市场这样的 LMS 网站。 目录 Udemy市场是什么&#xff1f; 创建 Udemy 克隆所需的几项强制性技术&#xff1a; 步骤 1) 注册您的域名 步骤 2) 获取虚拟主…

Unity中URP下开启和使用深度图

文章目录 前言一、在Unity中打开URP下的深度图二、在Shader中开启深度图1、使用不透明渲染队列才可以使用深度图2、半透明渲染队列深度图就会关闭 三、URP深度图 和 BRP深度图的区别四、在Shader中&#xff0c;使用深度图1、定义纹理和采样器2、在片元着色器对深度图采样并且输…

十、HTML 样式- CSS

CSS (Cascading Style Sheets) 用于渲染HTML元素标签的样式。 一、实例 1、HTML使用样式 本例演示如何使用添加到 <head> 部分的样式信息对 HTML 进行格式化。 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>HTM…

共享WiFi项目怎么样,靠谱吗?业内专家为你解答

共享WiFi项目自问世以来&#xff0c;就备受关注&#xff0c;有人质疑它的可靠性&#xff0c;也有人对其充满信心。今天&#xff0c;我们就来聊聊共享WiFi项目怎么样&#xff0c;是否靠谱。 我们要明白共享WiFi项目是什么。共享WiFi项目是一种基于互联网的共享商业模式&#xf…

二叉树题目:好叶子结点对的数量

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;好叶子结点对的数量 出处&#xff1a;1530. 好叶子结点对的数量 难度 6 级 题目描述 要求 给定二叉树的根结点 root \texttt{root} root 和整数 …