很多开发人员不明白apk文件为什么必须签名才能发布,其实签名并非从android平台开始,在过去从symbian os就开始需要签名才能发布,这样可以保证每个应用程序开发商合法id,由于android平台没有uid3的限制,部分开放商可能通过使用相同的package name来混淆替换已经安装的程序。不过目前比较好的是android中所有的permission使用都是免费的,但从目前git项目中出现的certinstaller.git包不知道是不是和证书有关,而近几年symbian os从v9.0开始如果应用程序涉及敏感操作需要capability才能使其真机顺利安装,同时部分高级权限需要购买和symbian signed测试才能发布,保证系统的安全可靠性,而这点android平台较为宽松。常规情况下从adb比如eclipse的adt插件安装到模拟器或真机的测试程序经过debug标记签名,所以我们签名是都需要先创建key公钥通过rsa运算才实现加密。下面详细说明:

一、为什么要签名: 

1、发送者的身份认证,由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包不被替换
2、保证信息传输的完整性,签名对于包中的每个文件进行处理,以此确保包中内容不被替换,防止交易中的抵赖发生,Market对软件的要求

二、签名的说明:
1、所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序
2、Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证
3、如果要正式发布一个Android应用,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布
4、 数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能
5、签名后需使用zipalign优化程序
6、Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序

1.Eclipse工程中右键工程,弹出选项中选择 android工具-生成签名应用包:

 


2.选择需要打包的android项目工程:

 


3.如果已有私钥文件,选择私钥文件 输入密码,如果没有私钥文件见 第6和7步创建私钥文件:

 



4.输入私钥别名和密码:

 


5.选择APK存储的位置,并完成设置 开始生成:

 


6.没有私钥文件的情况,创建私钥文件:

 


7.输入私钥文件所需信息,并创建:

posted on 2011-08-10 18:01  zhangkai281  阅读(2134)  评论(0编辑  收藏  举报