签名后APK无法安装:解析包失败问题求助
执行Flutter构建命令生成ABI拆分的混淆APK:
flutter build apk --split-per-abi --obfuscate --split-debug-info=<directory>
替换<directory>为存储路径后得到3个APK文件。
通过以下命令生成自签名密钥库:
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
替换alias_name为自定义别名,完成创建后将app-armeabi-v7a-release.apk与密钥库放在同一目录,执行签名命令:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore app-armeabi-v7a-release.apk alias_name
签名完成后收到以下输出:
jar signed.
Warning: The signer's certificate is self-signed. The SHA1 algorithm
specified for the -digestalg option is considered a security risk and
is disabled. The SHA1withRSA algorithm specified for the -sigalg
option is considered a security risk and is disabled. POSIX file
permission and/or symlink attributes detected. These attributes are
ignored when signing and are not protected by the signature.
尝试安装APK时所有设备均提示解析包时出现问题。
更换安全的签名算法
弃用已被标记为不安全的SHA1算法,改用SHA-256相关算法重新签名:jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore my-release-key.keystore app-armeabi-v7a-release.apk alias_name执行APK对齐操作
APK签名后必须使用zipalign进行对齐,否则会导致包解析失败。命令如下:zipalign -v 4 app-armeabi-v7a-release.apk app-armeabi-v7a-release-aligned.apk提示:
zipalign工具位于Android SDK的build-tools/<对应版本号>目录下,可直接添加该路径到系统环境变量,或使用完整路径执行命令。验证处理后的APK
使用Android官方的apksigner工具验证APK的有效性:apksigner verify app-armeabi-v7a-release-aligned.apk若命令无错误输出,说明APK已符合安装要求。
重新构建确保APK完整性
若上述步骤仍无效,重新执行Flutter构建命令,确保构建过程未中断,生成的原始APK文件未损坏。
内容的提问来源于stack exchange,提问作者Reza

