Android 应用程序签名

本文主要介绍Android应用程序签名的相关理论知识以及如何发布Android应用程序。

1.签名的概念

为大家所熟知的日常生活中的签名,它是代表某个人的特殊标记,用于唯一标识某个人。而Android 应用程序的签名的本质与日常生活中的签名是一样的,应用程序中的签名也开发者在应用程序中打上的一种特殊标记,别人在看到这个标记时,他会知道是这个应用程序与你有关或者是你开发的,而不是别人。

2.Android应用程序一定要签名吗

是的,Google发布的Android系统要求每个发布的应用程序都必须签名。Android应用程序的签名是用来建立程序的开发者与程序包之间的信任关系,当更新应用程序时,Android系统要求新/旧两个应用程序的签名必须一致。

与windows上签名的意义不同的是,Android的签名不需要权威的数字证书机构认证,不会用于决定终端用户可以安装哪些应用程序,它是程序的作者自己完成的,是Android系统中程序包的一种自我认证的机制。

3.Debug签名

如果你是一个刚入门的开发者,你会发现你开发的应用程序没有经过自己的签名也可以安装在Android系统的机器上,这是因为ADT工具使用debug数字证书(存在于debug.keystore)自动为每个处于开发阶段的应用程序打上了debug签名。

debug.keystore 也被称为debug 密钥库,为app签名时必备的文件,使用Eclips时会安装ADT(Android Development Tools)插件,ADT自带debug 密钥库(也可称作证书库,因为*.keystore是用来存放数字证书的),文件放在:

系统盘:\Users\zhangsan\.android\ debug.keystore。不同的系统密匙库的位置可能存在细微的差异。

通常情况下,在开发阶段的应用程序是不需要作者创建一个自己的密钥库文件(*.keystore),但是如果你要发布已经开发好的应用程序就必须使用自己的签名,debug签名的应用程序是不能发布到应用商店的。

4.如何给应用程序签名

App的签名可以通过两种方式来完成,使用ADT提供的图形化界面来完成,或者使用命令行(DOS)命令进行签名。

1)图形化工具进行签名

第一步:导出

选择项目->右键->export -> export Android Application(这里我使用ZHGL这个Android App项目进行演示)

第二步:选择要导出的app工程

第三步:创建密钥库(*.keystore)

第一次使用选择 create new keystore,指定密钥库(.keystore)存放的位置:C:\Users\chen.jian\Desktop\AndroidSignature,并设置密钥库的密码。

PS:密钥可以为多个应用程序签名哦,建议开发者拥有一个密钥库就行了。

第四步:创建签名证书

签名证书的概念:现实环境中,证书会携带作者/证书内容等相关信息,然后会有颁发证书机构的签名或者印章,而与这里的签名证书在本质上相同,你设定的密码相当于签名,签名工具会使用此密码对apk进行加密。

——Alias:密钥库的别名(作者自行设定,不区分大小写,密钥库可以存放多个签名证书(数字证书),不同的app 建议创建不同的签名证书)

——Password:密钥密码

——Validity:签名证书的有效期限

第五步:生成带签名的apk文件

第六步:使用创建好的证书对apk进行签名。

2)DOS命令进行签名

DOS环境下对apk进行签名需要用到三个工具:keytool、jarsigner、zipalign

  • Keytool:创建密匙库、创建数字证书,在JDK的bin安装目录下(如:C:\Program Files\Java\jdk1.6.0_10\bin)
  • Jarsigner:对apk进行签名,也在JDK的bin安装目录下
  • Zipalign:对签名后的apk文件进行优化,提高虚拟机的执行效率,存在于SDK的tools目录下(如:D:\android-sdk-windows\tools\)

可以看出对apk进行签名并非是Android的专利,而是Java时代初就已经存在了。

PS:如果要在DOS环境下使用这几个工具就需要将其添加到windows的环境变量中。

第一步:导出未签名的apk文件

第二步:使用keytool创建数字证书

keytool -genkey -v -keystore ChenJian.keystore -alias androidkeystore_v1 -keyalg RSA -validity 20000

说明:

  • keytool是工具名称,-genkey意味着执行的是生成数字证书操作,-v表示将生成证书的详细信息打印出来,显示在dos窗口中;
  • -keystore ChenJian.keystore 表示生成的数字证书的文件名为" ChenJian.keystore ";
  • -alias androidkeystore_v1 表示证书的别名为" androidkeystore_v1";
  • -keyalg RSA 表示生成密钥文件所采用的算法为RSA;
  • -validity 20000 表示该数字证书的有效期为20000天,意味着20000天之后该证书将失效

在执行上面的命令生成数字证书文件时,会提示你输入一些信息,包括证书的密码。

密匙库会被放在当前目录C:\Users\chen.jian\ ChenJian.keystore,你也可以自己指定目录。

