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

Android Studio 2.3 打包apk相关推荐

  1. Android开发Android studio之gradle打包apk重命名的方法

    老套路,先看效果图: 首先第一步在gradle里面(跟android同级)写个获取当前时间的方法如下: //获取时间的方法 GMT+8代表北京时间,下面两个方法都可以 static def getNo ...

  2. android项目打包apk,Android Studio将程序打包成APK的步骤详解

    第一步:先点击Build选择GenerateSigned APK 第二步:如果之前有编译成APK的话,就直接选择Choose existing已经存在的key:如果没有编译成APK那就选择Create ...

  3. Uniapp中使用高德地图,并在android studio中离线打包

    Uniapp中使用高德地图,并在android studio中离线打包 带高德地图功能的Uniapp的android离线打包 1. Uniapp中使用高德地图的方式 2. 高德地图中申请key 3. ...

  4. Android Studio 一个工程打包多个不同包

    Android Studio 一个工程打包多个不同包 转: https://blog.csdn.net/kdsde/article/details/88639194 AS主要是利用gradle来实现这 ...

  5. Android studio 多渠道版本打包方法 flavor dimension

    Android studio 多渠道版本打包方法 flavor dimension 前言 开始 新建项目 修改build.gradle 创建差异化文件 创建图标 修改APP配色 修改APP名字 APP ...

  6. win8下cocos2dx3.2移植android平台及代码打包APK

      cocos2dx程序不能只在VS2012下运行,迟早是要搬运到Android和IOS上的.Windows下移植IOS平台先搁下不说比较困难,而且只有越狱的苹果机才可以运行,而且毕竟IOS高端.小众 ...

  7. android studio真机测试不生成apk,Android应用开发Android Studio编译出来的APK无法安装如何解决?...

    本文将带你了解Android应用开发Android Studio编译出来的APK无法安装如何解决?,希望本文对大家学Android有所帮助. Android Studio编译出来的APK无法安装如何解 ...

  8. 利用 Android Studio 和 Gradle 打包多版本APK

    视频汇总首页:http://edu.51cto.com/lecturer/index/user_id-4626073.html ==================================== ...

  9. android studio更新之后打包遇到V1(Jar Signature)、 V2(Full APK Signature)问题

    昨天更新了android studio 打包时遇到两个勾选框,于是开始了解- 问题 刚开始默认是勾选 V2(Full APK Signature),然后我就打包去测试先了,发现安装失败.之后发现与签名 ...

最新文章

  1. 微软职位内部推荐-SENIOR DEVELOPMENT LEAD
  2. flink 5-窗口和时间
  3. 5193. 删除字符使字符串变好
  4. HDU 4666 Hyperspace【最远曼哈顿距离+优先队列】
  5. 使用pm2后台运行nodejs程序
  6. Jmeter工作原理
  7. JavaWeb国际化
  8. TinyMind 和机器之心收藏
  9. 各移动云测试平台对比
  10. SimpleXMLRPC_SimpleXMLRPCServer (Internet) – Python 中文开发手册 - Break易站
  11. spark封神之路(1)-spark简介
  12. Day 1 廉颇老矣,尚能饭否?
  13. Unity 实现游戏中多相机屏幕CutIn效果
  14. 5个可用提高Godaddy主机速度的第三方CDN加速服务商
  15. Java HashMap中在resize()时候的rehash,即再哈希法的理解
  16. CSS 艺术之暗系魔幻卡牌
  17. 吴恩达深度学习L1W2——实现简单逻辑回归
  18. 996 是付得起首付,却是还不了的贷
  19. Android利用WiFiManager扫描AP列表的实例
  20. 利用USB RUBBER DUCKY(USB 橡皮鸭)在目标机器上启动Empire或Meterpreter会话

热门文章

  1. 14 面对对象(多态;抽象类;接口)
  2. react-ant design mobile - webpack 自定义主题
  3. 【爬虫】每天定时爬取网页小故事并发送至指定邮箱
  4. Python基于Django城市PM2.5空气质量数据可视化分析
  5. 服务器中imm的作用,联想X系列服务器IMM2(集成管理模块)基本操作
  6. 网站推广的八种基本方法
  7. matlab(4):特殊符号的输入
  8. 实时即未来,车联网项目之远程诊断实时故障分析【七】
  9. 易语言大漠实现辅助一键启动游戏
  10. Footprint:Curve何以在DEX赛道遥遥领先