当前位置: 代码迷 >> Android >> android 对于apk签名集锦
  详细解决方案

android 对于apk签名集锦

热度:66   发布时间:2016-05-01 18:57:00.0
android 对于apk签名汇总

Android签名主要采用keytool和jarsigner制作apk文件

Android程序的签名和Symbian类似都可以自签名(Self-signed),但是在Android平台中证书初期还显得形同虚设,平时开发时通过ADB接口上传的程序会自动被签有Debug权限的程序。需要签名验证在上传程序到Android Market上时大家都已经发现这个问题了。

?

Android signed制作方法

?

首先在Android开发时没有安装JDK的网友在Sun官方网站下载JDKhttp://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe,其实仅需要中的Keytool和Jarsigner。

?

详细的签名步骤:

?

第一步

C:/Program Files/Java/jdk1.6.0_10/bin>keytool -genkey -alias wendy.keystore
?-keyalg RSA -validity 20000 -keystore wendy.keystore
输入keystore密码:[密码不回显]
再次输入新密码:[密码不回显]
您的名字与姓氏是什么?
? [Unknown]:? wendy

您的组织单位名称是什么?
? [Unknown]:?
home

您的组织名称是什么?
? [Unknown]:?
home
您所在的城市或区域名称是什么?
? [Unknown]:? New York
您所在的州或省份名称是什么?
? [Unknown]:? New York
该单位的两字母国家代码是什么
? [Unknown]:? CN
CN=wendy, OU=home, O=home, L=New York, ST
=New York, C=CN 正确吗?
? [否]:? Y

输入<wendy.keystore>的主密码
??????? (如果和 keystore 密码相同,按回车):

?其中参数-validity为证书有效天数,这里我们写的大些20000天。还有在输入密码时没有回显,只管输入就可以了,一般位数建议使用20位,最后需要记下来后面还要用

?

接下来我们开始为apk文件签名了。

?第二步

? 执行下面这句jarsigner -verbose -keystore wendy.keystore -signedjar wendy_signed.apk wendy.apk wendy.keystore 就可以生成签名的apk文件,这里输入文件wendy.apk,最终生成wendy_signed.apk为Android签名后的APK执行文件。下面提示输入的密码和keytool输入的一样就行了,

?

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

?

?

?

补充:

?

??? 如果需要最终发行你的android程序,必需为apk文件签名。这里apk和jar的签名方式都是一样的,使用sun jdk的jarsigner工具来完成,但是执行时会提示jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed size (expected?xxx but got?xxx bytes)这样的提示,

???? 这些问题主要是由于资源文件造成的,对于android开发来说应该检查res文件夹中的文件,逐个排查。这个问题可以通过升级系统的JDK和JRE版本来解决。

?

转摘自:http://blog.csdn.net/wenhaiyan/article/details/5520964

  相关解决方案