# 簽名配置
簽名一個應用程序需要以下文件:
- keystore
- keystore密碼
- key的別名(alias)
- key密碼
- 存儲類型
位置,key 名,兩個密碼和存儲類型一起組成了這個簽名配置(*SigningConfig*)
默認情況下,**debug** 被配置成使用 debug keystore,debug keystore 使用默認的密碼和默認 key 及默認的 key 密碼。
debug keystore 的位于 `$HOME/.android/debug.keystore`,如果文件不存在,則會自動創建。
**debug***Build Type*(構建類型)會自動使用 **debug** 的 *SigningConfig*(簽名配置)。
可以通過 **signingConfigs** DSL 容器來創建其他配置或者自定義內建的默認配置:
~~~
android {
signingConfigs {
debug {
storeFile file("debug.keystore")
}
myConfig {
storeFile file("other.keystore")
storePassword "android"
keyAlias "androiddebugkey"
keyPassword "android"
}
}
buildTypes {
foo {
debuggable true
jniDebuggable true
signingConfig signingConfigs.myConfig
}
}
}
~~~
以上代碼片段修改了 debug keystore 的路徑到項目的根目錄下。在這個例子中,這將影響其他用到 **debug** 構建類型的構建類型。
這里也創建了一個新的 *Single Config*(簽名配置)和一個使用這個新簽名配置的新的 *Build Type*(構建類型)。
> 注意:只有默認路徑下的 debug keystore 不存在時才會自動創建。改變 debug keystore 的路徑并不會在新路徑下自動創建 debug keystore。如果創建不同名的 SigningConfig,并使用默認的 debug keystore 路徑,那么還是會在默認路徑下創建 debug keystore。換句話說,會不會自動創建是根據 keystore 的路徑來判斷,而不是配置的名稱。
> 注意:雖然經常使用項目根目錄的相對路徑作為 keystore 的路徑,但是也可以使用絕對路徑,盡管這并不推薦(除了自動創建出來的 debug keystore)
> **注意:如果將這些文件添加到版本控制,你可能不希望將密碼直接寫到這些文件。下面的 `Stack Overflow` 鏈接提供從控制臺或者環境變量中獲取密碼的方法:**[http://stackoverflow.com/questions/18328730/how-to-create-a-release-signed-apk-file-using-gradle](http://stackoverflow.com/questions/18328730/how-to-create-a-release-signed-apk-file-using-gradle)**我們以后還會在這個指南中添加更多的詳細信息。**
- 譯者序
- 簡介
- 新構建系統的目標
- 為什么使用 Gradle?
- 配置要求
- 基礎項目
- 構建文件示例
- 項目結構
- 配置項目結構
- 構建任務
- 通用任務
- Java 項目的 Task
- Android Tasks
- 基本的構建定制
- Manifest 屬性
- 構建類型
- 簽名配置
- 運行 ProGuard
- 清理資源
- 依賴、Library 和多項目
- 包依賴
- 本地包依賴
- 遠程包依賴
- 多項目設置
- Library 項目
- 創建 Library 項目
- 普通項目和 Library 項目的區別
- 引用 Library 項目
- Library 項目發布
- 測試
- 單元測試
- 基本知識和配置
- 運行測試
- 測試 Android Library 項目
- 測試報告
- 獨立項目
- 多項目報告
- Lint 支持
- 構建 Variants(變種)版本
- 產品定制
- 構建類型+產品定制=構建變種版本
- 產品定制的配置
- 源組件和依賴
- 構建和任務
- 測試
- 多定制的變種版本
- 高級構建的自定義
- 構建選項
- Java 編譯選項
- aapt 選項
- dex 選項
- 操作 task
- 構建類型和產物定制的屬性引用
- 使用sourceCompatibility 1.7
- 附錄
- ApplicationId 與 packageName