Android apk 签名
2011年12月24日
Android系统要求所有的程序经过数字签名才能安装,如果没有可用的数字签名,系统将不许安装运行此程序,不管是模拟器还是真实手机。因此,在设备或者是模拟器上运行调试程序之前,必须为应用程序设置数字签名。Android系统仅仅会在安装的时候测试签名证书的有效期,如果应用程序的签名是在安装之后才到期,那么应用程序仍然可以正常启用。
Android通过数字签名来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定用户可不可以安装该应用程序。android的这个签名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,他只是用来让应用程序包自我认证的。Android系统默认自动给应用程序签名,ADT会自动使用debug密钥为应用程序签名,debug密钥是一个名为debug.keystore的文件,位置位于电脑的:
/Documents and Settings/liuhua/.Android/debug.keystore,其中的liuhua是电脑的用户名。
下面介绍手动签名:
1. apk的签名工作可以通过两种方式来完成:
1)通过ADT提供的图形化界面完成apk签名;
2)完全通过DOS命令来完成apk签名
给apk签名一共要用到3个工具(3个命令),分别是:keytool、jarsigner和zipalign
1)keytool:生成数字证书,即密钥,也就是上面说到的扩展名为.keystore的那类文件;
2)jarsigner:使用数字证书给apk文件签名;
3)zipalign:对签名后的apk进行优化,提高与Android系统交互的效率(Android SDK1.6版本开始包含此工具)
通常你开发的所有应用程序,都是使用同样的签名,即使用同一个数字证书。如果你是第一次做Android应用程序签名,上面的3个工具都将用到;但如果你已经有数字证书了,以后再给其它apk签名时,只需要用到jarsigner和zipalign就可以完成。另外,keytool和jarsigner两个工具是jdk自带的,也就意味着生成数字证书和文件签名不是Android的专利;另外从字面上理解jarsigner也能猜得出该工具主要是用来给jar文件签名的。
3个工具默认所在的路径:
1)keytool:该工具位于jdk安装路径的bin目录下;
2)jarsigner:该工具位于jdk安装路径的bin目录下;
3)zipalign:该工具位于Android-sdk-windows/tools/目录下
2.生成未经签名的apk文件
打开Eclipse,在Android工程名称上点击右键,依次选择“Android Tools” - “Export Unsigned Application Package ...”,然后选择一个存储位置保存即可。这样就得到了一个未经签名的apk文件。
3. 使用keytool工具生成数字证书
keytool -genkey -v -keystore liufeng.keystore -alias liufeng.keystore -keyalg RSA -validity 20000
说明:
1)keytool是工具名称,-genkey意味着执行的是生成数字证书操作,-v表示将生成证书的详细信息打印出来,显示在dos窗口中;
2)-keystore liufeng.keystore 表示生成的数字证书的文件名为“liufeng.keystore”;
3)-alias liufeng.keystore 表示证书的别名为“liufeng.keystore”,当然可以不和上面的文件名一样;
4)-keyalg RSA 表示生成密钥文件所采用的算法为RSA;
5)-validity 20000 表示该数字证书的有效期为20000天,意味着20000天之后该证书将失效
4. 使用jarsigner工具为Android应用程序签名
jarsigner -verbose -keystore liufeng.keystore -signedjar notepad_signed.apk notepad.apk liufeng.keystore
说明:
1)jarsigner是工具名称,-verbose表示将签名过程中的详细信息打印出来,显示在dos窗口中;
2)-keystore liufeng.keystore 表示签名所使用的数字证书所在位置,这里没有写路径,表示在当前目录下;
3)-signedjar notepad_signed.apk notepad.apk 表示给notepad.apk文件签名,签名后的文件名称为notepad_signed.apk;
4)最后面的liufeng.keystore 表示证书的别名,对应于生成数字证书时-alias参数后面的名称
5. 使用zipalign工具优化已签名的apk(非必须但建议这么做)
zipalign -v 4 notepad_signed.apk notepad_signed_aligned.apk
说明:
1)zipalign是工具名称,-v表示在DOS窗口打印出详细的优化信息;
2)notepad_signed.apk notepad_signed_aligned.apk 表示对已签名文件notepad_signed.apk进行优化,优化后的文件名为 notepad_signed_aligned.apk
如果你以前的程序是采用默认签名的方式(debug签名),一旦换了新的签名应用将不能覆盖安装,必须将原先的程序卸载掉,才能安装上。
因为程序覆盖安装主要检查两点:
1)两个程序的入口Activity是否相同。两个程序如果包名不一样,即使其它所有代码完全一样,也不会被视为同一个程序的不同版本;
2)两个程序所采用的签名是否相同。如果两个程序所采用的签名不同,即使包名相同,也不会被视为同一个程序的不同版本,不能覆盖安装。
另外,可能有人可能会认为反正debug签名的应用程序也能安装使用,那也没有必要自己签名了嘛。千万不要这样想,debug签名的应用程序有这样两个限制,或者说风险:
1)debug签名的应用程序不能在Android Market上架销售,它会强制你使用自己的签名;
2)debug.keystore在不同的机器上所生成的可能都不一样,就意味着如果你换了机器进行apk版本升级,那么将会出现上面那种程序不能覆盖安装的问题。不要小视这个问题,如果你开发的程序只有你自己使用,当然无所谓,卸载再安装就可以了。但要是你的软件有很多使用客户,这就是大问题了,就相当于软件不具备升级功能!
可以把上面这个完整的步骤写成一个bat文件,这样需要签名的时候只要运行这个bat就可以了。下面给出一个完整的bat文件示例:
@Rem android签名程序 //注释指令
@Rem echo是显示指令 格式:echo [{on|off}] [message]
@echo **********************************************************
@Rem 文件是否存在命令格式:if exist 路径+文件名 命令
@if exist d:sign/MyFirstApp.keystore goto sign
@echo 创建签名文件MyFirstApp.keystore
@Rem keytool命令格式:-genkey产生签名 -alias别名 -keyalg加密算法 -validity有效天数 -keystore生产签名文件名称
keytool -genkey -alias MyFirstApp.keystore -keyalg RSA -validity 40000 -keystore MyFirstApp.keystore
@echo 开始签名:
@Rem jarsigner命令格式:-verbose输出详细信息 -keystore密钥库位置 -signedjar要生成的文件 要签名的文件 密钥库文件
jarsigner -verbose -keystore MyFirstApp.keystore -signedjar MyFirstApp_signed.apk MyFirstApp.apk MyFirstApp.keystore
@goto over
:sign
@echo 开始签名:
jarsigner -verbose -keystore MyFirstApp.keystore -signedjar MyFirstApp_signed.apk MyFirstApp.apk MyFirstApp.keystore
:over
@echo ********************MyFirstApp.apk 签名完成************************
pause
签名完成以后最好再把这个文件压缩一下,使用Android SDK安装路径下tools文件夹里的zipalign进行压缩,以刚才这个文件为例,也可以写成一个bat文件,示例如下:
C:\soft\android-sdk-windows\tools\zipalign -f -v 4 MyFirstApp_signed.apk MyFirstApp_zip.apk
C:\soft\android-sdk-windows\tools\zipalign -c -v 4 MyFirstApp_zip.apk
发表评论
-
服务器自动重启,服务器宕机重启,自动重启weblogic,批处理自动重启服务器
2012-01-20 02:18 1074服务器自动重启,服务器 ... -
自动生成XIP映像文件的一种方法
2012-01-20 02:18 735自动生成XIP映像文件的一种方法 2011年03月04日 ... -
自动生成 MultiTestManager 的执行文件mtm
2012-01-20 02:18 538自动生成 MultiTestManager 的执行文件mtm ... -
批处理隐藏打开IE
2012-01-20 02:18 944批处理隐藏打开IE 2010年06月25日 bat 复 ... -
自动跳转上/下一页的脚本
2012-01-20 02:18 824自动跳转上/下一页的脚本 2010年10月19日 突然觉 ... -
中国建筑
2012-01-19 10:08 583中国建筑 2011年10月15日 北京城建筑造型的文化象 ... -
2011-2-21
2012-01-19 10:08 6202011-2-21 2011年02月21日 ... -
中国文化建筑课大纲
2012-01-19 10:08 606中国文化建筑课大纲 20 ... -
历史高考题中的文史常识整理(之四)
2012-01-19 10:08 676历史高考题中的文史常识整理(之四) 2011年06月15日 ... -
斋名集观
2012-01-19 10:08 582斋名集观 2012年01月11日 书斋溯源与称谓 ... -
ROM修改制作工具软件集合
2012-01-17 02:49 806ROM修改制作工具软件集合 2012年01月11日 1. ... -
OCI
2012-01-17 02:49 544OCI 2011年12月05日 OCI编程的一般过程 ... -
基于X的GNOME、GTK、GDK、XLib、GLib等之间的关系(转)
2012-01-17 02:49 760基于X的GNOME、GTK、GDK、XLib、GLib等之间的 ... -
感慨啊感慨
2012-01-15 22:25 537感慨啊感慨 2011年12月07 ... -
zhan hui
2012-01-15 22:25 468zhan hui 2009年11月10日 2009第十七 ... -
从韩国去别的国家旅游签证的具体申请流程
2012-01-15 22:25 589从韩国去别的国家旅游 ...
相关推荐
Windows版本 Android Apk签名工具
android系统签名工具,用此工具可以生成系统签名文件,使用android studio开发的apk可以用此文件签名
android Apk签名的3种方式
android apk 签名工具,解决eclipse编译的apk无法替换system.img中已存在的apk问题 附有说明文档
windows下android apk签名工具 有说明
Android apk签名
Android apk签名工具,当你修改了apk内部的资源文件后,需要重新签名才能使apk正常安装
Android APK 签名比对
1)keytool:生成数字证书,即密钥,也就是上面说到的扩展名为.keystore的那类文件;
基于Prism+HandyControl实现的Android APK签名工具源码,含EXE可执行文件
Android APK签名异常无法安装-INSTALL-FAILED-SHARED-USER-INCOMPATIBLE 解决
使用工具是方便用户将Apk和签名进行打包,最终形成带签名的Apk。
Android_apk并签名
各种开放平台都需要上传android的正式签名信息,运行此工具很方便查询 #使用方法 ./getcertificate.sh xx.apk
Android生成的Apk签名的源码SignApk.java
此签名工具可以将要签名的apk包用zip文件工具打开,将要更换的图片按照原有尺寸进行替换,然后用此签名工具签名即可,修改原apk包中的图片资源,非常好用
替换签名私钥文件 复制ba脚本t快捷方式到上一层文件夹 待签名apk拖到脚本t快捷方式图标上即可
android 签名工具.
android10 apk签名文件,签名后可以获取系统权限