这是我参加更文应战的第3天,活动详情检查:更文应战

一:Analyze APK检查各目录巨细

Android Studio里双击APK即可检查APK里各资源的状况

Android包体积优化方向

文件/目录 描绘
lib 寄存对应CPU架构的so库,有armeabi、armeabi-v7a、arm64-v8a、X86、x86_64 等;其间armeabi-v7a 和 arm64-v8a 是干流渠道
res 寄存资源文件,如布局和图片等
assets 寄存能够经过AssetManager获取的资源
class.dex .java-》.class-》.dex,dex文件是能被Dalvik/ART 虚拟机了解的格式文件
resources.arsc 资源映射表,包含了res/value目录下一切配置的xml内容。依据R.java中记载的id,能够在resources.arsc中找到对应资源的位置
其他

优化数据参考(不同运用效果不一样)

状态 巨细 备注
未优化前 79.7 MB
图片紧缩,多余资源铲除,代码紧缩 69.8MB
图片紧缩,多余资源铲除,代码不紧缩 71.5MB
图片紧缩 72.2 MB 只紧缩了一部分图片及移除字体

二、图片优化

1: 图片紧缩 tinify.cn/ 能有效降低图片巨细却看不大出来失真

2: 图片格式更换成webp,svg能够更小 .png > .jpg > .webp > .svg

Android Studio创立svg icon

Android包体积优化方向

Android Studio将图片转换成webp

Android包体积优化方向

对通明通道没有要求的高保真大图要存储到磁盘的图片,优先运用 jpg一般 UI 给咱们的都是 jpg 或 png 格式,如果是一些普通图标切图的话就运用 png如果有用到网络传输且图片比较大的场景,比方和服务器通讯获取网络图片,优先运用 webp,其次是 png图片体积小要求不高的纯色小图标能够运用 svg

3: 一些图片能够放到网络上加载

4: 用一套图片资源,如xhdpi或xxhdpi,针对性做差异化适配

三、沉冗资源优化

1: 右键 -> Refractor -> Remove Unused Resources -> preview,预览找到冗余的资源,可一键去除冗余资源

2: 手动分析冗余资源的操作, Code -> Analyze Code -> Run Inspection by Name… -> unused resources -> Whole Project

3: build.gradle 配置文件中将shrinkResources true,在打包的时分会主动铲除掉冗余的资源;这儿的铲除并不是删除资源文件,而是将资源内的数据除掉

注:上述方法如代码中存在动态、反射加载资源的时分,会导致资源误删的状况

能够新增res/raw/keep.xml文件,在里面把需求保存的资源文件列举出

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@drawable/xxx"/>

4: 能够经过 resConfigs 配置运用哪些言语,从而让构建工具移除指定言语之外的一切资源

android {
    defaultConfig {
        resConfigs "zh-rCN"
    }
    flavorDimensions "default"
    productFlavors {
        huawei {
            resConfigs "zh-rCN"
        }
    }
}
android {
    defaultConfig {
        resConfigs "zh-rCN", "xhdpi" // 只需求中文字符串、xhdpi 目录下的资源
    }
    flavorDimensions "default"
    productFlavors {
        huawei {
            resConfigs "zh-rCN", "mdpi" // 只需求中文字符串、mdpi 目录下的资源
        }
    }
}

四、代码紧缩:

minifyEnabled true敞开代码混杂及紧缩

五、SO优化:

1: 只保存指定渠道CPU架构的so

android {
 defaultConfig {
      ndk   {
         abiFilters "armeabi-v7a"
      }
  }
}

2: 经过网络下载,经过插件化的方法将下载的so正常装载运用