当前位置: 首页 > 科技观察

如何缩小Android应用的体积

时间:2023-03-19 15:28:08 科技观察

【.com快译】不知道大家有没有注意到,用户的各种业务需求在不断增加,开发者也在不断的在同一个应用中集成更多的内容。因此,这直接导致了应用程序体积的增大。一些大型应用甚至会成为“大用户”,抢占智能手机的存储资源,进而出现运行缓慢,严重影响用户的工作效率。根据Google的调查统计:如果应用程序的大小超过150MB,被安装的几率会降低30%。而且,大小每增加6MB,应用的安装转化率可能会下降1%。目前,有许多技术人员致力于创建小型应用程序和工具。AndroidAppBundle就是这样一种发布工具。有了它,用户不需要从应用商店重新下载原生应用中已有的内容。该平台声称可以将应用程序的大小减少35%。接下来,我们一起来探讨一下,在应用开发生命周期中,有哪些方法可以降低Android应用本身的体积。1.图像优化我们可以很容易地在不降低分辨率的情况下缩小图像的尺寸。例如:我们可以将.jpg和.png图片转换为.webp(Web图片格式)。该格式既有.jpg的有损压缩,也有.png的透明度,因此许多工具都支持这种类型的转换。例如:像guetzli和packjpg这样的工具最适合压缩.jpg文件;pngcrush和zopflipng等工具最适合转换.png文件。因此,设计人员可以使用矢量图形来创建既节省空间又不会降低分辨率的简单图像。它们在Android中作为VectorDrawable对象提供,并使文件能够生成清晰且适合屏幕尺寸的图像。对应的Java代码如下:android{defaultConfig{vectorDrawables.useSupportLibrarytrue}}众所周知,有些图片与静态资源无关,程序框架可以在运行时动态绘制此类图片。例如:在开发小型应用程序时,VectorDrawables对象只能在APK文件中占用最小的存储空间,并且可以创建符合设计规范的图像。当然,复杂的对象可能会占用一定份额的CPU和RAM,从而减慢整体运行速度。此外,作为一款所见即所得(WYSIWYG)的图片编辑工具,Draw9-patch还可以通过缩小图片的大小来节省空间。在实际使用中,您可以使用此工具制作适合各种移动设备和不同屏幕尺寸的位图。此外,可以根据您在图像中绘制的手势指示器垂直或水平缩放图像的选定部分。此外,我们还可以使用aapt工具对.png图片进行处理,这些图片位于设备目录res/drawable/下,实现无损压缩。例如:我们可以将真彩色.png图像(不超过256种颜色)转换为启用的8位图像调色板。显然,后者在保留显示效果的同时大大缩小了图片的尺寸。但是,值得注意的是aapt工具不会压缩资产/文件夹中的.png文件。此外,它无法优化使用超过256种颜色的图像。此外,它还有一个缺点,即可能会弹跳压缩的.png文件。为此,我们需要通过在Gradle(译者注:基于ApacheAnt和ApacheMaven概念的项目自动化开源工具)中使用cruncherEnabled标志(见以下代码)来避免这个缺点:aaptOptions{cruncherEnabled=false}2.消除冗余代码(RedundantCode)简而言之,冗余代码就是可以通过重新计算得到的不需要的代码,或者在执行过程中对应用程序的功能没有影响的代码。这些代码对应的方法或类,不仅对应用程序无用,还可能导致程序膨胀,浪费系统资源,产生不必要的加载和执行。3、消除死代码(DeadCode)APK文件的大小与应用程序的加载速度、所用内存、功耗成正比。可见,为将来可能使用而保留的任何暂时无用的代码只会占用更多空间并导致应用程序消耗更多设备电量。所以,请不要犹豫,找出来,果断删除。这不仅是为了提高源代码的质量,也是为了减少代码维护量,让应用程序可以避免错误或攻击。4、限制库资源的使用通常,在开发Android应用程序时,我们会使用到各种外部库,而我们往往需要最大限度地发挥这些库的可用性和通用性。其中,最常用的是GooglePlayServices(可用于恢复应用程序文本的自动翻译)和AndroidSupportLibrary(可用于改善旧设备上的用户体验)。当然,这些库也是为服务器或桌面设计的。它们往往带有各种不服务于移动应用程序的方法和对象。为此,您需要在编写程序时只保留应用程序需要的部分。为此,你不仅需要修改不同的调用权限,还需要只使用那些适合移动设备的库来实现某些功能。5.它只支持特定的屏幕密度。与基本固定屏幕尺寸的iPhone不同,全球不同厂商生产的Android平台设备可谓五花八门。他们有不同屏幕尺寸和分辨率的产品。此外,在Android屏幕密度方面,还有诸如:ldpi、tvdpi、mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi等类型。因此,如果你想让你的应用程序小而美,那么没有必要支持所有的屏幕类型,只要保证你的界面在基本设备上能清晰流畅地显示即可。当然,在实践中,你也可以进行调查,了解特定屏幕密度的设备在市场上所占的比例。如果比例真的不高,应用真的没有必要适配甚至捆绑每一个密度。通过以下命令,Android系统可以自动扩展以适应不同密度的屏幕。android{splits{density{enabledtrue}}}6.避免枚举通常,枚举操作会给应用程序的classes.dex文件带来1.0到1.4KB的空间占用。而且,如果程序中的枚举比较多,尤其是有各种共享库或者复杂的系统,运行起来也会变慢,占用空间也比较大。我们可以通过ProGuard的注解功能和@IntDef将枚举类型转换为整数类型,从而在保留枚举所有优点的同时,减小应用程序的体积。7.使用APK体积分析器APK分析器可以为您提供有关APK体积大小的各种数据。在其界面上方,可以选择查看原始文件的大小,即:APK占用的磁盘空间大小。它的“下载量”表示用户下载目标应用程序将消耗多少数据流量,同时考虑到Play商店的账户压缩。APKSizeAnalyzer可以通过AndroidStudio的插件市场有效地下载。在其分析报告中,它以降序显示文件夹和文件的大小。使用此功能,您可以轻松识别您空间的“大户”。同时,您还可以通过“对比”功能查看应用新旧版本的音量差异。8.可下载的字体由于Play商店中的绝大多数应用程序都使用相同的字体。因此,大多数字体都包含在AppBundle中。当用户在包含相同字体的设备上运行不同的应用程序时,它们需要能够在本地相互重复使用。幸运的是,谷歌已经考虑到这一点,并在其支持库中提供了多种字体供下载。相应地,当你开发一个应用程序时,你不需要使用API??来捆绑字体文件,你只需要请求相应的字体即可。9.提供多个APK有时候,用户可能只想使用一个应用程序的一部分功能。作为一个整体,应用程序通常无法拆分现有的APK。对此,你可以通过GooglePlay上的AndroidAppBundles上传你自己的应用,这样谷歌就可以根据设备的配置开启APK优化。在实际开发中,也可以将一个APK拆分成多个,方便用户根据自己的判断和实际设备配置选择最实用的APK。总结在竞争激烈的市场中,我们的应用除了提供优质的功能服务外,自身的下载量和在用户设备上的占用空间也是决定其成败的关键因素之一。通过上述减小应用程序大小的方法,我们将能够不断改善用户体验。原标题:如何在开发过程中减小AndroidApp的体积?,作者:SolaceInfotech