当前位置: 首页 > news >正文

AndroidStudio打包apk,安装出现签名冲突--解决办法

Android UiAutomator2项目部署到jenkins上,实现自动打包,并自动push&安装到设备上

遇到问题:

可成功实现自动打包并push到设备上后,install -r 的时候报错:

INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES

显示签名不一致,本打算手动先卸载原有的包,再重新安装,但同样无法卸载,卸载过程中报错:

Failure [DELETE_FAILED_INTERNAL_ERROR]

在网上找了很多解决这两个错误的方法,但都无法解决问题。因为项目代码里并没有任何地方配置了签名信息,怎么在本机上构建的apk和在jenkins上构建的apk会出现签名冲突呢?百思不得解。

后在这篇文章http://blog.csdn.net/penglijiang/article/details/8626108看到这段话:

 Android系统要求所有的程序经过数字签名才能安装,如果没有可用的数字签名,系统将不许安装运行此程序,不管是模拟器还是真实手机。因此,在设备或者是模拟器上运行调试程序之前,必须为应用程序设置数字签名。Android系统仅仅会在安装的时候测试签名证书的有效期,如果应用程序的签名是在安装之后才到期,那么应用程序仍然可以正常启用。         

   Android通过数字签名来 标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定用户可不可以安装该应用程序。android的这个签名由应用程序的作者完成,并不需要权 威的数字证书签名机构认证,他只是用来让应用程序包自我认证的。Android系统默认自动给应用程序签名,ADT会自动使用debug密钥为应用程序签名,debug密钥是一个名为debug.keystore的文件。

才发现原来不配置签名信息 就是最大的问题 ~

 

查询本机  $ sudo find / -name debug.keystore

找到位置位于电脑的:~/.android/debug.keystore,AndroidStudio打包时默认用的是此处的keystore签名。

可想而知:每个机器都使用自己本地的keystore,那么install到设备时必然会出现签名冲突的问题,解决办法就是配置一个共同使用的keystore。

 

回到app下的build.gradle,在里面增加这段代码

android {
    signingConfigs {
        debug {
            storeFile file('keystores/debug.keystore')
        }
        release {
            keyAlias 'androiddebugkey'
            keyPassword 'android'
            storeFile file('keystores/debug.keystore')
            storePassword 'android'
        }
    }

在app下新建keystores目录,将debug.keystore文件放置在该目录下,这样共享代码库的其他人都能共享此签名key。问题解决。。。

ps : debug.keystore文件具体怎么生成可在网上查询,资料很多。。

 

转载于:https://www.cnblogs.com/biang/p/6694615.html

相关文章:

  • 最大整数
  • mysql sum() 求和函数的用法
  • 新事物的代价 共享汽车所碰到的尴尬
  • Intellij IDEA 配置Subversion插件时效解决方法
  • 封装sdk——包装模式
  • vue-router
  • 第二百二十五节,jQuery EasyUI,PropertyGird(属性表格)组件
  • 5 -- Hibernate的基本用法 -- 要点
  • linux之SQL语句简明教程---SUBSTRING
  • 面向对象访问修饰符
  • Mongodb $in $or 性能比较
  • Android Studio之多个Activity的滑动切换(二)
  • log4j
  • Android——4.2.2 源代码文件夹结构分析
  • ZOJ 3427 Array Slicing (scanf使用)
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【RocksDB】TransactionDB源码分析
  • iOS 颜色设置看我就够了
  • Javascripit类型转换比较那点事儿,双等号(==)
  • linux学习笔记
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • SQLServer之创建显式事务
  • Web设计流程优化:网页效果图设计新思路
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 简单数学运算程序(不定期更新)
  • 深入浅出webpack学习(1)--核心概念
  • 学习使用ExpressJS 4.0中的新Router
  • 说说我为什么看好Spring Cloud Alibaba
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #HarmonyOS:基础语法
  • #微信小程序(布局、渲染层基础知识)
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (SpringBoot)第七章:SpringBoot日志文件
  • (八)Spring源码解析:Spring MVC
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • ... 是什么 ?... 有什么用处?
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net mvc部分视图
  • .Net Web项目创建比较不错的参考文章
  • .Net6使用WebSocket与前端进行通信
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .stream().map与.stream().flatMap的使用
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @AliasFor注解
  • @Bean有哪些属性
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [Android Pro] Notification的使用
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn
  • [C#]手把手教你打造Socket的TCP通讯连接(一)
  • [C/C++] -- 二叉树