一、apk文件组成:
lib文件:
包含特定于处理器软件层的编译代码,该目录包含了每种平台额子目录,像armeabi,armeabi-v7a,arm64-v8a,x86,x86_64
res文件:
包含未编译到的资源 resources.arsc,主要有图片资源文件。
class.dex文件:
包含以Dalvik / ART虚拟机可理解的DEX文件格式编译的类。主要为java代码
resource.arsc:
包含已编译的资源。该文件包含res/values/ 文件夹所有配置中的XML内容。打包工具提取此XML内容,将其编译为二进制格式,并将内容归档。此内容包括语言字符串和样式,以及直接包含在resources.arsc文件中的内容路径 ,例如布局文件和图像。
assets
包含应用可以使用AssetManager对象检索的应用资源。
AndroidManifest:
包含核心Android清单文件。该文件列出应用程序的名称,版本,访问权限和引用的库文件。该文件使用Android的二进制XML格式。
二、分文件处理
lib目录处理
1.可以看到存在三种CPU架构的lib库,arm64-v8a、armeabi、armeabi-v7a。
大多数情况下只用两种armeabi-v7a/ arm64-v8a,所以在 app目录下build.gradle 下修改 ndk配置,并且删除armeabi目录:
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
}
2.部分so文件可能用不到,也可以进行酌情删减
res目录处理
1.一般占大头的是png图,解决方法是让图片用webp格式代替
2.大图尽量使用jpg图片代替,并且让UI不要设计颜色复杂度过高的图片
3.能用shape文件绝不用UI设计的图片文件;
4.一些需要拉伸的不规则图片尽量使用.9图;
5.能用自定义控件的用自定义控件代替图片
assets文件处理
较大的文件可以不放在assets中,进行分离处理
resources.arsc文件处理
这个文件打不开,但知道这个文件里面是包含res/values/ 文件夹所有配置中的XML内容,包括colors.xml,ids.xml, string.xml, styles.xml等等资源文件;只需要去掉不需要使用的资源文件就可以减少它的体积
去除无用资源 gradle配置
buildTypes {
release {
//去除无用资源
shrinkResources true
/开启混淆
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
使用lint工具扫描资源
使用Lint去除无用的资源文件,操作步骤是Analyze -> Run Inspection by Name -> 输入框输入 Unused resources 就可以扫描工程找到未使用的资源了
classes.dex文件处理
dex文件是源码编译后的运行字节码文件
1.删除无用的import(项目单机右键,点击 Optimize Imports即可)
2.删除无用的代码
3.代码混淆处理(常规混淆配置即可)