Android 数字签名
同一个开发人员的多个程序尽可能使用同一个数字证书,这能够带来下面优点。
(1)有利于程序升级,当新版程序和旧版程序的数字证书同样时,Android系统才会觉得这两个程序是同一个程序的不同版本号。假设新版程序和旧版程序的数字证书不同样,则Android系统觉得他们是不同的程序,并产生冲突,会要求新程序更改包名。
(2)有利于程序的模块化设计和开发。Android系统同意拥有同一个数字签名的程序执行在一个进程中,Android程序会将他们视为同一个程序。所以开发人员能够将自己的程序分模块开发,而用户仅仅须要在须要的时候下载适当的模块。

(3)能够通过权限(permission)的方式在多个程序间共享数据和代码。Android提供了基于数字证书的权限赋予机制。应用程序能够和其它的程序共享概功能或者数据给那那些与自己拥有同样数字证书的程序。假设某个权限(permission)的protectionLevel是signature,则这个权限就仅仅能授予那些跟该权限所在的包拥有同一个数字证书的程序。
在签名时,须要考虑数字证书的有效期:
(1)数字证书的有效期要包括程序的估计生命周期。一旦数字证书失效,持有改数字证书的程序将不能正常升级。

(2)假设多个程序使用同一个数字证书,则该数字证书的有效期要包括全部程序的估计生命周期。
(3)Android Market强制要求全部应用程序数字证书的有效期要持续到2033年10月22日以后。

Android数字证书包括下面几个要点:
(1)全部的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序
(2)Android程序包使用的数字证书能够是自签名的,不须要一个权威的数字证书机构签名认证
(3)假设要正式公布一个Android ,必须使用一个合适的私钥生成的数字证书来给程序签名。而不能使用adt插件或者ant工具生成的调试证书来公布。
(4)数字证书都是有有效期的,Android仅仅是在应用程序安装的时候才会检查证书的有效期。假设程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。
(5)Android使用标准的java工具 Keytool and Jarsigner 来生成数字证书,并给应用程序包签名。
(6)使用zipalign优化程序。
Android系统不会安装执行不论什么一款未经数字签名的apk程序,不管是在模拟器上还是在实际的物理设备上。

Android的开发工具(ADT插件和Ant)都能够协助开发人员给apk程序签名,它们都有两种模式:调试模式(debug mode)和公布模式(release mode)。

在调试模式下,android的开发工具会在每次编译时使用调试用的数字证书给程序签名,开发人员无须关心。
当要公布程序时。开发人员就须要使用自己的数字证书给apk包签名,能够有两种方法。
(1)在命令行下使用JDK中的和Keytool(用于生成数字证书)和Jarsigner(用于使用数字证书签名)来给apk包签名。
(2)使用ADT Export Wizard进行签名(假设没有数字证书可能须要生成数字证书)。
使用Keytool和Jarsigner给程序签名
命令:keytool -genkey -v -keystore XSM_Mobile_Client.keystore -alias XSM_Mobile_Client -keyalg RSA -validity 20000
命令函数解释:-keystore ophone.keystore 表示生成的证书。能够加上路径(默认在用户主文件夹下,稍后会具体说说关于主文件夹)。-alias
ophone 表示证书的别名是ophone;-keyalg RSA 表示採用的RSA算法。-validity 20000表示证书的有效期是20000天
以20000天有效数字签名证书为例,运行CMD命令:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanNwcGluZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


注意:密钥库口令需自己创建,而且最少为6个字符。前后须要输入2次,且一致,存储之后的 android.keystore 存放在主文件夹以下,可能非常多朋友不知道也不理解主文件夹是啥。那接下来我就说说关于主文件夹

我PC的主文件夹为:C:\Users\Administrator ,请看上图,我是在 C:\Users\Administrator
下运行的生成命令,所以相应的签名包也会生成在 C:\Users\Administrator 文件夹下,等会上截图,具体说说

接下来就是签名应用程序,也就是 Android Apk 程序,CMD演示样例:
命令行:jarsigner -verbose -keystore android.keystore -signedjar
Engineer-Jsp_20141028.apk Engineer-Jsp_20140424.apk android
命令函数解释:jarsigner
是 JDK自带的工具。Engineer-Jsp_20140424.apk 是未生成签名的APK程序。须要与数字证书(上面第一张CMD图生成的android.keystore)放置统一文件夹下,也就是主文件夹啦。signedjar
Engineer-Jsp_20141028.apk 是数字证书验证之后的APK程序名字
密钥库password短语:与第一副图创建的密钥一致


主文件夹加入完数字签名前后的对比图:


Eclipse ADT 生成

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanNwcGluZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


