2015-08-31 30 views
2

jenkins在構建android項目時使用哪個keystore。Jenkins和Android構建的調試密鑰庫

因爲我使用Google登錄。 我需要使用本地使用的相同調試密鑰庫。 爲此,我已覆蓋服務器上的debug.keystore。 但是我仍然無法登錄,因爲密鑰庫不同。

回答

2

默認情況下,Android構建系統使用$HOME/.android/debug.keystore中的密鑰庫。

如果該文件在編譯時不存在,它將自動生成。所以很可能應用程序正在您的機器和Jenkins機器上使用完全不同的密鑰庫進行簽名。

您可以通過將密鑰庫從您的計算機複製到Jenkins機器,然後將Jenkins作爲運行到用戶$HOME目錄來解決此問題。


或者,您也可以通過顯式提供密鑰庫構建應用程序的調試版本時使用覆蓋默認的編譯系統的行爲。

這意味着無論用戶在哪臺機器上構建應用程序,始終都會使用相同的調試密鑰庫來簽署APK。

例如,您可以添加一個新signingConfigapp/build.gradle

signingConfigs { 
    debug { 
     // Override the local debug keystore, so that 
     // all builds have consistent certificates 
     storeFile file('../debug.keystore') 
    } 
} 

這假定您已經創建並在項目的根簽入的調試密鑰庫。

該調試密鑰庫必須具有與Android構建系統生成的相同的密鑰別名和密碼,即別名androiddebugkey,密碼android

您可以使用keytool生成具有這些特性的關鍵:

keytool -genkey -v -keyalg RSA -keysize 2048 -validity 10000 \ 
    -dname 'CN=Android Debug,O=Android,C=US' -keystore debug.keystore \ 
    -storepass android -alias androiddebugkey -keypass android 
+0

我不想把它添加到gradle這個file.I希望的東西像shell執行PARAMS。我已經替換了該密鑰庫(@ $ HOME/.android)。但簽名不一樣。 – Droidekas

+0

如果簽名不相同,那麼密鑰庫不一樣。你可以用'keytool -v -list -keystore〜/ .android/debug.keystore -storepass android'來驗證。 –

+0

所以我比較了這兩個md5。他們是一樣的。還有另外一個原因,Google OAuth以不同的方式來看待他們? – Droidekas