Android应用配置签名

Android应用在Debug模式下ADT会自动用默认的密钥和证书来进行签名,但是在发布的时候就需要一个手动配置。
生成签名的方法见我的上一篇文章:生成Java签名.keystore文件的方法

为Android应用配置签名

代码添加

在Android应用的build.gradle文件的android中添加如下代码

1
2
3
4
5
6
7
8
signingConfigs {
debug {
keyAlias 'androiddebugkey'
keyPassword 'android'
storeFile file('../KEYSTORE/debug.keystore')
storePassword '123456'
}
}

其中keyAlias对应签名中的别名,keyPassword对应别名密码,storeFile是签名的文件路径,storePassword是签名的密码。

可视化添加

通过快捷键Command+;,或者是File->Project Structure打开Project Structure对话框,然后选择Signing标签,然后在其中我们可以添加签名。

通过途中红框标出的加号添加一个签名,在右侧填写信息即可,之后点击OK。这种方法,Android Studio会自动为我们添加上面的代码。

使用签名

签名是要在打包的时候使用。打包一般用debug包和release包,因为我们的签名是为debug准备的,那么下来我演示打debug包时怎么使用。

还是在build.gradle的android中添加如下代码

1
2
3
4
5
buildTypes {
debug {
signingConfig signingConfigs.debug
}
}

这样我们在打debug包的时候就会带上这个签名了。

为什么Android应用需要签名

这里我在网上找了一些资料总结了一下,这个理解一下就可以了。

  1. 应用程序升级——当你对应用程序进行升级时,如果你想用户平稳的升级,那么,你就需要签上相同的证书。当系统安装一个升级应用程序时,如果新版本的证书与老版本的证书有匹配的话,那么,系统才会允许进行升级。如果你没有为版本签上合适的证书,当你安装时,你需要给应用程序指定一个新的包名——在这种情况下,用户安装的新版本,被当作是一个全新的应用程序。
  2. 应用程序模块化——如果应用程序请求的话,Android系统允许签有相同证书的应用程序运行在相同的进程里,这样,系统就会把它们看作是一个单一的应用程序。用这种方法配置应用程序,用户可以选择更新每个独立的模块。
  3. 代码/数据权限共享——Android系统提供了基于签名的权限检查,因此,如果应用程序间签有特定的证书,那么,它们之间可以共享功能。通过多个程序签有相同的证书并且使用基于签名的权限检查,你的程序可以以一种安全的方式共享代码和数据。还有一个决定签名策略的重要因素是:如何设定key的有效期。
  4. 发送者的身份认证,由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包不被替换
  5. 保证信息传输的完整性,签名对于包中的每个文件进行处理,以此确保包中内容不被替换。
  6. 防止交易中的抵赖发生, 市场对软件的要求

Android中使用签名的相关知识请参考以下文章:

android签名

如何发布android 应用程序,app增加签名证书