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文件具體怎么生成可在網上查詢,資料很多。。
