Mecanim 发表于 2021-8-10 13:11

Unity 发布Android工程的签名问题

工程背景:Unity到处Android工程,使用AndroidStudio出包。
Unity版本:
Android Studio:
   Android Studio 3.4.1
   Build #AI-183.6156.11.34.5522156, built on May 2, 2019
   JRE: 1.8.0_152-release-1343-b01 amd64
   JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
   Windows 10 10.0


问题1:更换电脑后出包,上传平台,平台检测签名不一致问题
任何一个APK都必须签名后才能安装到手机上。
若没有设置签名,AS中直接run的时候,这时候会默认使用一个debug签名,
MAC上debug签名的路径是“/Users/xxx/.android/debug.keystore”
Windows上debug签名的路径是:“C:\Users\xxx\.android\debug.keystore”
debug.keystore信息如下:
Keystore name: "debug.keystore"
Keystore password: "android"
Key alias: "androiddebugkey"
Key password: "android"
CN: "CN=Android Debug,O=Android,C=US"而每一台电脑debug签名是不同的,这就导致在新电脑上出包时的apk与以前上传平台的apk的签名不一致,从而无法更新apk。


解决:
方法1:配置debug时都使用同一个签名而不使用默认的
方法2:将一台电脑的debug.keystore拷贝到另一台电脑对应位置
方法3:针对unity 可以在 PlayerSetting/Publishing Settings中指定签名文件,这样Unity导出的工程就自带签名。
注意:上传各大应用市场建议自己定义签名文件,并保存好,这样就不会存在更换电脑,电脑签名出错问题了,而且已上传应用市场的应用,更换签名很繁琐。


签名是什么
应用的签名,也是为了验证这个应用是否被篡改,是否是该应用的所有者发布的等。正如我们平时生活中办理业务、签合同等都需要本人的签名以证实身份。
Android的证书通常是自签名的,也就是开发者可以自己创建,不需要向CA机构申请。系统认为某个包名的应用第一次安装时的证书就是合法的。


签名的作用
应用程序升级:相同包名的应用必须有相同的签名才能覆盖安装。各大应用市场通常也是通过你是否拥有应用正确的签名判断你是不是应用的所有者。应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署。代码或者数据共享:Android提供了基于签名的权限机制,一个应用程序可以为另一个以相同证书签名的应用程序公开自己的功能。安全性校验:使用第三方服务(如微信)会校验应用的签名,如果签名不对无法调用。自己App内的某些关键位置也可以增加签名校验(最好放在native中),签名不正确直接退出或报错,防止别人二次打包。


更详细签名内容,可参考以下连接:

xiaozongpeng 发表于 2021-8-10 13:19

Android打包后,调用微信支付的时候,提示"支付验证签名失败",签名用的也是keystore文件,有什么好的解决方案吗?
页: [1]
查看完整版本: Unity 发布Android工程的签名问题