第三步 使用jarsigner给app签名:

jarsigner -verbose -keystore ChenJian.keystore -signedjar Signed_ZHGL.apk Unsigned_ZHGL.apk androidkeystore_v1

说明:

  • jarsigner是工具名称,-verbose表示将签名过程中的详细信息打印出来,显示在dos窗口中;
  • -keystore ChenJian.keystore 表示签名所使用的数字证书所在位置,这里没有写路径,表示在当前目录下;
  • -signedjar Signed_ZHGL.apk Unsigned_ZHGL.apk表示给Unsigned_ZHGL.apk文件签名,签名后的文件名称为Signed_ZHGL.apk;

最后面的androidkeystore_v1 表示证书的别名,对应于生成数字证书时-alias参数后面的名称。

第四步 优化app:

zipalign -v 4 Signed_ZHGL.apk Signed_aligned_ZHGL.apk

说明:

  • zipalign是工具名称,-v表示在DOS窗口打印出详细的优化信息;
  • Signed_ZHGL.apk Signed_aligned_ZHGL.apk 表示对已签名文件Signed_ZHGL.apk进行优化,优化后的文件名为Signed_aligned_ZHGL.apk
  • 说明:如果你以前的程序是采用默认签名的方式(即debug签名),一旦换了新的签名应用将不能覆盖安装,必须将原先的程序卸载掉,才能安装上。因为程序覆盖安装主要检查两点:
  • 两个程序的入口Activity是否相同。两个程序如果包名不一样,即使其它所有代码完全一样,也不会被视为同一个程序的不同版本;
  • 两个程序所采用的签名是否相同。如果两个程序所采用的签名不同,即使包名相同,也不会被视为同一个程序的不同版本,不能覆盖安装。
  • 另外,可能有人可能会认为反正debug签名的应用程序也能安装使用,那也没有必要自己签名了嘛。千万不要这样想,debug签名的应用程序有这样两个限制,或者说风险:
  • debug签名的应用程序不能在Android Market上架销售,它会强制你使用自己的签名;

debug.keystore在不同的机器上所生成的可能都不一样,就意味着如果你换了机器进行apk版本升级,那么将会出现上面那种程序不能覆盖安装的问题。不要小视这个问题,如果你开发的程序只有你自己使用,当然无所谓,卸载再安装就可以了。但要是你的软件有很多使用客户,这就是大问题了,就相当于软件不具备升级功能!

5.数字证书用法

1)共享数字证书的优势

  • 有利于程序升级,当新版程序和旧版程序的数字证书相同时,Android系统才会认为这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同,则Android系统认为他们是不同的程序,并产生冲突,会要求新程序更改包名。
  • 有利于程序的模块化设计和开发。Android系统允许拥有同一个数字签名的程序运行在一个进程中,Android程序会将他们视为同一个程序。所以开发者可以将自己的程序分模块开发,而用户只需要在需要的时候下载适当的模块。
  • 可以通过权限(permission)的方式在多个程序间共享数据和代码。Android提供了基于数字证书的权限赋予机制,应用程序可以和其他的程序共 享概功能或者数据给那那些与自己拥有相同数字证书的程序。如果某个权限(permission)的protectionLevel是signature, 则这个权限就只能授予那些跟该权限所在的包拥有同一个数字证书的程序。

2)数字证书的有效期

  • 数字证书的有效期要包含程序的预计生命周期,一旦数字证书失效,持有改数字证书的程序将不能正常升级。
  • 如果多个程序使用同一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期。
  • Android Market强制要求所有应用程序数字证书的有效期要持续到2033年10月22日以后。

3)数字证书的要点

  • Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证
  • 如果要正式发布 一个Android,必须使用一个合适的私钥生成的数字证书来给程序签名 ,而不能使用adt插件 或者ant工具生成的调试证书来发布。
  • 数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。
  • Android使用标准的java工具 Keytool and Jarsigner 来生成数字证书,并给应用程序包签名。

6.发布应用程序

网络上都提供了在Google Play上发布应用程序的流程,我这里只简单介绍国内的应用商店(360)如何发布应用程序。

第一步:首先你必须要有一个360的账号,360的账号是通用的(可以在安全卫士、手机助手、发布应用程序···),与普通的账号不同的是,如果要在360应用商店发布软件,就必须进行实名认证,手持身份证的照片。

第二步:登陆http://dev.360.cn/ 选择发布应用程序 -> 进入新的页面后选择创建软件

第三步:按照提示填写软件的相关信息,值得注意的是360对上传的图片尺寸有特殊的要求,最好看清楚之后再截屏、编辑,不然会浪费不少时间。

第四步:等待审核通过

PS:注册过开发者账号过后,可以选择首发、云端测试、软件加固、广告接入等功能。

时间: 2024-10-07 18:44:10

