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. 如何创建C# Closure?

    JavaScript中一个重要的概念就是闭包,闭包在JavaScript中有大量的应用,但是你知道么?C#也可以创建Closure.下面就介绍一下如何在C#中创建神奇的闭包. 在这之前,我们必须先知道 ...

  2. Python 开发初识

    从今天开始记录自己的python开发之路,用博客记录自己的学习经历,以及学习小结,小的项目模块,努力充实,做最好的自己!!!

  3. TF实战:(Mask R-CNN原理介绍与代码实现)-Chapter-8

    二值掩膜输出依据种类预测分支(Faster R-CNN部分)预测结果:当前RoI的物体种类为i第i个二值掩膜输出就是该RoI的损失Lmask 对于预测的二值掩膜输出,我们对每个像素点应用sigmoid ...

  4. R函数详解

    字符串连接函数paste 1.字符串连接:paste(..., sep = " ", collapse = NULL)sep表示分隔符,默认为空格.collapse表示如果不指定值 ...

  5. 类似倒圆角方法输入半径选择实体 kword

    ads_name ename; ads_point adspt; acedInitGet(NULL, TEXT("R")); while (1) { int rc = acedEn ...

  6. A useful logger function in C project.

    #cat log.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include < ...

  7. Python之list、tuple、dict、set

    参考原文 廖雪峰Python PS:来看看Python中比较特殊的几种数据类型list.tuple.dict.set list list(列表)是Python内置的一种数据类型,它是一种有序.可变的集 ...

  8. form表单传输多余参数

    1.使用post提交表单,同时在form的action属性后添加“?参数=参数值”,经验证,可行,但是在浏览器中看不到该参数在form参数中,如下图: 上图未出现courseId属性,form代码如下 ...

  9. WIndows 系统下的常用命令 和 检测方法

    ### 一.检测硬盘速度(Windows 自带工具) #### 使用windows 系统自带的工具测试硬盘读写速度 > 在使用下面命令前,需要获得管理员权限,才会在Dos窗口上显示(否则,一闪而 ...

  10. Linux之iptables(六、rich规则)

    其它规则 当基本firewalld语法规则不能满足要求时,可以使用以下更复杂的规则 rich-rules 富规则,功能强,表达性语言 Direct configuration rules 直接规则,灵 ...