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. CentOS上oracle 11g R2数据库安装折腾记

    1.虚拟机上centos镜像的获取.这里推荐网易镜像站中的CentOS7版本(其他开源镜像站亦可).这里给出链接: http://mirrors.163.com/centos/7.3.1611/iso ...

  2. (转)Hibernate框架基础——多对多关联关系映射

    http://blog.csdn.net/yerenyuan_pku/article/details/52756536 多对多关联关系映射 多对多的实体关系模型也是很常见的,比如学生和课程的关系.一个 ...

  3. arx升级

    如果你打算升级你的ARX或者想在同一个IDE(譬如vs2010)编译多个版本的ARX,那么我希望这篇帖子对你有帮助首先你应该简单了解Objectarx开发的版本对应情况:R15   --- 2000- ...

  4. 如何在网页中浏览和编辑DWG文件 梦想CAD控件

    如何在网页中浏览和编辑DWG文件 梦想CAD控件 www.mxdraw.com 梦想绘图控件5.2  是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 201 ...

  5. Redis系列(十一)--阿里云开发规范

    本文主要介绍阿里云Redis的开发规范,主要从以下几个方面说明: 1.键值设计 2.命令使用 3.客户端使用 4.相关工具 一.键值设计 1.key name设计 1).[建议]:可读性和可管理性 以 ...

  6. Luogu P1311 选择客栈

    暴力 我一开始做这道题先想到的就是暴力... 所以先说一下暴力的做法.首先在输入的时候讲花费小于P的位置标记下来,然后用两层循环枚举所有的两个客栈的组合方案.再用一层循环将两个客栈之间的位置扫一遍,如 ...

  7. (C/C++学习)18.C语言双向链表

    说明:数组提供了连续内存空间的访问和使用,而链表是对内存零碎空间的有效组织和使用.链表又分为单向链表和双向链表,单向链表仅提供了链表的单方向访问,相比之下,双向链表则显得十分方便. 一.单向链表的节点 ...

  8. Gym - 101670G Ice cream samples(CTU Open Contest 2017 尺取法)

    题目: To encourage visitors active movement among the attractions, a circular path with ice cream stan ...

  9. 经典书籍---MySQL经典书籍下载

    以下是一些经典的MySQL书籍电子版,括号内为提取码,若需自取. 欢迎阅读纸质版,尊重作者版权 高性能MySQL_中文版 [ hre3 ] 高性能MySQL_英文版[ m2xj ] MySQL技术内幕 ...

  10. 1002 A+B for Polynomials (PAT (Advanced Level) Practice)

    This time, you are supposed to find A+B where A and B are two polynomials. Input Specification: Each ...