我是靠谱客的博主 大方花卷,最近开发中收集的这篇文章主要介绍Android signed APK,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Android程序的签名用户在开发时通过ADB接口上传的程序会自动被签有Debug权限的程序,但是在上传程序到Android Market上或者到设备上时则需要正式签名。Android signed制作方法主要使用Keytool和Jarsigner两个工具制作,具体方法如下:

详细的签名步骤:


第一步 生成个人签名密钥库基础数据


用keytool生成证书: 
-alias myAndroid 证书别名,-keyalg RSA  指的是采用的RSA算法,-keystore myandroid.keystore是指生成的证书存储的位置。回车后会提示你输入keystore password,这可以自己定,然后是一些个人信息及组织信息,可以轻松搞定。

-validity 缺省时间是90 天,建议设置一个较长的天数  

具体实例如下:

D:Android0STUDYmyandorid>keytool -genkey -alias myandroid -keyalg R
SA -validity 20000 -keystore myAndroid.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:Android0STUDYmyandoridbin>jarsigner -verbose -keystore .myandroid.keysto
re  myAndroid-unsigned.apk    myandroid
输入密钥库的口令短语: *************(程序提示输入的密码和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 <参数>]] ... 主类文件和构造函数参数

************************************************************************************************************************************************************


C:UsersPauson>cd C:Program FilesJavajdk1.6.0_01bin

C:Program FilesJavajdk1.6.0_01bin>keytool -genkey -v -keystore my.keystore -alias key_name -keyalg RSA -validity 50000
输入keystore密码:paulson    
再次输入新密码: paulson
您的名字与姓氏是什么?
  [Unknown]:  yan
您的组织单位名称是什么?
  [Unknown]:  上海典酷信息有限公司
您的组织名称是什么?
  [Unknown]:  典酷
您所在的城市或区域名称是什么?
  [Unknown]:  上海
您所在的州或省份名称是什么?
  [Unknown]:  上海
该单位的两字母国家代码是什么
  [Unknown]:  86
CN=yan, OU=上海典酷信息有限公司, O=典酷, L=上海, ST=上海, C=86 正确吗?
  [否]:  是

正在为以下对象生成 1,024 位 RSA 密钥对和自签名证书 (SHA1withRSA)(有效期为 50,00
0 天):
         CN=yan, OU=上海典酷信息有限公司, O=典酷, L=上海, ST=上海, C=86
输入<key_name>的主密码
        (如果和 keystore 密码相同,按回车):paulson
[正在存储 my.keystore]


完成签名:
jarsigner -verbose -keystore my.keystore pedometer.apk key_name

C:Program FilesJavajdk1.6.0_01bin>jarsigner -keystore my.keystore D:Pedometer.apk key_name
输入密钥库的口令短语:

C:Program FilesJavajdk1.6.0_01bin>

jarsigner -keystore E:androidmy01.keystore E:androidlotterygift(android).apk key_name01

最后

以上就是大方花卷为你收集整理的Android signed APK的全部内容,希望文章能够帮你解决Android signed APK所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部