赞
踩
Android系统要求所有的应用必须被证书进行数字签名之后才能进行安装。Android系统通过该证书来确认应用的作者,该证书是不需要权威机构认证的,一般情况下应用都是用开发者的自签名证书,该证书是确保应用程序和应用程序作者之间建立信任关系,而不是用来决定用户可以安装哪些应用程序。
应用进行数字签名的好处和注意事项如下:
声明:实验生成的keystore只是作为演示使用,并没有实际应用到项目中。大家参考时也要根据我的博客手工修改部分参数,切忌无脑照抄!
Android是使用标准的java工具keytool和jarsigner来生成数字证书,而目前市场上第三方IDE(Android Studio和Eclipse)都是通过图形化系统帮我们封装了这两个工具的具体执行步骤。
接下来,我会介绍两种生成数字签名证书的方式,分别通过命令行和Android Studio进行生成。
由于Android的数字签名证书是用java标准工具生成的(路径为:$JAVA_HOME/bin目录下),那我们当然可以在命令行生成数字证书了,具体方法如下。
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
参数详解:
示例截图如下:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
参数详解:
示例截图如下:
zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk
示例截图如下:
使用命令行的方式可以显得geek,并且让我们更多的了解实现细节。但是,平时应用开发中更多的是注重效率,因此,我们可以采用目前google官方推荐的AS帮我们实现应用数字签名功能。具体步骤如下。
选择Create new,创建一个新的数字签名证书。
填写证书信息。
填写完成之后,我们点击OK,就可以生成我们的数字签名证书了。
上述工作完成后,我们就生成了数字签名证书,但是还没有对我们的apk进行签名。想要用生成的数字证书对apk进行签名,还需要修改当前Module的build.gradle文件,增加签名命令,具体内容如下:
android {
compileSdkVersion 19
buildToolsVersion "19.1.0"
defaultConfig {
applicationId "××××××"
minSdkVersion 8
targetSdkVersion 19
}
signingConfigs {
debug {
// 配置debug版本的数字签名证书
storeFile file("/home/wzy/Documents/keystore/simple-weather.jks")
storePassword "123456"
keyAlias "release-key"
keyPassword "123456"
}
release {
// 配置release版本的数字签名证书(为了方便,这里的release版本和debug版本共用一个数字签名证书)
storeFile file("/home/wzy/Documents/keystore/simple-weather.jks")
storePassword "123456"
keyAlias "release-key"
keyPassword "123456"
}
}
buildTypes {
release {
// 配置release版本的数字签名
signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
debug {
// 配置debug版本的数字签名
signingConfig signingConfigs.debug
}
}
lintOptions {
abortOnError false
}
}
当然,上述命令Android Studio也提供了图形化界面进行操作,可以直接在Module Settings进行设置,截图如下(ps:我还是喜欢手动配置)。
Android应用可以在debug和release两种模式下进行数字证书签名。在Android Studio中,我们直接点击Run使用的是debug模式,我们在命令行敲击bash gradle :$module_name:build
使用的是release模式。
debug模式下签名是为了开发调试,release模式下进行签名则是为了正式发布。
Android SDK提供了一个不需要密码的证书用于在debug模式下进行签名调试,默认存储在$HOME/.android/debug.keystore,但是release版本必须使用自己的数字签名证书。
首先,为什么我们需要查看应用签名信息呢?
是因为,很多第三方提供的SDK服务为了区分应用必须让我们提供数字签名的SHA1值,例如百度地图定位SDK、高德地图定位SDK,为了使用这些服务,我们就必须学会如何查看应用签名信息。
我们自签名的证书,由于keystore文件存在于我们可访问的路径下,我们可以直接通过keytool命令去查看证书信息。
示例命令如下:
keytool -v -list -keystore my-release-key.keystore
输入命令后,是需要输入签名密码的。
参数详解:
示例截图如下:
其实系统应用对开发者来说也是第三方应用,但是只要我们能拿到它的apk,就能知道它的应用签名信息。以我目前使用的乐运动apk为例(com.oxygen.www_3.0_40.apk)。
unzip com.oxygen.www_3.0_40.apk
keytool -printcert -file CERT.RSA
参数详解:
示例截图如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。