ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android apk 包体积优化

2021-09-10 18:32:54  阅读:336  来源: 互联网

标签:APK implementation apk facebook 体积 Android android Studio


        实际开发应用时,包体积优化是必不可少的。毕竟手机内存有限,如果包体积过大很多用户会直接放弃(以前手机内存很小的时候,这个真的很重要),现在由于手机内存大了(512G已经挡不住了),现在的用户更关注流畅度和美观作为参考,但是该有的优化还是要优化的,毕竟要尽善尽美嘛。 

安装包监控

Android Studio 的 APK Analyser

        这是 Android Studio 提供的一个 APK 检测工具,通过它可以查看一个 apk 文件内部各项内容所占的大小,并且按照大小排序显示。因此我们很容易观察到 APK 中哪一部分内容占用了最大空间。APK Analyzer 的使用非常简单,只要将需要分析的 APK 文件拖入 Android Studio 中即可(直接点击项目中的apk也可以),显示内容类似下图所示:

        从上图中可以看出classes.dex都代码文件,不是很好东,看图片也占用了比较大的资源空间,因此可以针对性地对其做压缩优化等操作。(我这个项目是个demo所以显得代码占比较多。实际项目中肯定是图片资源占比相对较大)

        从上图看出,实际上 APK Analyzer 的作用不光是查看 APK 大小,从它的名字也能看出它是用来分析 APK 的,因此可以使用它来分析一些优秀 APK 的目录结构、代码规范,甚至是使用了哪些动态库技术等。

Matrix中 的 ApkChecker(传送)

        Matrix是微信终端自研和正在使用的一套APM(Application Performance Management)系统。 Matrix-ApkChecker 作为Matrix系统的一部分,是针对android安装包的分析检测工具,根据一系列设定好的规则检测apk是否存在特定的问题,并输出较为详细的检测结果报告,用于分析排查问题以及版本追踪。

安装包优化实践

Lint查找无用文件

        使用 Lint 查看未引用资源。Lint 是一个静态扫描工具,它可以识别出项目中没有被任何代码所引用到的资源文件。具体使用也很简单,只要在 Android Studio 中点击 Analyze -> Inspect Code,如下所示:

选中整个项目,如下所示

如果项目中有未被使用资源,则 Lint 会在窗口 Inspection Result 中显示,类似结果如下:

低效布局权重:提供优化方案。

        上面就是未使用的资源:会使应用程序变大,并降低构建速度。

        还有很多就不多介绍了,感兴趣的可以去玩玩。

启用压缩、混淆和优化功能

        当你使用 Android Studio 3.4 或 Android Gradle 插件 3.4.0 及更高版本时,R8 是默认编译器,用于将项目的 Java 字节码转换为在 Android 平台上运行的 DEX 格式。不过,当您使用 Android Studio 创建新项目时,缩减、混淆处理和代码优化功能默认处于停用状态

        debug{
            // 启用代码收缩、模糊处理和优化
            minifyEnabled true
            // 资源缩减
            shrinkResources true
            //包括与打包在一起的默认ProGuard规则文件
            //R8配置文件。
            proguardFiles getDefaultProguardFile(
                    'proguard-android-optimize.txt'),
                    'proguard-rules.pro'
        }

        未启用

        启用后

文件优化

图片优化

降低图片bit

        不需要太精致的图片可以将图中32 bit降至16 bit或者8 bit。

使用 VectorDrawable 图片

        UI小姐姐能提供最好不能提供,咱们自己自己造。

        Android Studio 中点击 File > New > Vector Asset

        Clip Art 项为固有的矢量图,我们直接用即可,而Local file(SVG,PSD)选项,则是我们需要转换的了,剩下的提示进行就可以啦。

使用 webp 格式图片

        使用webp格式的图片可以在保持清晰度的情况下减小图片的磁盘大小,是一种比较优秀的,Google推荐的图片格式。

        选中图片>右键>选择

        图片由.png转为.webp

三方库优化

        在 App 中会引入各种三方的库,但是在引入之前最好权衡一下是否需要将其代码全部引入,造成不必要的代码或者资源也被打包到 APK 中。

        例如Facebook全家桶,你不可能全部用到仅导入部分即可,如登入和分享

dependencies {
    // Facebook Core only (Analytics)
    implementation 'com.facebook.android:facebook-core:11.1.0'
    // Facebook Login only
    implementation 'com.facebook.android:facebook-login:11.1.0'
    // Facebook Share only
    implementation 'com.facebook.android:facebook-share:11.1.0'
    // Facebook Messenger only
    implementation 'com.facebook.android:facebook-messenger:11.1.0'
    // Facebook App Links only
    implementation 'com.facebook.android:facebook-applinks:11.1.0'
    // Facebook Android SDK (everything)
    implementation 'com.facebook.android:facebook-android-sdk:11.1.0'
}

仅需导入
dependencies {
    implementation 'com.facebook.android:facebook-login:11.1.0'
    implementation 'com.facebook.android:facebook-share:11.1.0'
}

        例如XRecyclerView一个 RecyclerView 实现了 pullrefresh 、loadingmore 和 header featrues。你可能仅用到 loadingmore,那你就可以将关于loadingmore部分截取出来。而不用导入整个包。

关于 App Bundle

        这个功能就跟ios一样了,他们就是将所有资源全部打到项目中,然后App Store,根据安装设备的属性,来选取相应资源打包进行下载。

        谷歌的 Dynamic Delivery 功能就天然地解决了这个问题,通过 Google Play Store 安装 APK 时,也会根据安装设备的属性,只选取相应的资源打包到 APK 文件中。

        如下图,你上传的700MB大小的aab,但是你下载的话会有两套资源打在apk中,但是用户下载仅一套资源700MB。

        但是 App Bundle 目前只适合在 Google Play Store 上发布的项目,国内目前还是通过各家的插件化方案来实现动态部署,一定程度上也可以算作减少安装包大小的方案。

        还有一个骚操作,就是前期资源打包,后续资源用户边玩边下载,缺点可能造成卡顿和浪费流量,仅供参考。

文章推荐

Image Asset Studio(图标生成工具)

aab打包

标签:APK,implementation,apk,facebook,体积,Android,android,Studio
来源: https://blog.csdn.net/g984160547/article/details/120219470

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有