apktool重(编译)打包之后apk包体变大
原因
原因:应该是apktool 2.0.3
版本之后引入了两个字段
compressionType:
doNotCompress:
这两个字段会决定重新编译apk时哪些类型的文件不会压缩,从而影响最终生成的apk的包体大小。
解决办法一:调整不压缩的文件类型
请对比apktool 2.0.1
和2.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.1
的1.apk
,1.apk
文件一般放在Home_dir\apktool\framework\1.apk
,其中Home_dir是操作系统的默认Home目录,windows平台可以打开cmd,提示的目录即为Home_dir。当然也可以采用Everything搜索等工具全局搜索下就知道其路径了。最后,用apktool 2.0.1
版本重新编译target.apk
反编译时生成的目录,即可编译成功。