背景:当我们开发完成我们的游戏,准备打包上架移动端应用平台时,便需要对APK进行签名,以确保APK的完整性和安全性,同时便于应用商店审核和分发。
比如在Google Play Store或Apple App Store上发布应用程序,开发者通常需要对应用程序进行签名,以满足应用商店的审核要求。
而我们平时打包的apk,使用的是unity提供的默认debug key,它不会影响我们的日常开发和测试,但我们要上架应用商店时,建议使用自己配置的keystore,以提高应用的安全性。
并且,每台开发主机的debug key不同,当我们使用不用主机进行打包测试时,就会导致应用的包名相同,但签名不同,以至于安装失败。
原理:APK签名基于公钥加密和数字证书体系。在签名过程中,开发者使用私钥对APK进行加密,生成数字签名。在APK安装时,系统会使用对应的公钥来验证签名的有效性。
步骤:
Unity提供了一套签名方案,通过ProjectSettings的配置,可以对APK进行签名。
1.找到Publishing Settings,可以看到配置keystore的选项,通过配置keystore,就可以对我们打包后的apk进行签名。
2.选择Keystore Manager创建一个新的密钥。位置可以选择工程目录下,
方便管理。配置keystore中的必填项。
3.配置完成后,如下:
这样,当我们的apk,被打包出来后,就会自动对应用进行签名。
经验:
1.保存好自己的keystore,一个apk建议只对应一个keystore,这样方便以后的应用升级、迭代等。如果我们要同时开发多款不同的游戏,那么可以每个应用对应一个keystore。
2.对于一些平台,需要提供签名(MD5值)(如TapTap登录),可以通过keytool进行查询。
a.首先需要安装Java的JDK,如果是unity引擎,并且已经配置了安卓平台,则可以使用unity安装的jdk,路径一般如下。
b.使用cmd命令行工具,切换到此目录下,并执行cmd命令
D:\Program Files (x86)\UnityEditor\2021.3.22f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\OpenJDK\bin>keytool -list -v -keystore [你的keystore绝对路径]
c.输入结果如下,可根据需要,提取MD5值或者SHA值。
3.每次我们启动Unity引擎后,keystore默认不会记住密码。开发阶段我们频繁打包的话,会不太方便,我们可以通过在Editor文件夹中,新建脚本,以便在Unity启动时,便自动配置好keystore。
using UnityEditor;
//监听Unity启动,一启动就执行
[InitializeOnLoad]
public class RememberKeyStore
{
static RememberKeyStore()
{
//密钥名称:注意这里要加上.keystore后缀
PlayerSettings.Android.keystoreName = "你的密钥名称";
// 密钥密码
PlayerSettings.Android.keystorePass = "你的密钥密码";
// 密钥别名
PlayerSettings.Android.keyaliasName = "你的密钥别名";
// 密钥别名密码
PlayerSettings.Android.keyaliasPass = "你的密钥别名密码";
}
}
此种方式,需要我们将密钥文件,放在Assets同级目录下才能生效。比如新建一个Build文件夹,用来存放密钥。此时你的密钥名称可以是:
"Build/Keys/user.keystore"。
(感兴趣的小伙伴可以关注我的微信公众号:"Unity实战与独立游戏",后续会分享独立游戏开发的流程和各种解决方案)