- 来自http://www.cnblogs.com/xiwix/archive/2012/04/15/2447910.html
- 本文主要讲解Android应用程序签名相关的理论知识,包括:什么是签名、为何要给应用程序签名、如何给应用程序签名等。
- 一、什么是签名?
若是这个问题不是放在Android开发中来问,若是是放在一个普通的版块,我想你们都知道签名的含义。可每每就是将一些生活中经常使用的术语放在计算机这种专业领域,你们就开始迷惑了。计算机所作的事情,或者说编程语言所作的事情,不正是在尽量地模拟现实吗?因此,计算机中所说的签名和生活中所说的签名在本质上是同样的,它所起到的做用也是一致的!
让咱们来看看,在现实生活中的签名。签名就意味着在纸上或别处写下本身的名字,或者说在某处打上一个标记做为你本身的一种特有的标识,当别人看到这个签名的时候,他会知道这是和你有关的,而不是其它人。
- 二、为何要给Android应用程序签名?
若是只能用一句简单的话语来回答这个问题的话,我会说:"这是Android系统所要求的"。
Android系统要求每个Android应用程序必需要通过数字签名才可以安装到系统中,也就是说若是一个Android应用程序没有通过数字签名,是没有办法安装到系统中的!Android经过数字签名来标识应用程序的做者和在应用程序之间创建信任关系,不是用来决定最终用户能够安装哪些应用程序。这个数字签名由应用程序的做者完成,并不须要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。
- 三、为何我开发的Android应用程序没有作什么签名也能在模拟器和手机上运行?
你没有给Android应用程序签名并不表明Android应用程序没有被签名。为了方便咱们开发调试程序,ADT会自动的使用debug密钥为应用程序签名。debug密钥?它在哪?debug密钥是一个名为debug.keystore的文件,它的位置:
系统盘符:\Documents and Settings\liufeng\.android\debug.keystore
- "liufeng"对应于你本身的windows操做系统用户名,怎么样,是否是已经找到它了。这也就意味着,若是咱们想拥有本身的签名,而不是让ADT帮咱们签名的话,咱们也要有一个属于本身的密钥文件(*.keystore)。
- 四、Android应用程序签名步骤
- 1)准备工做
apk的签名工做能够经过两种方式来完成:
1)经过ADT提供的图形化界面完成apk签名;
- 2)彻底经过DOS命令来完成apk签名
我比较喜欢第2)种方式,因此下面将讲解如何经过命令的方式完成apk签名。
给apk签名一共要用到3个工具,或者说3个命令,分别是:keytool、jarsigner和zipalign,下面是对这3个工具的简单介绍:
1)keytool:生成数字证书,即密钥,也就是上面说到的扩展名为.keystore的那类文件;
- 2)jarsigner:使用数字证书给apk文件签名;
3)zipalign:对签名后的apk进行优化,提升与Android系统交互的效率(Android SDK1.6版本开始包含此工具)
从这3个工具的做用也能够看出,这3个工具的使用顺序。一般咱们本身所开发的全部应用程序,都是使用一样的签名,即便用同一个数字证书,这就意味着:若是你是第一次作Android应用程序签名,上面的3个工具都将用到;但若是你已经有数字证书了,之后再给其它apk签名时,只须要用到jarsigner和zipalign就能够完成。
为了方便使用上面3个命令,首先须要将上面3个工具所在路径添加到环境变量path中(我说的是为了方便使用,没有说必需要这么作)。怎么配置环境变量就不在此讲解了,这里须要说一下这3个工具默认所在的路径:
1)keytool:该工具位于jdk安装路径的bin目录下;
- 2)jarsigner:该工具位于jdk安装路径的bin目录下;
3)zipalign:该工具位于android-sdk-windows\tools\目录下
- 不知道你们是否注意到keytool和jarsigner两个工具是jdk自带的,也就意味着生成数字证书和文件签名不是Android的专利;另外从字面上理解jarsigner也能猜得出该工具主要是用来给jar文件签名的。
- 2)生成未经签名的apk文件
既然咱们要本身对apk进行签名,就再也不须要ADT默认帮咱们签名了。如何获得一个未经签名的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
Android studio 中查看 sha1是在html
第一步、打开Android Studio的Tools->Open Terminal...android
第二步、输入命令:keytool -v -list -keystore keystore.jks算法
能够换成你本身的 ja编程
好比 : keytool -genkey -v -keystore jackluo.keystore -alias jackluo.keystore -keyalg RSA -validity 20000windows
C:\Users\jackluo\.android>keytool -list -keystore jackluo.keystore编程语言
您的密钥库包含 1 个条目工具
jackluo.keystore, 2015-11-25, PrivateKeyEntry,
证书指纹 (SHA1): AD:FA:D8:AA:D4:A4:0F:33:8A:79:6B:FE:80:5C:B6:51:E7:7B:38:3B 优化
C:\Users\jackluo\.android>
C:\Users\jackluo\.android>keytool -list -keystore jackluo.keystore
输入密钥库口令: 操作系统
密钥库类型: JKS
密钥库提供方: SUN debug
您的密钥库包含 1 个条目
jackluo.keystore, 2015-11-25, PrivateKeyEntry,证书指纹 (SHA1): AD:FA:D8:AA:D4:A4:0F:33:8A:79:6B:FE:80:5C:B6:51:E7:7B:38:3B