提问:我每次想更新软件的时候,签名不一样还要卸载重装,这样每次更新微数据库里的东西都没了,可以固定签名吗?
这里就涉及到安卓apk打包时的证书文件了,即.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发布到应用市场。
扫码添加客服咨询