AppInventor2 .keystore 证书文件 - App版本升级的奥秘

« 返回首页

提问:我每次想更新软件的时候,签名不一样还要卸载重装,这样每次更新微数据库里的东西都没了,可以固定签名吗?

这里就涉及到安卓apk打包时的证书文件了,即.keystore文件,我们可以从项目菜单 -> 下载秘钥 进行证书文件的下载,如下:

keystore

keystore

一般每个账户都会生成一个默认的 android.keystore 证书文件,用于apk编译用,标记每个apk的身份,只有固定身份的情况下,apk才能进行覆盖安装(也就是版本升级);如果证书不一样,则必须卸载app再安装,它们的核心区别是:

  • 版本升级里面的微数据库不对丢,app的私有目录文件及数据都不会丢。

  • 卸载重装,app数据全丢失!

如何固定证书?

很简单,下载下来的 android.keystore 证书文件自己妥善保存,通过项目菜单 -> 上传秘钥,所有地方统一使用自己保存的证书文件,就能保证apk打包的身份一致性。当然更推荐生成自己的独有证书,方法见文章末尾。

深入核心原理

每个账户的默认会生成一个证书,用于编译apk时进行签名。打包至源码包中更名为android.keysotre,编译apk时优先使用包里的android.keysotre进行签名,没有的话/tmp中临时生成一个默认证书(新证书身份就不一样了)。

信息相同的情况下,每次生成的签名都是不一样的,这就是不同机器编译出来的AI伴侣不能覆盖升级的原因!!

(密钥不一样、生成的时间戳不一样、证书序列号不一样)

秘钥的生成原理

没啥高深的技术,其实就是Java的工具包 keytool 生成的,命令如下:

keytool -genkey -alias "androidkey" -keystore "debug.keystore" -keyalg "rsa" -storepass "android" -validity 10000 -dname "CN=AppInventor for Android, O=fun123.cn, C=CN"

具体参数很简单,可以让AI辅助解析。其中,10000 是证书过期天数,也是安卓官方建议的值。

Android docs recommend “10000” as the expiration of days.

直接采用命令行方式,可以定制组织或个人的信息(而appinventor生成的证书有些参数直接默认掉了),因此建议使用 keytool 自行生成一个自己的专有证书,用于所有地方的安卓打包,包括正式App发布到应用市场。

文档反馈