AndroidStudio 2.2以及以上版本 或 Gradle 2.2以及以上 版本V2签名与打渠道包冲突
来源:互联网 发布:淘宝2017双十一 编辑:程序博客网 时间:2024/06/05 02:27
注意:如果使用的是AndroidStudio支持的多渠道打包方式的话,将不会出现此问题。
官方说明
Android 7.0 引入一项新的应用签名方案 APK Signature Scheme v2,它能提供更快的应用安装时间和更多针对未授权 APK 文件更改的保护。在默认情况下,Android Studio 2.2 和 Android Plugin for Gradle 2.2 会使用 APK Signature Scheme v2 和传统签名方案来签署您的应用。
虽然我们建议您对您的应用采用 APK Signature Scheme v2,但这项新方案并非强制性的。如果您的应用在使用 APK Signature Scheme v2 时不能正确开发,您可以停用这项新方案。禁用过程会导致 Android Studio 2.2 和 Android Plugin for Gradle 2.2 仅使用传统签名方案来签署您的应用。要仅用传统方案签署,打开模块级 build.gradle 文件,然后将行 v2SigningEnabled false 添加到您的版本签名配置中:
android {
…
defaultConfig { … }
signingConfigs {
release {
storeFile file(“myreleasekey.keystore”)
storePassword “password”
keyAlias “MyReleaseKey”
keyPassword “password”
v2SigningEnabled false
}
}
}
注意:如果您使用 APK Signature Scheme v2 签署您的应用,并对应用进行了进一步更改,则应用的签名将无效。出于这个原因,请在使用 APK Signature Scheme v2 签署您的应用之前、而非之后使用 zipalign 等工具。
场景
当我们需要多渠道打包时 且是使用了V2签名的话 将有可能出现 包将无法在Android7.0上进行安装 并提示错误为:INSTALL_PARSE_FAILED_NO_CERTIFICATES
实质原因是 在签完名后进行多渠道打包(会修改原先的包)造成了在安装的时候签名验证时 提示验证失败 无法安装。
简述V2签名原理:
签名将在图中粉色位置创建APKSigningBlock文件,保存签名信息。
当用户在Android7.0安装的时候 如果发现签完名后的apk包被修改过 则判断为验证失败 将无法安装。
多渠道打包方式
修改后重新打包或签名的,例如在AndroidMainfest里面添加mata-data等(此处使用的就是AndroidStudio直接支持的方式)
修改后不需要重新签名,主要有两种: (自行编写程序代码 对于APK文件直接修改)
直接把apk包看成一个zip包,然后在zip包的注释段添加对应的渠道信息
直接把apk包看成一个zip包,然后利用相关命令在META-INF内注入${channel}.txt 文件
问题详情与解决办法
当我们使用第二种打包方式的时候,在V1签名下是不会出现问题的。
但是如果使用的是V2签名就会出现这些问题(V2验证更加严格)
解决办法:
使用第一种打包方式
如果使用第二种打包方式的话 就可以使用 美团新出的多渠道打包工具Walle
新一代开源Android渠道包生成工具Walle
- AndroidStudio 2.2以及以上版本 或 Gradle 2.2以及以上 版本V2签名与打渠道包冲突
- weblogic10以上版本与hibernate3jar包冲突问题
- spring 3.0版本以上jar包使用以及依赖关系
- Placeholder兼容IE6以及以上版本
- androidstudio如何打渠道包,一个项目包含多个版本 如何选择一个版本打包
- [转]卡巴斯基防火墙与ActiveSync4.0以上版本冲突解决办法
- 卡巴斯基2006以上版本与金山词霸 的冲突
- 如何在xcode6以及以上版本中添加.pch文件
- Tomcat7以及以上版本设置最大连接数和内存
- Windows安装ElasticSearch5.x以上版本以及插件的方法
- Android APK 签名(1.5以上版本)
- cocos2dx 2.2版本以上生成新项目
- 在IIS7或以上版本配置Python
- JDK1.5或以上版本泛型报错
- iOS10系统版本判断的吭,以及iOS10以上系统版本判断正确的方法
- cocos2dx 2.2.x版本和3.0以上版本创建项目
- ECSHOP v2.0 以上版本伪静态开启说明
- [一般问题] gradle与gradle wrapper关系,以及版本关系
- C++实验五-数组分为奇偶两组
- 17.5.18E
- Shell常用语法归集
- Struts2 Namespace_命名空间
- linux运维-bond
- AndroidStudio 2.2以及以上版本 或 Gradle 2.2以及以上 版本V2签名与打渠道包冲突
- C 语言的HelloWorld(printf用法详解)
- [leetcode]: 541. Reverse String II
- 三分法求凸性函数极大极小值
- NYoj 33 蛇形填数
- 剑指offer----字符流中第一个不重复的字符
- LeetCode 31. Next Permutation
- TUTORIAL: MEASURING REVERBERATION TIME
- 原码、反码、补码