LZ-Says:写代码写得突然蒙比了,来来回回折腾了小2个月,乱啊~
前言
话说从Eclipse转化到Android Studio后,一直都没打个包,发个版本,今天想提交测试打个版本,丫的一看,和Eclipse不一样了。在此记录下,顺便拓展下其他小知识点,方便你我他。
进入主题 AS打包步骤如下
1.选择 Build –> Generate Signed APK…
2.选择密钥存放地址,密码,别名,密码
2.1 因为我们是首次打包,所以需要创建keystore,Android Studio中叫做jks(如果之前已经有keystore或者jks,可忽略此步)
3.获取项目对应的jks文件后next,选择apk存放地址以及项目打包版本(正式版 or 测试版),选择V1,点击Finish。
户外小拓展
1. Android为什么要进行打包,签名?
apk,实际就是一个zip包,大家可以修改后缀解压后查看,LZ解压的如下:
所有的Android应用程序都要求用一个证书进行数字签名,Android系统不会安装没有进行签名的App。平时我们的程序可以在模拟器上安装并运行,是因为在应用程序开发期间是以Debug状态进行编译的,因此ADT会自动用默认的密钥和证书来进行签名,而在以发布模式编译时,apk文件就不会得到自动签名,这样就需要进行手工签名。手工签名的签名文件当然是公司/开发者自己造的
给apk签名可以带来以下好处(其实签名是必须的):
1.应用程序升级:如果你希望使用你造的App的用户无缝升级到最新版本,那么你造的app就必须用同一个证书进行签名。这是由于傲娇的Android系统只有识别出你造的App是以同一个证书签名的,才会允许安装升级的应用程序。如果你不小心采用了不同的证书,那么系统会要求你的应用程序采用不同的包名,在这种情况下手机相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同,Android就是如此傲娇 !
2.应用程序模块化: Android系统可以允许多个应用程序在一个进程里运行,但前提是他们都是用同一个证书签名的。实际上,系统把他们作为一个应用程序对待的,此时你可以把应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块。这就是模块化,又叫插件化!
3.代码或者数据共享: Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了 。
2. keystore简介
java的密钥库、用来进行通信加密用的、比如数字签名。keystore就是用来保存密钥对的,比如公钥和私钥。
3. jks简介
JAVA的keytools证书工具支持的证书私钥格式
4. signature version v1 v2
通过查看谷歌官方资料和各位同仁见解,我们可以知道如下几点:
1.Android 7.0 引入一项新的应用签名方案 APK Signature Scheme v2,它能提供更快的应用安装时间和更多针对未授权 APK 文件更改的保护。在默认情况下,Android Studio 2.2 和 Android Plugin for Gradle 2.2 会使用 APK Signature Scheme v2 和传统签名方案来签署应用;
ps:在这里我们可以知道这个东西是谷歌针对Android7.0推出的新的签名方案,也就是说,当you的app需要兼容7.0时,才会遇到这个东西。貌似市面上主流的依旧是android 5.0 and 6.0,虽然有了8.0的苗头,但是目前身边人还未使用7.0,暂时先不考虑了
经过同仁测试,使用v1的时候在5.0和7.0均未发现问题,当使用v2包的话,5.0就中枪了,提示“找不到签名证书”。
各位注意!!!
LZ理解
个人感觉keystore和jks差不多,都是属于一个容器。而这个容器里面存储着标识(敏感信息),我们一般通过这个标识,去对我们的应用进行标识加密)。
使用Android Studio打包的时候,你可以使用eclipse中的keystore,也可以使用jks。
感谢如下奉献
http://blog.csdn.net/fyh2003/article/details/6911967;
https://developer.android.google.cn/about/versions/nougat/android-7.0.html#apk_signature_v2;
http://blog.csdn.net/ling9400/article/details/65630954