首先第一步:我们先了解apk中各体积的比例占比:
AndroidStudio为开发者提供了很方便的工具来分析APK的体积。通过Build->Analyze APK->选择对应的APK,即可分析该APK的体积构成:

从上图来看res、assets、lib、dex文件等.
1.res assets文件大小
a)删除无用的资源 注:本人使用的stuido版本 3.6.3
在Android Studio中选择菜单“Analyze” --> “Run inspaction by Name ...”。在弹出的搜索窗口中输入想执行的检查类型,如“Unused Resources”。
在搜索界面,右键点击输入“Unused resources”;

等studio执行完毕后

选择“Remove All Unused Resources”即可
备注:
b)图片压缩
在App体积过大,且图片占用资源过多时,将png格式的图片转换为webp格式的图片可以缩减大量的包体积,但是在App体积不是很大时(建议以50M为界),可以不将png格式的图片转换为webp格式,因为webP的解码速度是比png格式的要慢的,尽管在现在硬件性能过剩的情况下,解码速度的差距基本可以忽略不计。
转换方法:
直接右键mipmap或drawable文件夹选择 convert to webp

参考:webp和png区别
c) 使用tinypng等图片压缩工具对图片进行压缩。
打开网址,将大图片导入到tinypng,替换之前的图片资源。
d) 尽量不要在项目中使用帧动画
一个帧动画几十张图片,再怎么压缩都还是占很大内存比重的。所以建议是让UI去搞,这里可以参考使用lottie-android,如果项目中动画效果多的话效果更加明显。当然这就要辛苦我们UI设计师大大了。
e)在app的build.gradle中添加
buildTypes {
debug {
versionNameSuffix "-debug" //versionName的后缀
minifyEnabled false
shrinkResources false
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
zipAlignEnabled true
shrinkResources true // 移除无用的resource文件
}
}
这样打包出来的apk的大小会减小.项目中的无用资源还在.
-
减少chasses.dex大小
classes.dex中包含了所有的java代码,当你打包时,gradle会将所有模板力的.class文件转换成classes.dex文件,当然,如果方法数超过64K,将要新增其他文件进行存储。可以通过multidexing分多个文件。换句话说,就是减少代码量。我们可以通过以下方法来实现:
尽量减少第三方库的引用。如果你的dex文件太大,检查是否引入了重复功能的第三方库(图片加载库,glide,picasso,fresco,image_loader,如果不是你一个人单独开发完成的很容易出现这种情况),尽量做到一个功能点一个库解决。 -
其他
a)删除无用的zip包
b)删除翻译资源,只保留上架地区语言
c)使用动态加载so文件,插件化开发
d)大资源放到服务器请求
e)android-support包尝试剔除项目
网友评论