android 安装包签名问题探究

1.首先先科普一下,android为何须要给安装包签名:android

    全部的Android应用程序在发布以前都要求开发人员用一个证书进行数字签名,anroid系统不会安装没有进行签名的因为程序。
    平时咱们的程序能够在模拟器上安装并运行,是由于在应用程序开发期间,因为是以Debug面试进行编译的,所以ADT根据会自动用默认的密钥和证书来进行签名,而在以发布模式编译时,apk文件就不会获得自动签名,这样就须要进行手工签名。面试


给apk签名能够带来如下好处:
    1. 应用程序升级:若是你但愿用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是因为只有以同一个证书签名,系统才会容许安装升级的应用程序。若是你采用了不一样的证书,那么系统会要求你的应用程序采用不一样的包名称,在这种状况下至关于安装了一个全新的应用程序。若是想升级应用程序,签名证书要相同,包名称要相同!
    2.应用程序模块化:Android系统能够容许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们做为一个单个的应用程序,此时就能够把咱们的应用程序以模块的方式进行部署,而用户能够独立的升级其中的一个模块
    3.代码或者数据共享:Android提供了基于签名的权限机制,那么一个应用程序就能够为另外一个以相同证书签名的应用程序公开本身的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就能够在应用程序间以安全的方式共享代码和数据了。安全

-----------------------------------------------------------------------------------模块化

2.什么是重签名,什么状况下须要重签名?如何重签名?工具

所谓重签名,就是替换掉安装包以前的证书ID以及签名信息,而后从新生成一个新的证书和签名。通常在自动化测试或者想更换安装包内的资源的时候就显得尤其必要。

测试

重签名的方法:
方法一:命令行

1.将apk包更名为.zip 结尾。打开后删除META-INF 文件夹。而后将后缀改回.apk。debug

2.将新的证书(debug.keystore)复制到与须要从新签名的apk文件相同的目录下(如:复制到D:\Sign);进程

3.打开终端,或命令行,进入D:\Sign目录,运行下面的命令
jarsigner -verbose -keystore debug.keystore -storepass android -signedjar PhoneBook_signed.apk -digestalg SHA1 -sigalg MD5withRSA PhoneBook.apk androiddebugkey    /*解释:-jarsigner是Java的签名工具-verbose参数表示:显示出签名详细信息-keystore表示使用当前目录中的debug.keystore签名证书文件-storepass android表示Keystore密码:“android”-signedjar PhoneBook_signed.apk表示签名后生成的APK名称PhoneBook.apk表示未签名的APK Android软件-digestalg SHA1 -sigalg MD5withRSA:这就是必须加上的参数,若是你是jdk 1.6也不受影响-androiddebugkey表示Key别名。ip

方法二:使用第三方重签名工具。这里再也不赘述。

-------------------------------------

3.如何查看安装包签名信息?

命令行或终端执行  jarsigner -verify -verbose -certs xxx.apk 点击回车便可。

相关文章
相关标签/搜索