什么是签名?

Android 要求所有已安装的应用程序都使用数字证书做数字签名,数字证书的私钥由开发者持有。

Android 使用证书作为标识应用程序作者的一种方式,证书不需要由证书认证中心签名,使用自制签名证书。

Android 系统不会安装或运行没有正确签名的应用,此规则适用于任何地方运行的Android系统。因此在真机或模拟器上运行或者调试应用前,必须为其设置好签名。

两种签名:

1、调试模式下签名   (sdk 为应用主动生成一个签名证书,调试模式下签名的应用不能对外发布,因为由构建工具创建的证书是不安全的,应用商店不接受调试证书签名的apk)

2、公布模式下签名 (需要生成自己的证书)

注:给自己开发的app签名,就代表着我们自己的版权,之后要进行升级,也必须要使用相同的签名才可以,签名代表着自己的身份(即 keystore,是一个包括私人秘钥集合的二进制文件),创建的keystore 多个app可以使用同一签名。

为什么要有签名?

开发Android的人众多,完全有可能把雷鸣、包名命名成相同的名字,需要签名来区分,由于开发商可能通过使用相同包名来混淆替换已经安装的程序,签名可以保证相同名字,但是签名不同的包不被替换。

签名机制在Android应用和框架中有着十分重要的作用,例如:Android系统禁止跟新安装签名不一致的apk,若应用需要使用system权限,必须保证apk签名与framwork签名一致。

为什么要这么做?

  • 应用程序升级 -  当发布应用的更新时,如果想染给用户无缝的升级到新版本,需要继续使用相同的某个或某套证书来签名更新包,当系统安装应用的更新时,它会比较现在的版本和新版本的证书,如果证书吻合,包括证书数据和顺序都吻合,那么系统允许更新,如果新版本所做的签名不是匹配的,那么将需要给用起一个不同的包名 - 在这种情况下,用户相当于安装了一个完全新的程序。
  • 用用程序模块化 - Android允许相同证书签名的应用程序运行在相同的进程中,此时系统会将它们作为耽搁应用程序对待,在这种方式中,可以按模块化的凡事部署应用,用户可以根据需要独立的跟新每一个模块。
  • 代码、数据的授权共享 - Android提供模式匹配的权限控制机制,因此一个应用可以暴露功能给另一个用指定证书签名的签名的应用,通过用相同证书签名多个应用,以及使用模式匹配的权限检查,应用程序可以以安全的方式共享代码和数据。


公钥和私钥的概念

在现代密码体制中加密和解密是采用不同的秘钥(公开秘钥),也就是公开秘钥算法(也叫非对称算法、双钥算法),每个通信方均需要两个秘钥,即公钥和私钥,这两个秘钥可以互为加解密,公钥是公开的,不要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密的。

证书的概念

数字证书是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机构的公章)后形成的数字文件。CA完成签发证书后,会将证书发布在CA的证书库(目录服务器)中,任何人都可以查询和下载,因此数字证书和公钥一样是公开的,实际上数字证书就是经过CA认证的公钥。

原则:

  • 一个公钥对应一个私钥
  • 秘钥对中,让大家都知道的是公钥,不告诉大家只有自己知道的是私钥
  • 如果用其中一个秘钥可以解密,那么该数据必须是对应的秘钥进行的加密
  • 非对称秘钥密码的主要应用就是公钥加密和公钥认证,而公钥加密的过程和公钥认证的过程是不一样的

例:两个用户 A 和 B ,A要把一段明文通过双钥加密的技术发送给 B , B有一对公钥和私钥,那么加密解密过程如下

1. B 将他的公钥传送给A

2. A 用 B 的公钥加密的他的消息,然后传送给 B

3. B 用他的私钥解密 A 的消息

调试版相关问题

证书到期问题:用来签署apk调试的自签名证书有效期365天,到期后只需删除该debug.keystore文件。

文件存储位置 --- OS 和 Linux 系统:~/.android /

--- windows 7, 8, 10 : C:\Users\<user>\.android\

发布版的签名

1. 手动生成签名的 apk (使用 Android Studio 手动生成签名的 apk,每次发布不同版本的时候都需要手动生成一次,比较麻烦)

步骤如下:

1> 在Android Studio菜单栏中,Build --> Generate Signed APK

2>如果你已经有一个秘钥库,请转到步骤4,如果你想创建一个新的秘钥库,单击新建

注:Key store path: 秘钥库存储位置

Key store password:秘钥库安全密码

Key alias:秘钥标识名称

Key password: 秘钥安全密码

秘钥安全密码应当与秘钥库安全密码不同

3>创建新的秘钥库如下图

注:秘钥的有效时间设置以年为单位,应至少为25年,以便您可以在应用的整个生命周期内使用相同的秘钥签署应用更新

Certificate 部分是为证书输入关于您自己的信息,此信息不会显示在应用中,但会作为apk的一部分包含在您的证书中

Firstand Last Name 秘钥颁发者姓名

OrganizationalUnit 秘钥颁发者组织单位

Organization 组织

Cityor Locality 城市

State or Province 市或洲

CountryCode(XX) 国家代码

4>在生成签名apk窗口中,选择秘钥库、秘钥,并输入两个密码(如果是新创秘钥,这些字段会自动填充)然后单击xiayi

5>选择签署的apk目的地,构建类型,产品风味,单击完成

APK Destination Folder 为签署的APK选择一个目的地

Build Type 选择构建的类型(两种类型调试和正式)

Flavors 选择产品风味(即我们平时所说的发布平台,Android将为选择的每个产品风味生成单独的apk)

Signature Versions 签名版本勾选 Android7.0中引入了APKSignature Scheme v2

