在优化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很多崩溃,因此最好保留。
Android踩坑经验-优化APK大小时不可轻易删除/META-INF目录
最新推荐文章于 2025-03-22 20:01:38 发布
本文解析了APK中的META-INF文件夹作用,包括MANIFEST.MF、CERT.RSA、CERT.SF等文件的功能,以及/services文件夹的重要性,特别是对于Kotlin代码的影响。
2358

被折叠的 条评论
为什么被折叠?



