# 签名配置
签名一个应用程序需要以下文件:
- 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