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

遇到问题:

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

INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES

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

Failure [DELETE_FAILED_INTERNAL_ERROR]

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

 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文件具体怎么生成可在网上查询,资料很多。。