Android Studio 2.3 打包apk

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。

2017年12月15日09:49:59更新

以下摘抄自360:

美国时间12月9日,Google在其官网通告了一个名为“Janus”的安卓漏洞,该漏洞可以让攻击者绕过安卓系统的签名校验,直接在APP内恶意植入代码。

影响范围:

  • 所有Android 5.0以上系统;

  • 所有仅采用了Android APK Signature Scheme V1签名机制的App。

12月13日,360加固保团队紧急上线了针对Janus漏洞的解决方案,该方案对Janus漏洞进行扫描、检测并采取相应的安全保护措施,有效地防止黑客通过Janus漏洞修改原始Dex文件,插入恶意代码和广告,保护广大用户及开发者利益

Janus漏洞原理

Janus漏洞产生的根源在于将DEX文件和APK文件拼接之后校验签名时只校验了文件的APK部分,而虚拟机执行时却执行了文件的DEX部分,导致了漏洞的发生。由于这种同时为APK文件和DEX文件的二元性,联想到罗马的二元之神Janus,将该漏洞命名为Janus漏洞。

这里写图片描述

Android支持两种应用签名方案,一种是基于JAR签名的方案(v1方案),另一种是Android Nougat(7.0)中引入的APK签名方案(v2方案)。

v1签名不保护APK的某些部分,例如ZIP元数据。APK验证程序需要处理大量不可信(尚未经过验证)的数据结构,然后会舍弃不受签名保护的数据。这会导致相当大的受攻击面。

Janus漏洞危害

代号为“Janus”的安卓漏洞(漏洞编号:CVE-2017-13156),能够让恶意攻击者在完全不修改App开发者签名的情况下,通过植入恶意dex代码,对App实施恶意代码注入,逃避Android签名校验机制甚至获取系统ROOT权限。

如何避免Janus漏洞?

1. 升级至V2签名

在Android Studio中强制开启V2签名,如下图所示:

这里写图片描述

或在app的build.gradle的android标签下加入如下:

这里写图片描述

感谢如下奉献
  1. http://blog.csdn.net/fyh2003/article/details/6911967
  2. https://developer.android.google.cn/about/versions/nougat/android-7.0.html#apk_signature_v2
  3. http://blog.csdn.net/ling9400/article/details/65630954
  4. http://jiagu.360.cn/1101141392.php?dtid=1101141786&did=490916087
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HLQ_Struggle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值