升级Android Studio后上传APK至Google Play遇签名无效错误求助
背景
我开发的Unity 2018.1游戏正处于发布前夕(Beta转Release Candidate),此前一切正常,但升级Android Studio从rc6到rc7后,编译RC1版本APK时Unity无任何报错,上传Google Play却收到以下提示:
You uploaded an APK with an invalid signature (learn more about signing). Error from apksigner: ERROR: JAR_SIG_NO_MANIFEST: Missing META-INF/MANIFEST.MF
我接触Android开发仅4个月,经验不足。已确认:
- 使用的是一直以来的keystore,未做任何修改
- Unity Player Settings中的包名正确,预加载资源列表为空
- 尝试上传至新的商店条目,错误依旧
目前正在尝试升级Android Studio并下载4.1到8.1的全部Android APIs,猜测可能和硬件依赖损坏清单文件有关。
刚遇到这种临近发布的签名问题确实闹心!结合你的情况和Unity+Android Studio的兼容性特点,我整理了几个大概率的原因和排查方案:
1. Android Studio升级导致签名工具兼容性问题
你升级到AS rc7后,Unity可能默认调用了新版本的apksigner工具,而Unity 2018.1是比较旧的版本,和新apksigner的签名流程存在兼容性差异,导致MANIFEST.MF文件未被正确生成或签名。
解决尝试:
- 手动用旧版签名工具
jarsigner重新签名APK:- 找到Unity编译生成的APK文件
- 执行签名命令:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 你的密钥库路径.jks 待签名APK路径.apk 密钥别名 - 用
zipalign优化APK(Google Play要求):zipalign -v 4 签名后的APK路径.apk 优化后的APK路径.apk - 上传优化后的APK到Google Play试试
2. Unity编译缓存或SDK路径异常
AS升级可能修改了系统默认的Android SDK路径,导致Unity编译时无法正确生成或打包MANIFEST.MF文件。
解决尝试:
- 清理Unity编译缓存:点击Unity顶部菜单
File -> Build Settings -> Android -> Clean Build,清理完成后重新编译APK - 检查Unity的SDK配置:打开
Edit -> Preferences -> External Tools,确认Android SDK路径指向的是AS rc7对应的SDK目录,或者尝试切换回之前rc6版本的SDK路径,重新编译测试
3. 第三方插件的清单文件冲突
如果你的游戏集成了第三方Android插件(比如广告、统计SDK),这些插件的清单文件配置可能和新的AS环境冲突,导致MANIFEST.MF生成异常。
解决尝试:
- 暂时移除非核心的第三方插件,重新编译APK并上传测试,排查是否是插件导致的问题
- 检查插件的AndroidManifest.xml文件,确认没有重复的权限、组件声明,或者和Unity生成的清单文件冲突的内容
4. Keystore的算法兼容性问题
虽然你没修改keystore,但新的apksigner对密钥算法的要求更严格,旧keystore的密钥算法可能不被支持。
解决尝试:
- 用
keytool检查keystore的密钥信息:
确认密钥的签名算法是keytool -list -v -keystore 你的密钥库路径.jksSHA1withRSA或SHA256withRSA这类Google Play支持的算法。如果是更旧的算法,建议先尝试前面的方案,万不得已再考虑重新生成keystore(注意:发布前换keystore需谨慎,会影响后续版本更新)
另外,你提到的升级AS和下载全API的方案也可以尝试,但优先级不如前面的排查方向高。还可以试试将Unity项目导出为Android工程(Unity Build Settings中选择Export Project),然后在AS中手动签名打包,这样能快速定位是Unity编译的问题还是AS签名环节的问题。
内容的提问来源于stack exchange,提问作者Michael Macha

