iOS/Android 应用签名报错对照表:从 provisioning 到 jarsigner

先给结论:应用签名报错分两大体系——iOS 是「证书 + 描述文件 + entitlements」三位一体,错一个就签不上;Android 是「keystore + jarsigner / apksigner」体系,最常见的坑是 keystore 密码/别名错和签名方案(v1/v2/v3)不匹配。下面按平台给对照表,对着报错关键词直接定位。

一、iOS 签名报错对照

报错 / 现象原因处理
No signing certificate 'iOS Distribution' found本机没装发布证书或没带私钥重新导入 .cer + p12,确认钥匙串里能展开私钥
Provisioning profile doesn't include signing certificate描述文件还绑着旧证书回开发者后台 Edit profile 换证书,重新下载安装
ITMS-90161 / 无效 provisioning profile用了 Development / Ad Hoc 包去上架换 App Store 分发证书与描述文件重新打包
ITMS-90704(缺失用途字符串)用了相机/定位等权限但 Info.plist 没写用途描述补 NSxxxUsageDescription 描述文案
entitlements 不匹配App 用的能力(推送/支付)与 profile 授权不一致核对 Capabilities 与 profile 的 entitlements

iOS 证书与描述文件的完整更新流程,见站内《iOS 生产证书过期如何更新》;打包完成后怎么传到 App Store,见《Windows 提交 IPA 到 App Store》。

二、Android 签名报错对照

报错 / 现象原因处理
jarsigner 提示 keystore 被篡改或密码错误keystore 密码输错、文件损坏或格式不对确认密码(区分大小写);确认是真正的 .keystore/.jks
别名 <x> 不存在alias 名写错先 keytool -list 看真实别名,原样复制
apksigner 校验:missing v2 / v3 signature只打了 v1(jarsigner 旧方案),Android 7+ 要求 v2改用 apksigner 同时打 v1+v2(Android 9+ 建议 v3)
INSTALL_PARSE_FAILED_NO_CERTIFICATESAPK 完全没签名或签名方案不被支持重新用 apksigner 签名并校验通过
重签后安装报签名冲突用不同 keystore 重签已发布 APK同一 App 必须用同一 keystore;换 key 等于换全新 App

如何查看 keystore 的 MD5 / SHA1 / SHA256 指纹,见站内《keytool 查看 Keystore 的 MD5 与证书指纹》。

三、重点:Android 签名方案 v1 / v2 / v3 验证链路

这是 Android 签名最容易踩的坑。jarsigner 打的是 v1(JAR 签名),从 Android 7.0 起系统要求 v2(APK 签名方案),Android 9.0 起又引入 v3。只打 v1 的包在 7.0+ 上能装但校验弱,很多渠道和加固平台直接拒收。

# 推荐用 apksigner 同时覆盖 v1+v2+v3(对齐、zipalign 后再签)
zipalign -p 4 in.apk aligned.apk
apksigner sign --v1-signing-enabled true --v2-signing-enabled true \
  --v3-signing-enabled true --ks keystore.jks --out signed.apk aligned.apk

# 校验签名方案是否齐全
apksigner verify --print-certs signed.apk

用 verify 能直接看到 V1 / V2 / V3 是否都打上。如果校验报「v2 缺失」,说明上一步签名方案没开全——这也是很多「打包成功但渠道拒收」的根因。

四、iOS 与 Android 签名一句话对比

维度iOSAndroid
密钥体系Apple 证书 + 描述文件keystore / jks
签名工具Xcode / 命令行(见 D3)jarsigner(v1)/ apksigner(v2/v3)
易错点证书/描述文件错配、entitlements密码/别名错、签名方案不全
上架App Store Connect各应用市场或自有分发

五、FAQ

Q:Android 用 jarsigner 还是 apksigner? 新项目一律用 apksigner。jarsigner 只出 v1,7.0+ 设备虽能装但校验弱、易被渠道拒;apksigner 能一次覆盖 v1/v2/v3。

Q:iOS 和 Android 能用同一套签名吗? 不能。两套体系完全独立,iOS 走 Apple 证书,Android 走 keystore,互不通用。

Q:签名密码忘了怎么办? iOS 的 p12 密码忘了可重新导出;Android 的 keystore 密码没有找回机制,忘了只能换新 keystore 重新签名,意味着各平台签名校验要重走一遍。

小结

签名报错记住两条线:iOS 看「证书 + 描述文件 + entitlements」三者是否一致,Android 看「keystore 密码/别名 + 签名方案 v1/v2/v3 是否齐全」。Android 侧最容易被忽略的是 v2/v3 没打全,用 apksigner verify 一眼就能查。如果嫌每次手搓签名麻烦,Android APK 的加固和签名可以交给自建平台一键完成(见《应用加固签名一站式》与站内 IPA-tool2 平台介绍)。

相关推荐

相关推荐

评论(0)
发表评论