一、起因
本文记录的是用flutter build apk
打包是遇到的bug,其根本原因目前还没有找到,如有朋友知道原因,烦请评论区告知,不胜感谢!其实之前打包都没有遇到问题,最近突然发现生成的包都没有签名。先自查,项目中的jks
和build.gradle
中的签名配置都是正常的(之前打包一直没问题,再确认一遍)。进入android
目录用AS打开,使用Generate Signed Bundle or APK
打包签名也正常。因为我们的项目多环境配置使用了--dart-define
,所以不能直接用AS打包,而且工期比较紧,所以先记录曲线救国的方案,等有时间了再来深究下签名失败的原因。
二、使用apksigner
给apk加签
我们flutter build apk --release
打包后,用keytool -printcert -jarfile $apkname$.apk
进行检查可以发现apk不是已签名的 jar 文件,接下来就是用命令行对apk加签。我们比较了多种方式,最后选择了apksigner
进行加签:
./apksigner sign --ks $jksName$.jks $apkName$.apk
apksigner
非常强大,还有许多功能,等有空了再补坑,现在先记录一下这个命令的位置
Mac系统下:
$userpath$/Library/Android/sdk/build-tools/$version$/apksigner
Windows下:
%user_path%\AppData\Local\Andorid\Sdk\build-tools\%version%\apksigner.bat
,AppData目录是系统隐藏目录