Android APK体积优化指南:清理项目,打造更小的APK、更快的构建速度和更好的开发体验

Android APK体积优化指南:清理项目,打造更小的APK、更快的构建速度和更好的开发体验

在任何软件项目中,开发是一个持续的过程,随着时间的推移,代码库会变得越来越复杂。这种复杂性可能导致构建时间变慢、APK体积变大,以及开发体验变得不那么高效。在本指南中,我们将介绍一些保持您的Android项目清洁高效的实践方法。

1. 移除未使用的资源

减小APK大小的最简单方法之一就是移除未使用的资源。这些资源很容易被忽视,并且随着时间的推移会逐渐累积。如果您想从项目中移除所有未使用的资源,可以使用Android Studio菜单中的"Refactor > Remove Unused Resources"。

这将查找并删除项目中的所有未使用资源。例如,如果您有一个未使用的drawable像这样:

您可以通过使用Android Studio菜单中的"Refactor > Remove Unused Resources"来删除它。

另一种移除未使用资源的方法是在您的build.gradle文件中使用shrinkResources。这不会实际从项目中删除资源,但会在构建APK时将其移除。让我们看一个如何在build.gradle文件中使用shrinkResources的示例:

buildTypes {release {isMinifyEnabled = trueisShrinkResources = trueproguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")}debug {isMinifyEnabled = falseisShrinkResources = falseproguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")}
}

然后创建一个不使用shrinkResources的APK并进行分析。

在这里,您可以看到APK大小的一大部分是由我们添加的大图像引起的。现在让我们将shrinkResources添加到我们的build.gradle文件中,再次创建一个APK:

buildTypes {release {isMinifyEnabled = trueisShrinkResources = trueproguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")}debug {isMinifyEnabled = trueisShrinkResources = trueproguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")}
}

在这里,您可以看到通过使用shrinkResources大幅减小了APK大小。

注意:不要忘记R8也可以帮助缩小应用程序大小。不是用于移除未使用资源,而是用于移除未使用的代码。

另一种移除、事实上查找未使用资源的方法是使用lint。请记住,lint是一个静态代码分析工具,用于检查您的Android项目中潜在的错误和优化改进。它还会找到未使用的资源并在lint报告的“未使用资源”部分显示出来。

您可以通过在终端中运行以下命令生成一个lint报告:

./gradlew lint

运行此命令后,lint将生成一个报告,您可以在“未使用资源”部分中看到未使用的资源。但请记住,是否移除它们取决于您,lint只是展示未使用的资源。

2. 移除未使用的代码

移除未使用的代码是减小APK大小的另一种方法。虽然不如移除未使用资源有效,但仍然可以帮助。至少,这将使您的代码库更加清洁且更易于维护。

为了找到未使用的代码,主要包括未使用的类、方法和字段,您可以通过Android Studio菜单中的"Analyze > Run Inspection by Name > Unused Symbol"来检测它们。

这将查找项目中的未使用代码并在弹出窗口中显示出来。在那里,您可以看到未使用的代码并将其移除。

假设我们有一个未使用的类如下:

class X {private val y = 0fun z() = Unit
}

然后您可以通过使用"Analyze > Run Inspection by Name > Unused Symbol"来检测它,并在右侧点击安全删除按钮。执行此操作后,您会看到未使用类已从项目中移除。

此外,应用程序中另一个较大的部分通常来自我们使用的库。如果未使用的库保留在项目中,它们将增加APK的大小。为了找到未使用的库,您可以使用Android Studio菜单中的"Analyze > Run Inspection by Name > Unused Library"。

这将查找项目中未使用的库并在弹出窗口中显示出来。在那里,您可以看到未使用的库并将其移除。

例如,让我们将“glide”库添加到我们的项目中。然后运行这个分析:

implementation("com.github.bumptech.glide:glide:4.16.0")

然后当您运行"Analyze > Run Inspection by Name > Unused Library"时,您会发现glide库在项目中未被使用,您可以通过点击删除按钮将其移除。

在这份全面的指南中,我们探讨了优化Android项目的基本实践方法,以实现更小的APK大小、更快的构建时间和更出色的开发体验。希望这些内容能够帮助您优化项目,使其更小、更清洁。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中科方德4.0清空旧磁盘分区图文教程

