【Android -- 性能优化】包体优化

不断学习,做更好的自己!💪

视频号CSDN简书
欢迎打开微信,关注我的视频号:程序员朵朵点我点我

简介

我做过两年的海外应用产品,深知包体大小对于产品新增的影响,包体小百分之五,可能新增就增加百分之五。如果产品基数很大,这个提升就更可怕了。不管怎么说,我们要减肥,要六块腹肌,不要九九归一的大肚子。

既然要瘦身,那么我们必须知道 APK 的文件构成,解压 apk:
在这里插入图片描述

  • assets文件夹
    存放一些配置文件、资源文件,assets不会自动生成对应的 ID,而是通过 AssetManager 类的接口获取。
  • res目录
    res 是 resource 的缩写,这个目录存放资源文件,会自动生成对应的 ID 并映射到 .R 文件中,访问直接使用资源 ID。
  • META-INF
    保存应用的签名信息,签名信息可以验证 APK 文件的完整性。
    AndroidManifest.xml
    这个文件用来描述 Android 应用的配置信息,一些组件的注册信息、可使用权限等。
  • classes.dex
    Dalvik 字节码程序,让 Dalvik 虚拟机可执行,一般情况下,Android 应用在打包时通过 Android SDK 中的 dx 工具将 Java 字节码转换为 Dalvik 字节码。
  • resources.arsc
    记录着资源文件和资源 ID 之间的映射关系,用来根据资源 ID 寻找资源。

优化技巧

我们需要从代码和资源两个方面去减少响应的大小。
1、首先我们可以使用 lint 工具,如果有没有使用过的资源就会打印如下的信息(不会使用的朋友可以上网看一下)

res/layout/preferences.xml: Warning: The resource R.layout.preferences appears
    to be unused [UnusedResources]

同时我们可以开启资源压缩,自动删除无用的资源

android {
    ...
    buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        }
    }

无用的资源已经被删除了,接下来哪里可以在瘦身呢?

2、我们可以使用可绘制对象,某些图像不需要静态图像资源; 框架可以在运行时动态绘制图像。Drawable对象(以XML格式)可以占用APK中的少量空间。此外,XML Drawable对象产生符合材料设计准则的单色图像。

简单说来就是,能自己用XML写Drawable,就自己写,能不用公司的UI切图,就别和他们说话,咱们自己造,做自己的UI,美滋滋。而且这种图片占用空间会很小。

3、重用资源,比如一个三角按钮,点击前三角朝上代表收起的意思,点击后三角朝下,代表展开,一般情况下,我们会用两张图来切换,我们完全可以用旋转的形式去改变

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/ic_thumb_up"
    android:pivotX="50%"
    android:pivotY="50%"
    android:fromDegrees="180" />

比如同一图像的着色不同,我们可以用android:tint和tintMode属性,低版本(5.0以下)可以使用ColorFilter

4、压缩 PNG 和 JPEG 文件 您可以减少PNG文件的大小,而不会丢失使用工具如图像质量 pngcrushpngquant,或zopflipng。所有这些工具都可以减少 PNG 文件的大小,同时保持感知的图像质量。

5、使用 WebP 文件格式
可以使用图像的WebP文件格式,而不是使用PNG或JPEG文件。WebP格式提供有损压缩(如JPEG)以及透明度(如PNG),但可以提供比JPEG或PNG更好的压缩。

可以使用Android Studio将现有的BMP,JPG,PNG或静态GIF图像转换为WebP格式。

6、使用矢量图形
可以使用矢量图形来创建与分辨率无关的图标和其他可伸缩 Image。使用这些图形可以大大减少 APK 大小。一个100字节的文件可以生成与屏幕大小相关的清晰图像。

但是,系统渲染每个 VectorDrawable 对象需要花费大量时间 ,而较大的图像需要更长的时间才能显示在屏幕上。因此,请考虑仅在显示小图像时使用这些矢量图形。

不要把 AnimationDrawable 用于创建逐帧动画,因为这样做需要为动画的每个帧包含一个单独的位图文件,这会大大增加 APK 的大小。

7、代码混淆 使用 proGuard 代码混淆器工具,它包括压缩、优化、混淆等功能。这个大家太熟悉了。不多说了。


android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile(‘proguard-android.txt'),
                    'proguard-rules.pro'
        }
    }

8、插件化。 比如功能模块放在服务器上,按需下载,可以减少安装包大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kevin-Dev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值