Android中签名机制详细解释

一.签名的原因
1.区分Android开发者使用同样的类名以及包名
开发商可能通过使用相同的包名来混淆替换已经安装的程序,签名可以保证相同的名字,但是签名不同的包不能被替换。APK如果使用一个Key签名,发布时另一个Key签名的文件将无法安装或覆盖老的版本,这样可以防止安装的应用被恶意的第三方覆盖或替换掉
2.Android系统要求所有的程序通过数字签名才能安装。不管是模拟器还是真机,如果没有可用的数字签名,Android系统是不会允许安装运行该程序的。
二.签名的模式
Android系统要求所有的APK程序是要通过可用的数字签名才能安装与运行。无论是在模拟设备上还是在真机设备上。但是我们在平时开发的时候,也没有进行数字签名的操作,为什么我们开发的程序能在Android系统上安装与运行呢?这就是以下将要说的签名的两种模式:调试模式和发布模式。
项目bin目录下的apk也能安装,是属于调试模式的签名而不是发布模式的签名
1.调试模式
⑴.在调试模式下,ADT会自动的使用Debug钥匙为应用程序签名,因此我们可以直接安装运行程序。
⑵.Debug密钥: 一个名为debug.keystore的文件。存放位置:C:\Users\Administrator.android
⑶.Debug签名的应用程序存在两个风险:
①.Debug签名的应用程序不能在Android Market上架销售,它会强制你使用自己的签名;
②.Debug.keystore在不同的机器上所生成的可能都不一样,就意味着如果你换了机器进行apk版本升级,那么将会出现上面那种程序不能覆盖安装的问题。 不要小视这个问题,如果你开发的程序只有你自己使用,当然无所谓,卸载再安装就可以了。但要是你的软件有很多使用客户,这就是大问题了,就相当于软件不具备升级功能! 所以一定要有自己的数字证书来签名;
2.发布模式
当要发布程序时,开发者就需要使用自己的数字证书给APK签名
三.签名的好处
1.应用程序升级
如果希望使用该APP的用户无缝的升级到新的版本,就需要使用同一个数字证书进行签名。因为只有使用同一个数字证书签名,Android系统才允许安装升级的应用程。当新版程序和旧版程序的数字证书相同的时候,Android系统才会认为这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同的话,Android系统认为这是两个不同的程序,会产生冲突。如果想升级应用程序,需要两个条件:①数字证书签名要相同。②应用程序的报名要相同。
2.代码或者数据共享
Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个相同数字签名证书的应用程序公开自己的功能。多个应用程序使用同一个数字签名证书,就可以利用签名的权限检查,在应用程序之间安全的进行数据共享。不同的应用程序之间,想共享数据或者共享代码,具备两个条件:①要让他们运行在同一个进程中。②要让他们使用相同的证书签名。
3.应用程序模块化
Android系统可以允许多个应用陈谷可以使用同一个证书签名并且可以运行在同一个进程中,系统实际上是把他们当作一个单一的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块。
四.签名的方法
1.导出
Android中签名机制详细解释_第1张图片
2. 创建密钥库keystore。输入密钥库导出位置和密码,记住密码,下次Use existing keystore会用到。
Android中签名机制详细解释_第2张图片
3. 填写密钥库信息。填写一些apk文件的密码,使用期限和组织单位的信息
Android中签名机制详细解释_第3张图片
4. 生成带签名的APK文件
Android中签名机制详细解释_第4张图片
5. 如果下次发布版本的时候,使用前面生成的keystore再签名
Android中签名机制详细解释_第5张图片
6.到此结束
7. 签名之后用zipalign(压缩对齐)优化你的APK文件。
未签名的apk不能使用,也不能优化。签名之后的apk谷歌推荐使用zipalign.exe(位于android-sdk-windows\tools目录下)工具对其优化。
⑴.打开命令窗口:cmd
⑵.cd F:\AndroidIDE\adt-bundle-windows-x86_64-20140321\sdk\tools
⑶.将签名的apk文件复制到以上目录下
Android中签名机制详细解释_第6张图片
⑷.zipalign -v 4 Demo_Signed.apk final.apk

你可能感兴趣的:(android开发)