android开发笔记之APK大小优化

蛋痛引发的争论

晚上,实在是无聊的蛋痛,就用自己的APK查看了一下手机中所有应用软件的信息,忽然看到一个APK,

/system/priv-app/ApeTaleEditor/ApeTaleEditor.apk: 63M

此APK有63M,这明显是不正常的,是此APK太大了,我比较了手机中的191个APK应用,APK大小超过60M的就二个应用,一个此应用,还有一个是谷歌的Chrome应用。

/system/app/Chrome/Chrome.apk: 68M

其它的应用绝大部分不超过10M,而我们的手机是低端机的入门机器,一个60多M的应用,明显是不正常,应该是需要优化的。

不愉快的争论

我就将此问题反馈给SPM,定位到此应用为我们公司自己开发的回忆相册应用。那好了,SPM就更简单粗暴了,要求直接去了此应用,原因是此应用占用了大量的空间,并且有性能上的问题。但是,商务和开发当然是不同意删除此应用。于是,在群里开始了一轮大公司常见的扯蛋秀了。

犯贱的我,在群里说了一下自己的观点:

其实这个APK,问题的关键还是优化APK大小,60多M肯定是太大了

这一下,摸了老虎的屁股了,立刻就有一位高人回复:

里面都是第三方提供的素材,怎么优化,搞笑吧?

我吧,偏不信邪,一个APK大小当然是可以优化的,我就百度了一下APK大小优化,将此搜索到的结果截图发了一下,并回复:

APK大小优化,不是搞笑

此位高人立刻回复:

里面都是必须的素材,删除掉就不能正常使用,怎么优化?APK大小优化不是只有你知道 

然后屏蔽了此群的信息。

我回复了:

........................................................

表示对此位高级工程师的无奈和无语。

优化APK的大小方法许多,怎么一定要删除这些必须的素材呢?

于是对此所谓的高级工程师的工作态度,工作能力,责任心都是满满的大问号。

没有办法,许多时候,工作就是一帮队友窝里斗。

抛出的砖头

我定位到此应用,解压此APK,看了一下此APK,谈谈自己的优化想法:

优化的核心一定是优化占用空间的资源。
  • so库文件优化

查看了一下此库文件,有二个目录:arm64-v8a,armeabi-v7a。arm64-v8a目录下的库文件有6M,armeabi-v7a目录下的库文件有5M。而我们只是32位的项目,也就是将库文件对应平台来发布就可以节省6M的APK大小。

  • 图片资源的优化
    APK占用空间,图片往往是问题的关键,我查看此res目录下的图片,哈哈,其图片是有好几套分辨率同时存在,如(hdpi,mdpi,xhdpi,xxhdpi),这想不占用空间都难啊。

网上有一些优化方式,个人觉得对此做的最好的,也是最权威的,应该是谷歌的APK应用。他们优化的方式就是对应分辨率的应用只提供对应的资源。这个优化,往往可以将APK优化为现在几分之一。

哈哈,谷歌,你牛,你是我们的亲哥。

下面给了一个谷歌的样例,就是参考google的GMS包中的Duo应用:

android开发笔记之APK大小优化_第1张图片

Android.mk

###############################################################################
# Duo
LOCAL_PATH := $(call my-dir)

my_archs := arm arm64 x86
my_src_arch := $(call get-prebuilt-src-arch, $(my_archs))

include $(CLEAR_VARS)
LOCAL_MODULE := Duo
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
#LOCAL_PRIVILEGED_MODULE :=
LOCAL_CERTIFICATE := PRESIGNED
#LOCAL_OVERRIDES_PACKAGES :=
LOCAL_DPI_VARIANTS := xxxhdpi xxhdpi xhdpi hdpi mdpi
LOCAL_DPI_FILE_STEM := $(LOCAL_MODULE)_$(my_src_arch)_%.apk
LOCAL_SRC_FILES := $(LOCAL_MODULE)_$(my_src_arch).apk
#LOCAL_REQUIRED_MODULES :=
LOCAL_MODULE_TARGET_ARCH := $(my_src_arch)
include $(BUILD_PREBUILT)

此方法可以总结为一句话:

分别针对不同的分辨率和不同的平台提供对应的APK应用,尽量减少不需要的占用空间的资源。

参考资源

1.Android apk大小优化之自我实践
http://blog.csdn.net/u010163114/article/details/51135155
2.Android产品研发(四)–>减小Apk大小
http://blog.csdn.net/qq_23547831/article/details/51559066

你可能感兴趣的:(android开发笔记)