您当前的位置: 首页 >  性能优化

Kevin-Dev

暂无认证

  • 0浏览

    0关注

    544博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

Kevin-Dev 发布时间:2017-06-23 15:27:19 ,浏览量:0

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

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




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

4、压缩 PNG 和 JPEG 文件 您可以减少PNG文件的大小,而不会丢失使用工具如图像质量 pngcrush,pngquant,或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、插件化。 比如功能模块放在服务器上,按需下载,可以减少安装包大小。

关注
打赏
1658837700
查看更多评论
立即登录/注册

微信扫码登录

0.0402s