必威体育Betway必威体育官网
当前位置:首页 > IT技术

Android 签名打包

时间:2019-09-12 07:11:04来源:IT技术作者:seo实验室小编阅读:75次「手机版」
 

android签名

什么是签名?

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> 生成签名好的文件在如下位置:

相关阅读

[RK3399][Android7.1] 移植笔记 --- 音频Codec RT5640

Platform: RK3399 OS: Android 7.1 Kernel: v4.4.83 原理图: 数据走I2S1通道 控制走I2C1通道 输出走HPOUTL/HPOUTR 改

eclipse安装及配置android基础教程

Android基础配置教程 adt-bundle-windows-x86_64-20140702压缩包密码:fxic解压好上面的压缩包之后,会出现android需要配置环境变量

谷歌停止与华为合作,Android、华为回应!

作者 | 屠敏出品 | CSDN(ID:CSDNnews)居安思危任正非,未雨绸缪如华为。在贸易战的背景下,即使早在多年前已在多个层面做好“备胎”计划

WeakReference在android中的使用场景

android中绝大部分内存泄漏都是Context导致的,应为context的传递实在是太多了。 基本原理就一条,如果class B持有class A,而class B

Android编写.so入门介绍

Android开发中,我们经常会用到.so文件。原因有很多,比如部分方法不想暴露,如加密规则。比如部分秘钥需要存储,哪怕最简单的一个加盐的

分享到:

栏目导航

推荐阅读

热门阅读