Android 应用程序签名的相关文章

Android应用程序签名

Android系统要求每一个Android应用程序必须要经过数字签名才能够安卓到系统中.Android通过数字签名来标识应用程序的作者和在应用程序之间建立信任关系,这个数字签名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程序自我认证的. Android应用程序签名的影响 使用同一个签名证书,则不同签名的应用无法覆盖生成的应用程序,即使包名相同,因此,主要的签名影响有以下两点: 1.应用升级.使用相同签名的升级软件可以正常覆盖安装老版本的软件,否则,系统发现签名证书不

android应用程序签名(转)

概述 Android系统要求,所有的程序经过数字签名后才能安装.Android系统使用这个证书来识别应用程序的作者,并且建立程序间的信任关系.证书不是用于用户控制哪些程序可以安装.证书不需要授权中心来签名:Android应用程序上使用自己签名的证书是完全允许且普遍的. 理解Android应用程序签名有以下几个重要点: 所有的应用程序都必须签名.系统不会安装任何一个不签名的程序. 你可以使用自己的证书来签名.不需要任何授权中心. 当你要为最终用户发布你的应用程序的时候,你必须签入一个合适的密钥.你

Android应用程序签名详解

http://blog.csdn.net/lyq8479/article/details/6401093 本文主要讲解Android应用程序签名相关的理论知识,包括:什么是签名.为什么要给应用程序签名.如何给应用程序签名等. 1.什么是签名?      如果这个问题不是放在Android开发中来问,如果是放在一个普通的版块,我想大家都知道签名的含义.可往往就是将一些生活中常用的术语放在计算机这种专业领域,大家就开始迷惑了.计算机所做的事情,或者说编程语言所做的事情,不正是在尽可能地模拟现实吗?所

Android应用程序签名过程和解析过程分析

在正式解释Android应用程序签名过程之前,作为铺垫,还得先讲讲最基本的一些概念. 非对称加密算法 非对称加密算法需要两个密钥:公开密钥(简称公钥)和私有密钥(简称私钥).公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密:如果用私钥对数据进行加密,那么只有用对应的公钥才能解密.因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法. 非对称加密算法是数字签名和数字证书的基础,大家非常熟悉的RSA就是非对称加密算法的一种实现. 消息摘要算法 消息摘要算法(Mes

Android应用程序签名详解 简介

转自: http://blog.csdn.net/lyq8479/article/details/6401093 本文主要讲解Android应用程序签名相关的理论知识,包括:什么是签名.为什么要给应用程序签名.如何给应用程序签名等. 1.什么是签名?      如果这个问题不是放在Android开发中来问,如果是放在一个普通的版块,我想大家都知道签名的含义.可往往就是将一些生活中常用的术语放在计算机这种专业领域,大家就开始迷惑了.计算机所做的事情,或者说编程语言所做的事情,不正是在尽可能地模拟现

【转】android应用程序签名

概述 Android系统要求,所有的程序经过数字签名后才能安装.Android系统使用这个证书来识别应用程序的作者,并且建立程序间的信任关系.证书不是用于用户控制哪些程序可以安装.证书不需要授权中心来签名:Android应用程序上使用自己签名的证书是完全允许且普遍的. 理解Android应用程序签名有以下几个重要点: 所有的应用程序都必须签名.系统不会安装任何一个不签名的程序. 你可以使用自己的证书来签名.不需要任何授权中心. 当你要为最终用户发布你的应用程序的时候,你必须签入一个合适的密钥.你

3、Android应用程序签名及发布

一.问个问题,为何我们需要签名以及版本控制? 程序做好了,我们要放到Market上进行商业发布. 二.发布步骤 [准备发布] 1)移除log , 设置版本编号和名称. 2)签名,通过ADT工具. 3)针对你的发布终端最后发布测试. 4)更新发布资源. 5)准备好你应用程序依赖的远程服务器. [发布给用户] 直接APK传播 放在网站上供下载,OTA服务器 放在Market上供下载 [自动版本升级功能] 方法一 : 1,提供http的apk地址 , 并且提供一个webservice检测最新版本 2,

android apk的签名和权限问题

一. android apk的签名问题(http://blog.csdn.net/lyq8479/article/details/6401093) 1.为什么要给Android应用程序签名?      如果只能用一句简单的话语来回答这个问题的话,我会说:“这是Android系统所要求的”.      Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的!Android通过数字签名来

Android应用程序破解(反编译)

一.apktools进行反编译 1.首先安装需要JAVA环境(JDK和JRE) 设置JAVA环境变量 CLASSPATH       %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar JAVA_HOME     C:\Program Files\Java\jdk1.8.0_20 Path    %JAVA_HOME%\bin;C:\Program Files\Java\jre1.8.0_20\bin 2.下载apktools并解压 (1)下载apk