apktool重(编译)打包之后apk包体变大

原因

原因:应该是apktool 2.0.3版本之后引入了两个字段

  • compressionType:

  • doNotCompress:

这两个字段会决定重新编译apk时哪些类型的文件不会压缩,从而影响最终生成的apk的包体大小。

解决办法一:调整不压缩的文件类型

请对比apktool 2.0.12.1.1版本反编译之后目录下的apktool.yml文件:

2.0.1:

2.1.1:

因此,可以动态调整doNotCompress字段中不压缩的文件类型(比如删除图中的- lua行),来达到压缩的效果,从而使得包体大小保持与原有大小基本一致。

解决办法二:利用apktool低版本及apktool高版本释放的1.apk

既然apktool 2.0.1及其之下版本未引入doNotCompress字段,那么可以采用高版本的apktool释放的1.apk(framework)来作为apktool 2.0.1及其之下版本重编译时的框架依赖。这样可以解决2.0.1重编译依赖Android6.0系统特性的apk失败的问题。

举例:首先用apktool 2.0.1反编译target.apk,然后将更高版本的apktool释放(反编译操作时候就会自动释放出来)的1.apk覆盖掉apktool 2.0.11.apk1.apk文件一般放在Home_dir\apktool\framework\1.apk,其中Home_dir是操作系统的默认Home目录,windows平台可以打开cmd,提示的目录即为Home_dir。当然也可以采用Everything搜索等工具全局搜索下就知道其路径了。最后,用apktool 2.0.1版本重新编译target.apk反编译时生成的目录,即可编译成功。