1、如下图在安装过程中,安装目标位置,选择红色箭头所示的“自动”,方德新版本会默认“将home目录设置为最大分区,根目录为最小分区”导致后续项目无法使用,因此新版本必须选择“自定义”; 2、选择自定义 3、…

面试问答之Spring进阶

文章目录 🐒个人主页:信计2102罗铠威🏅JavaEE系列专栏📖前言:🎀说说你对Spring的认识与理解🐕Bean的分类🐕 BeanFactory 接口和ApplicationContex 接口 的区别🐕SpringBe…

【短时交通流量预测】基于小波神经网络WNN

课题名称:基于小波神经网络的短时交通流量预测 版本时间:2023-04-27 代码获取方式:QQ:491052175 或者 私聊博主获取 模型简介: 城市交通路网中交通路段上某时刻的交通流量与本路段前几个时段的交通流量有关&#x…

彻底搞清楚CUDA和cuDNN版本问题

彻底搞清楚CUDA和cuDNN版本问题 1. 缘起 我的机器上以下三条指令输出的版本不相同。 nvcc -V # 这个输出11.7 nvidia-smi # 右上角显示12.3 import torch; torch.version.cuda # 这个输出12.1我想以此为契机,彻底搞清楚CUDA、cuDNN和torch之间的关系。 环境&a…

this关键字

定义:this是Java的一个关键字,表示 某个对象。 应用方式:不可以出现在类方法中 ,可出现在实例方法和构 造方法中。 在类的构造方法中 → 代表使用该构造方法所创建的对象 。 在实例方法中 → 代表正在调用该方法的 当前对象。 …

如何摆脱水印困扰?三款神器助您清爽无烦恼!

水印常常成为我们图片处理的一大难题,让我们苦恼不已。那么,如何能轻松摆脱这些烦人的水印呢?本文将向您推荐三款强大的去水印工具,让您清爽无烦恼,图片重焕光彩! 1. 水印云 如何快速而准确地去除各类水印…

实时智能应答数字人搭建

语音驱动口型的算法 先看效果: 你很快就可以帮得上我了 FACEGOOD 决定将语音驱动口型的算法技术正式开源,这是 AI 虚拟数字人的核心算法,技术开源后将大程度降低 AI 数字人的开发门槛。FACEGOOD是一家国际领先的3D基础软件开发商,…

解决/sys/kernel/debug/下没有任何文件的

问题: /sys/kernel/debug目录下没有任何信息 解决: 首先检查Debug Filesystem是否选中,其位置是: Kernel hacking -> Compile-time checks and compiler options -> Debug Filesystem 打开configs文件查看是否为y: arch/arm…

SpringCloud微服务-RabbitMQ快速入门

文章目录 RabbitMQ快速入门1、什么是MQ?2、RabbitMQ概述3、RabbitMQ的结构和概念4、常见消息模型5、HelloWorld RabbitMQ快速入门 1、什么是MQ? MQ (MessageQueue),中文是消息队列,字面来看就是存放消息的…

element多选框select下拉框数据回显的问题value.push is not a function

文章目录 问题描述 问题描述 今天在使用Element UI el-select组件遇到了一个问题,如下图: 下拉框里的值选中了,但是文本框里没有值 这是 el-select组件代码,我这里是用了一个多选框,options的值是在后端查询的,form.we…

太阳能模拟系统全光谱老化箱主要用于哪些行业

在科技日新月异的今天,产品的质量和耐用性成为了消费者关注的焦点。而太阳能模拟系统全光谱老化箱,作为一种模拟自然环境条件下材料老化的重要设备,正广泛应用于各个行业,为产品质量的保驾护航发挥着重要的作用。那么,…

『操作系统OS笔记』MAC(m1芯片)电脑安装FFmpeg

MAC(m1芯片)电脑安装FFmpeg mac电脑安装ffmpeg两种方法 文章目录 1. brew安装FFmpeg2. 官网下载FFmpeg压缩包3. 使用FFmpeg将音频和视频合并 1. brew安装FFmpeg brew install ffmpeg # 需要等比较久的时间,安装很多东西,安装过程中如果遇到报错对应解决…