在优化APK大小时,往往会删除无用资源,重复资源等,有些童鞋可能看到META-INF文件夹下都是声明信息,签名信息等,因此感觉除了签名信息外,其他信息可随意删除,但其实不然。
META-INF文件夹主要存放的配置信息,签名信息,service注册信息,文件列表如下:
重点有MANIFEST.MF,CERT.RSA,CERT.SF三个文件和services,proguard文件夹:
MANIFEST.MF:可读文本文件,存放的是版本号,以及每个文件的哈希值
CERT.RSA:存放包的签名
CERT.SF:对每个文件的头三行进行哈希,内容形式跟MANIFEST.MF基本一致,内容如下:
services文件夹:这是Android模块开发SPI机制生成的文件夹,SPI全程是Service Provider Interface,不同的模块可以基于接口编程,主要用于代码拓展可插拔特性,有兴趣的可以去看下相关知识:https://www.jianshu.com/p/deeb39ccdc53。services文件夹里面存放的就是接口的注册信息,打开其中一个文件看一下:
上述文件表明代码中调用到MainDispatcherFactory的地方,实际调用的方法是AndroidDispatcherFactory接口。
proguard文件夹:从文件列表看,存放的是简搜使用的组件的混淆信息。
在现实遇到的坑是删除了/services目录后,使用Kotlin写的code很多崩溃,因此最好保留。