弹出一个对话框,点击 Next 继续往下,出现例如以下对话框:


由于我保存的地址。已经存在一个名为android.keystore的签名。所以报错。更改android.keystore为其它名字就能够了,然后点击Next,例如以下



所有完毕之后,点击 Finish 就OK了,然后去之前设置的保存地址查看就OK了~!!




Android Application Digital Signatures - Android 数字签名的更多相关文章

  1. android studio - 导入工程报错[Plugin with id 'com.android.application' not found]

    出错现象: 大概意思是找不到:com.android.application 插件,以上现象对于初学者来说会经常碰到,下面分析下产生的原因. 原因分析 首先来看看导入后的工程结构: 对于此工程结构,是 ...

  2. 简单的调用OpenCV库的Android NDK开发 工具Android Studio

    前言 本博客写于2017/08/11, 博主非专业搞安卓开发, 只是工作的需要倒腾了下Android NDK相关的开发, 博文中有什么不正确.不严格的地方欢迎指正哈    本文后续也许还会有删改, 就 ...

  3. Android application testing with the Android test framework

    目录(?)[-] Android automated testing 1 How to test Android applications Tip 2 Unit tests vs functional ...

  4. My First Android Application Project 第一个安卓应用

    一.前言: 安卓(Android):是一种基于Linux的自由及开放源代码的操作系统,主要用在移动设备上,如手机.平板电脑.其他的设备也有使用安卓操作系统,比如:电视机,游戏机.数码相机等等. 二.具 ...

  5. Failed to apply plugin [id 'com.android.application'] 和 Could not find com.android.tools.build:gradle:2.XX的最正确的解决方法

    发现android studio是真的可爱啊,上一秒还没问题可以build运行,下一秒就出错...好,你任性,你牛逼.. 说下今天又遇到的两个问题:Failed to apply plugin [id ...

  6. Android Application 对象介绍

    What is Application Application和Actovotu,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application ...

  7. eclipse:File->New没有Android Application Project的解决办法

    我的Eclipse版本是:Kepler Service Release 1,截图: 解决步骤: 1.单击Window,选择Customize Perspective,如图: 2.勾选Android A ...

  8. Professional Android Application Development

    Professional Android Application Development 访问地址 http://docs.google.com/fileview?id=0ByVHV5sjM4fNNj ...

  9. Plugin with id 'com.android.application' not found.

    构建报错: Error:(1, 0) Plugin with id 'com.android.application' not found. <a href="openFile&quo ...

随机推荐

  1. linux使用crontab实现PHP执行计划定时任务

    linux使用crontab实现PHP执行计划定时任务 前几天写过一篇文章,利用单纯的php实现定时执行任务,但是效率不佳,对于linux来说用crontab实现更加合理 首先说说cron,它是一个l ...

  2. RabbitMQ系列(一)--消息中间件MQ如何去选择

    MQ在项目中的应用很普遍,本人所在项目组使用的是ActiveMQ,但是后面介绍的RabbitMQ... 一.应用场景 1.异步处理 2.流量削峰.秒杀 3.日志处理,推荐kafka 4.应用解耦 二. ...

  3. 02C语言基本语法

    C语言基本语法 注释 //行注释 /* 块注释*/ 标识符 标识符是用来标识变量.函数.任何其他用户自定义项目的名称:一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母.下划 ...

  4. 03匿名内部类、eclipse快捷键、String相关知识

    03匿名内部类.eclipse快捷键.String相关知识-2018.7.11 1.匿名内部类(只针对重写一个方法时候使用,不能向下转型,因为没有子类类名) new Inter(){ public v ...

  5. <MyBatis>入门一 HelloWorld

    1.HelloWorld 导入依赖 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependen ...

  6. 39页第7题 计算2的i次方之和

    /*计算2的i次方之和*/ #include<stdio.h> #include<math.h>/*调用math.h文件中的函数*/ int main(void) { int ...

  7. Linux—Ubuntu14.0.5配置JAVA环境

    1. 前往ORACLE官网下载最新版本的Java JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html,默认下载 ...

  8. python正则表达式的好文章(转)

    http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html https://blog.csdn.net/shw800/article/det ...

  9. springcloud(十二):Ribbon客户端负载均衡介绍

    springcloud(十二):Ribbon客户端负载均衡介绍 Ribbon简介 使用分布式微服务脚骨的应用系统,在部署的时候通常会为部分或者全部微服务搭建集群环境,通过提供多个实例来提高系统的稳定型 ...

  10. JavaSE 学习笔记之集合框架(十八)

    集合框架:,用于存储数据的容器. 特点: 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区 ...