自从androidstudio升级到4.4版本之后,对as编译的版本,用androidkiller反编译、回编译后,重新安装,会失败,使用华为p50安装,提示失败原因“1.该安装包无效或不完整。2.该安装包与操作系统不兼容”。用as直接编译的版本是没有问题的,但是只要反编译、回编译后,安装就失败。
我们的应用有很多定制需求,版本出来后,涉及到二次编译问题。之前一直以为是android killer的问题,所以中间改用apktool工具,单独反编译、回编译、签名,编写脚本,重新进行二次编译,安装还是失败。通过网上查资料,做实验,最终发现,不只是androidstudio升级导致问题,在gradle中,将minSdkVersion提高到23导致。
在minSdkVersion>=23,并且gradle plugin>3.6.0的情况下,在AndroidManifest文件中,android:extractNativeLibs如果没有强制赋值时,编译APK版本时,会默认赋值为false,代表安装的时候,不压缩so库,这时的so库是未对齐的,除非用zipalign -p 4对齐,否则系统不允许安装未对齐的apk;
正好我所使用的gradle、minSdkVersion都符合以上条件,在AS编译版本的时候,androidmanifest中自动添加了android:extractNativeLibs=false,导致问题出现。
之后手动在androidmanfiest中的application中添加android:extractNativeLibs=true,通过AS生成apk后,又通过android killer或者自己编写的反编译、回编译自动化脚本,二次打包生成的新版本,可以安装成功。
特此记录下~
参考文章: