51CTO|如何减小安卓应用的体积( 二 )


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的批注(annotation)功能 , 将枚举型转换为整型 , 以实现在保留枚举所有优点的基础上 , 减小应用的体积 。
7.使用APK体积分析器
APK分析器可以为您提供有关APK体积大小的各种数据 。 在其界面的上方 , 您可以选择查看原始文件的大小 , 即:APK占用的磁盘空间大小 。 其“下载体积”表示了:在考虑了PlayStore的帐户压缩的情况下 , 用户将会耗费多少数据流量来下载目标应用 。
APK体积分析器可以通过AndroidStudio的插件市场(pluginmarketplace) , 有效地进行下载 。 在其分析报告中 , 它会以降序排列的方式展示文件夹和文件的大小 。 通过此功能 , 您可以轻松地找出占用空间的“大户” 。 同时 , 您也可以通过“比较”的功能 , 查看到某个应用新、旧版本之间的体积差异 。
8.可下载的字体
由于PlayStore中的绝大多数应用程序都采用了相同的字体 。 因此 , 大多数字体会被包含在AppBundles中 。 当某个用户在一台设备上运行包含了采用相同字体的不同应用时 , 它们就需要能够在本地进行相互复用 。 幸运的是 , Google已经考虑到了此类情况 , 并在其支持库中提供了可下载的各类字体 。 据此 , 您在开发应用时 , 不必再用API去捆绑字体文件 , 只需请求相应的字体即可 。
9.提供多个APK
有时候 , 用户可能只想用到某个应用的一部分功能 。 而作为一个整体 , 应用往往无法将既有的APK进行拆分 。 对此 , 您可以在GooglePlay上 , 通过AndroidAppBundles上传自己的应用 , 以便Google可以根据设备的配置 , 来启用APK的优化 。 在实际开发中 , 您也可以将其中一个APK划分为多个 , 以便用户根据自己的判断和实际设备的配置 , 选择最实用的APK 。
小结
【51CTO|如何减小安卓应用的体积】在竞争激烈的市场上 , 我们的应用除了能够提供优质的功能服务 , 其自身的下载体积、以及在用户设备上占用的空间 , 也是决定其成败的关键因素之一 。 通过上述介绍的减小应用体积的方法 , 我们将能不断提高用户的使用体验 。


推荐阅读