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<参数>]]...主类文件和构造函数参数

相关推荐