Android安卓签名打包原理,步骤详细讲解(debug,release区别.V1,V2区别)
所有的Android应用程序都要求开发人员用一个证书进行数字签名,Android系统不会安装没有进行签名的应用程序。
在应用程序开发期间,由于是以Debug调试模式编译的,因此IDE(ADT)根据会自动用默认的密钥和证书来进行签名,而以Release发布模式编译时,apk文件就不会得到自动签名,这样就需要进行手工签名。
我们使用Android Studio 运行我们的app,无非两种模式:debug和release模式。
debug模式
debug模式使用一个默认的debug.keystore进行签名。
这个默认签名(keystore)是不需要密码的,它的默认位置在C:\Users<用户名>.Android\debug.keystore,如果不存在Android studio会自动创建它。
例如我的debug.keystore就在C:\Users\Administrator.android\debug.keystore。
release模式
在我们正式发布项目的时候是不能使用debug.keystore的。开发过程中我们也可以使用发布模式运行。可以通过如下设置:
BuildVariants-Build Variant-debug/release
如果项目需要细分开发dev和生产pro版本,每个版本中都包含debug和release模式,可以这么设置:
就细分成四种模式:
release模式需要配置签名才能运行,这时就需要一个keystore
如果没有就需要创建,已经创建过keystore请跳过此步骤
Android Studio中apk签名打包步骤
1.创建keystore,并生成我们的apk(打包)
第一步: Build —>> Generate Signed APK
第二步:Create New···(已经创建过keystore选Choose existing···)
第三步:填写相关信息
设置keystore路径、密码,设置key:别名、密码、有效期,证书等
Key store path:存放路径
Key
Alias:别名
Validity(years):有效期(一般默认25年)
Certificate:证书
First and Last Name:姓名
Organization Unit:组织单位
Organization:组织
City or Locality:城市或地区
State or Province:州或省
Country Code(XX):国家代码(XX),中国:86
第四步:输入key、keystore密码
第五步:选择发布app的路径,默认即可 选择release方式发布
OK,发布成功,可以到 刚才设置的目标文件夹下面找到发布的apk
那对一些人来说,这样也太麻烦了,每次都得输入相关信息,还得进行选择,那么有更简单快捷的方法吗?答案是有的。
我们可以在项目的app目录下的build.gradle中进行签名的配置。
2.release模式配置keystore
Project structure-signing,输入已创建的keystore信息
使得签名生效需配置Build Types
点击OK即可,然后查看对应build.gradle的配置文件应该是这样的。当然了,你也可以通过直接在build.gradle里面写下面这段。
1 signingConfigs {
2 release {
3 keyAlias 'androiddebugkey'
4 keyPassword 'android'
5 storeFile file('C:/Users/ssc/.android/debug.keystore')
6 storePassword 'android'
7 }
8 }
9
10 ·········
11
12 buildTypes {
13 release {//是否混淆
14 minifyEnabled false//是否移除无用资源
15 zipAlignEnabled true//混淆的配置文件
16 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
17 signingConfig signingConfigs.release
18 }
19 }
上述的配置虽然配置简单,但是存在不安全性,假如你的项目是开源的,你把签名文件的配置密码之类的信息用明文写在build.gradle里面,那是不是很不安全呢?
可以将签名文件的配置密码之类的信息直接写在local.properties下,因为在Git版本控制的项目中,我们可以看到我们项目project模式根目录下有一个.gitignore的文件,里面的配置大概如下所示
我们可以看到/local.properties,意思就是说local.properties默认是不添加到版本控制里面的,因为local.properties存储的是我们环境资源的一些相关信息,如sdk的路径。故我们可以在local.properties下配置签名信息而不用担心密钥外泄。对于开源项目来说,是非常好的。
在local.properties下直接添加相关信息
在build.gradle里,为了不用明文显示,我们首先要获得key的相关配置,所以我们可以在app的build.gradle里
android {}之上新增代码
app/build.gradle下的signingConfigs可以改为:
signingConfigs {release {keyAlias keystoreAliaskeyPassword keystoreAliasPSWstoreFile keyfilestorePassword keystorePSW}}
设置后Signing中keystore值无需关心
相应的,buildTypes也可以配置成这样
1 buildTypes {
2 release {
3 minifyEnabled false
4 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
5 // signingConfig signingConfigs.release
6 //签名文件存在,则签名
7 if (keyfile.exists()) {
8 println("WITH -> buildTypes -> release: using jks key")
9 signingConfig signingConfigs.release
10 } else {
11 println("WITH -> buildTypes -> release: using default key")
12 }
13 23 }
24 }
到此,前面配置完成。
签名包V1和V2详细介绍:
使用Android Studio打包签名时,打包选项会有V1 和 V2 两个选项
老版本的AS,只有V1选择。但是新版本的AS,默认勾选的是V2版本。如果只勾选V2版本,打出来的签名包,很多机型会直接提示安装失败。解决办法下面会说。
概述:
在Android 7.0中引入了APK Signature Scheme v2,v1是jar Signature来自JDK。
V1:应该是通过ZIP条目进行验证,这样APK 签署后可进行许多修改 - 可以移动甚至重新压缩文件。
V2:验证压缩文件的所有字节,而不是单个 ZIP 条目,因此,在签名后无法再更改(包括 zipalign)。正因如此,现在在编译过程中,我们将压缩、调整和签署合并成一步完成。好处显而易见,更安全而且新的签名可缩短在设备上进行验证的时间(不需要费时地解压缩然后验证),从而加快应用安装速度。
解决方案一:
V1和V2的签名使用
1)只勾选V1签名并不会影响什么,但是在7.0上不会使用更安全的验证方式
2)只勾选V2签名7.0以下会直接安装完显示未安装,7.0以上则使用了V2的方式验证
3)同时勾选V1和V2则所有机型都没问题。
解决办法二:
在app的build.gradle的android标签下加入如下
android {signingConfigs {config {keyAlias 'a'keyPassword '123456'storeFile file('a.jks')storePassword '123456'}debug{v1SigningEnabled truev2SigningEnabled true}release{v1SigningEnabled truev2SigningEnabled true}}}
V2签名包是从Android7.0系统出现的新的签名机制,这个新机制使得apk的签名方式更加安全。首先我们应该尝试把V1和V2两个选项全部勾选,并尽可能的去使用他们,但是如果全部勾选完毕出现了问题,那么我们可以忽略这种新的签名机制,只勾选第一个选项(V1),依旧使用我们之前老的签名机制,也就是说,V1版本更加快速方便。
为什么这里会提到V1、V2的区别。因为这里的美团多渠道打包只能适用于V1版本的签名包!!!但是apk上架到应用宝时(在打包同时勾选V1、V2且没有使用多渠道打包)还是会提示:
所以,个人还是推荐使用V1打包方式。因为稳定,所以放心。
在提一嘴,前不久美图技术点评也实现了V2版本包的功能,想了解的请移步:新一代美团快速打包。集成起来会相对复杂一些,在一些讲解效率和快速开发的团队,正常使用V1签名包和上面的美团打包方式,依旧可以快速高效满足开发需求保证产出以及安全。
本文参考来源:
[1]https://www.cnblogs.com/details-666/p/keystore.html
Android安卓签名打包原理,步骤详细讲解(debug,release区别.V1,V2区别)相关推荐
- Android 应用开发(33)---Android程序签名打包
Android程序签名打包 第一章的倒数第二节,本节给大家介绍的是如何将我们的程序打包成Apk文件,并且为我们的Apk签名! 上一节中已经说了,我们后续的教程使用的IDE是Android Studio ...
- Kali Linux 2021.2在VMware和VirtualBox安装教程 超简单 步骤详细讲解
Kali Linux 2021.2在VMware和VirtualBox安装教程 超简单 步骤详细讲解 一. 资源下载及工作站安装 二. 使用VMware平台安装 三. 使用VirtualBox平台安装 ...
- android studio密钥库口令,Android应用开发Android Studio签名打包及根据keystore密钥获取SHA1安全码...
本文将带你了解Android应用开发Android Studio签名打包及根据keystore密钥获取SHA1安全码,希望本文对大家学Android有所帮助. " 一.签名打包两种方式 1. ...
- 5 Android程序签名打包
在上一章,我们创建了自己的 Android 工程,并成功的在模拟器中运行起来.同时提到,工程目录中有一个 bin 目录,运行之后我们可以在此目录下找到我们的apk.那么不难想到,我们在点"R ...
- android 自动打印出来,Android:签名打包后关闭Log打印
楔子 log在发布版本中打印会出现极大的安全问题,但在debug版本中确是不可缺少的. 需求 自动判断当前版本类型,选择是否输出log 实现 查阅了stormzhang的文章,提出使用BuildCon ...
- Android 应用apk打包原理
文章目录 前言 一.打包前 - app源码结构 二.打包后 - apk 文件结构 - apk结构? - 图示 (1) - 图示 (2) 三.那是怎么生成的? 1.apk 打包流程 2.详解:构建流程中 ...
- eclipse+ADT 进行android应用签名打包详解
1.Eclipse工程中右键工程,弹出选项中选择 android工具-生成签名应用包: 2.选择需要打包的android项目工程: 3.如果已有私钥文件,选择私钥文件输入密码,如果没有参见第6和7步创 ...
- Unity3d Android安卓JDK9打包失败
本文首发于"洪流学堂"微信公众号. 洪流学堂,让你快人几步成为Unity大牛! 目前(2018年2月26日)Unity打包Android不支持JDK9 https://forum. ...
- 跨平台应用开发进阶(二十九) :uni-app 实现Android原生APP-云打包集成神策详细教程
文章目录 一.前言 二.集成 2.1 集成 uni-app 插件 2.2 云端集成原生插件 2.3 离线集成 2.3.1 获取插件包 2.3.2 在 HBuilderX 中集成原生插件 2.4 集成结 ...
最新文章
- 人工智能治理需用好“人工”
- P3225 [HNOI2012]矿场搭建
- JZOJ 5627. 【NOI2018模拟4.3】paint
- Angular - 如何在页面加载后马上做初始化
- android实现自动抢红包,Android手机辅助功能实现自动抢微信红包功能
- Binary Search
- C++实现链栈的基本操作
- 被高中生物骗了这么多年,原来人体内细胞的DNA是有不同的?
- 2440 linux文件写,添加yaffs2文件系统 - Linux2.6.39在S3C2440上的移植_Linux编程_Linux公社-Linux系统门户网站...
- HTML浅学入门---基础知识 (1)基本规则
- 密码加密模块 bcrypt (详细,好理解,示例源码)
- 哪种编程语言好?大神为你分析 Go、Java、C、C++ 等主流编程语言
- 1.定义ddos僵尸网络
- NTFS与FAT32区别
- HDU-6447-YJJ's Salesman(离散化+01dp,线段树维护)
- rust vapo_考研英语翻译技巧
- O2OA开源办公平台:搭建自定义工程及开发
- mysql中文乱码解决
- 聊聊Kotlin中的元编程
- 基于ubuntu使用ovs实现容器网络隔离