Android signed APK程序正式签名方法详解
Android程序的签名用户在开发时通过ADB接口上传的程序会自动被签有Debug权限的程序,但是在上传程序到Android Market上或者到设备上时则需要正式签名。Android signed制作方法主要使用Keytool和Jarsigner两个工具制作,具体方法如下:
详细的签名步骤:
第一步生成个人签名密钥库基础数据
用keytool生成证书:
-aliasmyAndroid证书别名,-keyalgRSA指的是采用的RSA算法,-keystoremyandroid.keystore是指生成的证书存储的位置。回车后会提示你输入keystorepassword,这可以自己定,然后是一些个人信息及组织信息,可以轻松搞定。
-validity 缺省时间是90 天,建议设置一个较长的天数具体实例如下:
D:/Android/00STUDY/myandorid>keytool -genkey -alias myandroid -keyalg R
SA-validity20000-keystoremyAndroid.keystore
输入keystore密码:*************
您的名字与姓氏是什么?
[Unknown]:monner
您的组织单位名称是什么?
[Unknown]:monner
您的组织名称是什么?
[Unknown]:monner
您所在的城市或区域名称是什么?
[Unknown]:gz
您所在的州或省份名称是什么?
[Unknown]:gd
该单位的两字母国家代码是什么
[Unknown]:cn
CN=monner,OU=monner,O=monner,L=gz,ST=gd,C=cn正确吗?
[否]: y输入<myAndroid.keystore>的主密码 (如果和 keystore 密码相同,按回车):
第二步apk文件签名命令
方法很简单,执行jarsigner命令行即可,基本命令格式如下:jarsigner -verbose -keystore your-release-key.keystore your-release.apk your-alias-name
具体实例如下:
D:/Android/00STUDY/myandorid/bin>jarsigner -verbose -keystore ./myandroid.keysto
remyAndroid-unsigned.apkmyandroid
输入密钥库的口令短语: *************(程序提示输入的密码和keytool输入的一样即可成功。 )正在添加: META-INF/MANIFEST.MF
正在添加:META-INF/MYANDROI.SF
正在添加:META-INF/MYANDROI.RSA
正在签名:res/layout/main.xml
正在签名:AndroidManifest.xml
正在签名:resources.arsc
正在签名:res/drawable-hdpi/icon.png
正在签名:res/drawable-ldpi/icon.png
正在签名:res/drawable-mdpi/icon.png
正在签名: classes.dex警告: 签名者证书将在六个月内过期。
用户输入的未签名文件会自动变为已签名的apk文件,文件名不变。
更详细Android程序发布和签名可查看SDK http://code.google.com/android/devel/sign-publish.html .
========================================
附: keytool参数和jarsigner参数详解
keytool用法:
-certreq[-v][-protected]
[-alias<别名>][-sigalg<sigalg>]
[-file<csr_file>][-keypass<密钥库口令>]
[-keystore<密钥库>][-storepass<存储库口令>]
[-storetype<存储类型>][-providername<名称>]
[-providerclass<提供方类名称>[-providerarg<参数>]]...
[-providerpath<路径列表>]
-changealias[-v][-protected]-alias<别名>-destalias<目标别名>
[-keypass<密钥库口令>]
[-keystore<密钥库>][-storepass<存储库口令>]
[-storetype<存储类型>][-providername<名称>]
[-providerclass<提供方类名称>[-providerarg<参数>]]...
[-providerpath<路径列表>]
-delete[-v][-protected]-alias<别名>
[-keystore<密钥库>][-storepass<存储库口令>]
[-storetype<存储类型>][-providername<名称>]
[-providerclass<提供方类名称>[-providerarg<参数>]]...
[-providerpath<路径列表>]
-exportcert[-v][-rfc][-protected]
[-alias<别名>][-file<认证文件>]
[-keystore<密钥库>][-storepass<存储库口令>]
[-storetype<存储类型>][-providername<名称>]
[-providerclass<提供方类名称>[-providerarg<参数>]]...
[-providerpath<路径列表>]
-genkeypair[-v][-protected]
[-alias<别名>]
[-keyalg<keyalg>][-keysize<密钥大小>]
[-sigalg<sigalg>][-dname<dname>]
[-validity<valDays>][-keypass<密钥库口令>]
[-keystore<密钥库>][-storepass<存储库口令>]
[-storetype<存储类型>][-providername<名称>]
[-providerclass<提供方类名称>[-providerarg<参数>]]...
[-providerpath<路径列表>]
-genseckey[-v][-protected]
[-alias<别名>][-keypass<密钥库口令>]
[-keyalg<keyalg>][-keysize<密钥大小>]
[-keystore<密钥库>][-storepass<存储库口令>]
[-storetype<存储类型>][-providername<名称>]
[-providerclass<提供方类名称>[-providerarg<参数>]]...
[-providerpath<路径列表>]
-help
-importcert[-v][-noprompt][-trustcacerts][-protected]
[-alias<别名>]
[-file<认证文件>][-keypass<密钥库口令>]
[-keystore<密钥库>][-storepass<存储库口令>]
[-storetype<存储类型>][-providername<名称>]
[-providerclass<提供方类名称>[-providerarg<参数>]]...
[-providerpath<路径列表>]
-importkeystore[-v]
[-srckeystore<源密钥库>][-destkeystore<目标密钥库>]
[-srcstoretype<源存储类型>][-deststoretype<目标存储类型>]
[-srcstorepass<源存储库口令>][-deststorepass<目标存储库口令>]
[-srcprotected][-destprotected]
[-srcprovidername<源提供方名称>]
[-destprovidername<目标提供方名称>]
[-srcalias<源别名>[-destalias<目标别名>]
[-srckeypass<源密钥库口令>][-destkeypass<目标密钥库口令>]]
[-noprompt]
[-providerclass<提供方类名称>[-providerarg<参数>]]...
[-providerpath<路径列表>]
-keypasswd[-v][-alias<别名>]
[-keypass<旧密钥库口令>][-new<新密钥库口令>]
[-keystore<密钥库>][-storepass<存储库口令>]
[-storetype<存储类型>][-providername<名称>]
[-providerclass<提供方类名称>[-providerarg<参数>]]...
[-providerpath<路径列表>]
-list[-v|-rfc][-protected]
[-alias<别名>]
[-keystore<密钥库>][-storepass<存储库口令>]
[-storetype<存储类型>][-providername<名称>]
[-providerclass<提供方类名称>[-providerarg<参数>]]...
[-providerpath<路径列表>]
-printcert[-v][-file<认证文件>]
-storepasswd[-v][-new<新存储库口令>]
[-keystore<密钥库>][-storepass<存储库口令>]
[-storetype<存储类型>][-providername<名称>]
[-providerclass<提供方类名称>[-providerarg<参数>]]...
[-providerpath <路径列表>]jarsigner用法 : [选项] jar 文件别名
jarsigner-verify[选项]jar文件
[-keystore<url>]密钥库位置
[-storepass<口令>]用于密钥库完整性的口令
[-storetype<类型>]密钥库类型
[-keypass<口令>]专用密钥的口令(如果不同)
[-sigfile<文件>].SF/.DSA文件的名称
[-signedjar<文件>]已签名的JAR文件的名称
[-digestalg<算法>]摘要算法的名称
[-sigalg<算法>]签名算法的名称
[-verify]验证已签名的JAR文件
[-verbose]签名/验证时输出详细信息
[-certs]输出详细信息和验证时显示证书
[-tsa<url>]时间戳机构的位置
[-tsacert<别名>]时间戳机构的公共密钥证书
[-altsigner<类>]替代的签名机制的类名
[-altsignerpath<路径列表>]替代的签名机制的位置
[-internalsf]在签名块内包含.SF文件
[-sectionsonly]不计算整个清单的散列
[-protected]密钥库已保护验证路径
[-providerName<名称>]提供者名称
[-providerClass<类>加密服务提供者的名称
[-providerArg<参数>]]...主类文件和构造函数参数