说明:v1:应用是通过zip条目进行验证,这样apk签署后可进行许多修改 - 可以移动甚至重新压缩文件

v2:验证压缩文件的所有字节,而不是单个zip条目,签名后无法再更改

2. 配置 build.gradle 文件自动签名apk

步骤如下:

1>Android Studio 菜单栏 File --> Project Structure ( 快捷键 ctrl+alt +shift +s)

2>选中app这个module,然后切换到singning标签栏,然后点击添加,生成release签名信息,点击ok

3>切换到Build Types 标签,将Signing config 选为“release”,即将刚刚生成的release签名信息配置进去

4>随后我们可以看到app这个module的build.gradle文件多出了如下部分代码

5>然后执行菜单栏的“build --> clean Project”

6>生成release版本的apk,在命令行terminal输入gradlew assembleRelease (AS已经将命令行Terminal 继承到了软件当中)运行成功的话,效果如下:

7> 生成签名好的文件在如下位置:

Android 签名打包相关推荐

  1. android签名打包发布到应用市场

    android签名打包发布到应用市场 一 主题 本篇文章详细介绍android从签名打包到发布到应用市场的流程,以及遇到的问题, 二,版本1.0.0 首先说一下你的apk第一个版本的发布, 1,创建签 ...

  2. Android签名打包报错:Conversion to Dalvik fromat failed with error 1

    今天测试Quick-Cocos2dx-Community 最新版本,ndk对应版本是ndk-r10e.从编译到ADT中debug调试都没有问题,但是在最终签名打包时报了一个错:Conversion t ...

  3. 获取Android签名打包keystore或者.jks文件的MD5

    Android开发,经常会调用第三方,例如在申请第三方的时候,经常会用到MD5等信息,下面是从一个签名打包的key文件里面去获取这些信息. 打开cmd或终端,找到对应的key签名文件,然后输入keyt ...

  4. Flutter Android 签名打包

    文章目录 查看APP包的签名 Flutter 配置Android 签名 创建 keystore 引用应用程序中的keystore gradle中配置签名 构建一个发布版apk(打包) 在设备上安装发行 ...

  5. Android签名打包很慢,Android APK快速签名—优化打包时间

    一.Android签名机制 Android签名机制可划分为ROM签名机制与第三方APK签名机制,在这里只讨论APK签名机制. Android系统在安装APK的时候,首先会检验APK的签名,如果发现签名 ...

  6. Android签名打包详解

    一.      Android签名有什么作用? 应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名.这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序.如果你采用 ...

  7. Android签名打包、密钥库、密钥全面解析

    前言 Android要求所有的应用必须进行数字签名才可以发布,也就是我们平时所说的使用证书打包然后上传市场.这个签署的过程又包括创建和存储证书,使用不同证书签署不同的构建配置,及自动签署过程. 重要的 ...

  8. cordova 发布 android release 签名打包

    2019独角兽企业重金招聘Python工程师标准>>> ## 20161227 android 签名打包制作一个 build.json 文件,放在项目一级目录修改 build.jso ...

  9. android+命令行编译,打包生成apk文件,Android 使用Android Studio + Gradle 或 命令行 进行apk签名打包...

    默认为debug mode,使用的签名文件在: $HOME/.android/debug.keystore 比如 C:\Users\chengcj1.android\debug.keystore 1. ...

  10. 【Android】Android Studio打包生成正式签名的APK

    Android Studio是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA.它类似于Eclipse ADT,Android Studio 提供了集成的Android开发工具用 ...

最新文章

  1. Android Service的思考(3)
  2. 敲山震虎?继MongoDB之后,AWS又对Elasticsearch下手了
  3. 渗透知识-常用DOS命令windows
  4. 30张图 讲述真实的人性
  5. 网络协议系列之四:IGMP、ICMP和ARP
  6. IDEA_Spring Data JPA有关报错Cannot resolve table 'XXX'
  7. python中seek函数的用法_在Python中操作文件之seek()方法的使用教程
  8. 【Oracle】DG三种保护模式及切换方式
  9. python格式化输出类型_在python中自己写的数据类型使用print无法输出每个元素
  10. 电脑开机3秒就重启循环_手机怎么才能投屏到电脑上?3个方法,小屏1秒变大屏,涨知识了...
  11. 年度调薪一般涨多少_如何回答别人询问工资?高情商的人一般选择这样巧妙答复...
  12. php mysql 分页查询_PHP+MySQL分页查询实现
  13. 佳能微单R6断电DAT文件MP4视频完美修复不卡顿
  14. 查看连接过的WIFI密码方法汇总
  15. word用宏修改文档中图片大小
  16. win10+ubuntu18.04安装+sougou输入法
  17. RK平台--EVS模块: (一)概述
  18. python写抢火车票软件_用 Python 代码自动抢火车票
  19. 前端模拟接口(快速开发)
  20. OCR之端到端任意形状的场景文字识别 ICCV2019 End-to-End Text Spotting

热门文章

  1. 学计算机要学工图吗,工程图学及计算机绘图: 非机类
  2. 天勤数据结构代码——排序
  3. 基于蒙特卡洛模型的排队问题求解
  4. 弹性波波长计算公式_弹性波,时域显式接口简介
  5. 彭启宗的dsp技术学习笔记
  6. 黑客动画吧-黑客闯关之古墓探秘攻略
  7. Java web学生信息管理系统(jsp)
  8. pe备份linux系统教程,将CDlinux整合在U盘PE启动界面
  9. 基于 Markdown 的中文文档排版规范
  10. LinkedIn领英上的几度人脉是什么意思?如何突破领英人脉限制高效率开发客户?