- 签名详解(一)中主讲了Dos命令进行签名,本文主讲通过ADT提供的图形化界面完成apk签名的方式;
- 首先在Android stidio中导入工程,点击菜单中“Build”选项,弹出的下拉菜单中的“generate signed APK”
- 然后可以选择创建新的或者选择一个已有的key
- 这里我们创建一个新的key,点击"Create new key store"
- 然后点击OK,此时就已经创建了一个签名文件,接下来就开始对项目apk进行签名
-
点击next,
-
给android stidio设置的密码,如果忘记,点击Reset进行重置密码
选择release 发布模式,最后Finish,就完成了apk的签名
小结
更换新签名的应用将不能覆盖安装,必须将原先的程序卸载掉,才能安装上,因为程序覆盖安装主要检查两点:
1)两个程序的入口Activity是否相同。两个程序如果包名不一样,即使其它所有代码完全一样,也不会被视为同一个程序的不同版本;
2)两个程序所采用的签名是否相同。如果两个程序所采用的签名不同,即使包名相同,也不会被视为同一个程序的不同版本,不能覆盖安装。同一个开发者的多个程序尽可能使用同一个数字证书。
有利于程序升级,当新版程序和旧版程序的数字证书相同时,Android系统才会认为这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同,则Android系统认为他们是不同的程序,并产生冲突,会要求新程序更改包名。
有利于程序的模块化设计和开发。Android系统允许拥有同一个数字签名的程序运行在一个进程中,Android程序会将他们视为同一个程序。所以开发者可以将自己的程序分模块开发,而用户只需要在需要的时候下载适当的模块。
可以通过权限(permission)的方式在多个程序间共享数据和代码。Android提供了基于数字证书的权限赋予机制,应用程序可以共享某些功能或者数据给那些与自己拥有相同数字证书的程序。如果某个权限(permission)的protectionLevel是signature, 则这个权限就只能授予那些跟该权限所在的包拥有同一个数字证书的程序。
debug签名的应用程序有两个风险:
1)debug签名的应用程序不能在Android Market上架销售,它会强制你使用自己的签名;
2)debug.keystore在不同的机器上所生成的可能都不一样,就意味着如果你换了机器进行apk版本升级,那么将会出现上面那种程序不能覆盖安装的问题。不要小视这个问题,如果你开发的软件有很多用户,总不能让所有人都卸载重装吧,那这就相当于软件不具备升级功能!在使用第三方授权(微博,微信)时需要配置注册应用的签名,此签名取决于手机或模拟器中安装的应用的签名,测试时安装的应用是默认签名方式(debug签名),发布时需要更改为自己生成的签名方式并且在开发者平台上的应用信息中也要更改;
- 在签名时,需要考虑数字证书的有效期 :
- 数字证书的有效期要包含程序的预计生命周期,一旦数字证书失效,持有改数字证书的程序将不能正常升级。
- 如果多个程序使用同一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期。
- Android Market强制要求所有应用程序数字证书的有效期要持续到2033年10月22日以后。
- Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。