Android apk签名
目录
- 目录
- 概述
- 数字签名证书生成方法
- 命令行工具keytooljarsinger
- Android Studio
- 小结
- 查看应用签名信息
- 查看自签名证书的信息
- 查看第三方应用或Android系统应用签名证书信息
概述
Android系统要求所有的应用必须被证书进行数字签名之后才能进行安装。android系统通过该证书来确认应用的作者,该证书是不需要权威机构认证的,一般情况下应用都是用开发者的自签名证书,该证书是确保应用程序和应用程序作者之间建立信任关系,而不是用来决定用户可以安装哪些应用程序。
应用进行数字签名的好处和注意事项如下:
- Android所有的应用程序必须要有数字证书签名,Android系统不会安装一个没有数字证书签名的程序。
- Android系统中,系统app使用的是平台证书签名,而第三方app一般使用开发者的自签名证书。
- Release版本的第三方app(例如淘宝、支付宝、微信),必须使用一个合适私钥生成的数字证书来给程序进行签名,并且保证每次的迭代新版本都是使用相同的证书进行数字签名。不然的话,新版本和旧版本的数字证书不一致,Android系统会认为这是两个不同的app,导致更新等操作失败。
- 数字证书是存在有效期的,这也决定了app的预计生命周期,如果数字证书超期失效,则应用无法安装或者无法正常升级。
- Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。 不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程中,而且要让他们用相同的证书签名。
数字签名证书生成方法
声明:实验生成的keystore只是作为演示使用,并没有实际应用到项目中。大家参考时也要根据我的博客手工修改部分参数,切忌无脑照抄!
Android是使用标准的Java工具keytool和jarsigner来生成数字证书,而目前市场上第三方IDE(Android Studio和Eclipse)都是通过图形化系统帮我们封装了这两个工具的具体执行步骤。
接下来,我会介绍两种生成数字签名证书的方式,分别通过命令行和Android Studio进行生成。
命令行工具(keytool&&jarsinger)
由于Android的数字签名证书是用java标准工具生成的(路径为:$JAVA_HOME/bin目录下),那我们当然可以在命令行生成数字证书了,具体方法如下。
- 使用keytool生成数字签名证书。示例命令如下:
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
- 1
![](http://static.blog.csdn.net/images/save_snippets_01.png)
参数详解:
- -keystore : 指定生成数字签名证书的文件名和路径。
- -alias:指定证书的别名。
- -keyalg:指定生成证书所需要的算法。
- -keysize:指定证书大小。
- -validity:指定证书的有效期,单位为天。
示例截图如下:
- 使用生成的keystore,利用jarsinger为应用进行签名。示例命令如下:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
![](http://static.blog.csdn.net/images/save_snippets.png)
参数详解:
- -sigalg:签名算法的名称。
- -digestalg:摘要算法的名称。
- -keystore : 指定签名证书的位置。
- alias_name:签名证书的别名。
示例截图如下:
- google官方同时推荐使用zipalign工具对签名的apk进行优化。该工具位于Android SDK的/build-tools/版本号/目录下。示例命令如下:
zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk
- 1
![](http://static.blog.csdn.net/images/save_snippets.png)
- 1
示例截图如下:
Android Studio
使用命令行的方式可以显得geek,并且让我们更多的了解实现细节。但是,平时应用开发中更多的是注重效率,因此,我们可以采用目前google官方推荐的AS帮我们实现应用数字签名功能。具体步骤如下。
- 选择编译Module->Build->Generate Signed APK->选择编译Module->Next。
选择Create new,创建一个新的数字签名证书。
填写证书信息。
填写完成之后,我们点击OK,就可以生成我们的数字签名证书了。
上述工作完成后,我们就生成了数字签名证书,但是还没有对我们的apk进行签名。想要用生成的数字证书对apk进行签名,还需要修改当前Module的build.gradle文件,增加签名命令,具体内容如下:
android {compileSdkVersion 19buildToolsVersion "19.1.0"defaultConfig {applicationId "××××××"minSdkVersion 8targetSdkVersion 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.releaseminifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'}debug {// 配置debug版本的数字签名signingConfig signingConfigs.debug}}lintOptions {abortOnError false}
}
![](http://static.blog.csdn.net/images/save_snippets.png)
当然,上述命令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
- 1
![](http://static.blog.csdn.net/images/save_snippets.png)
- 1
输入命令后,是需要输入签名密码的。
参数详解:
- -list:列出密钥库中的条目。
- -keystore:数字证书位置。
示例截图如下:
查看第三方应用或Android系统应用签名证书信息
其实系统应用对开发者来说也是第三方应用,但是只要我们能拿到它的apk,就能知道它的应用签名信息。以我目前使用的乐运动apk为例(com.oxygen.www_3.0_40.apk)。
- 用unzip命令解压apk。
unzip com.oxygen.www_3.0_40.apk
- 1
![](http://static.blog.csdn.net/images/save_snippets_01.png)
- 1
- 进入META-INF文件,找到其中的CERT.RSA文件。
- 使用keytool工具进行信息查看,具体命令如下:
keytool -printcert -file CERT.RSA
- 1
![](http://static.blog.csdn.net/images/save_snippets_01.png)
- 1
参数详解:
- -printcert:打印证书内容
示例截图如下:
Android apk签名相关推荐
- Android APK 签名比对
Android APK 签名比对 转载请注明出处:http://www.blogjava.net/zh-weir/archive/2011/07/19/354663.html Android APK ...
- Android APK签名原理
Android APK 签名原理涉及到密码学的加密算法.数字签名.数字证书等基础知识,这里做个总结记录. 非对称加密 需要两个密钥,一个是公开密钥,另一个是私有密钥:一个用作加密的时候,另一个则用作解 ...
- Android APK签名 JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore E:\xxxxxx- pkcs12“ 迁移到行业标准格式
Android Studio中进行签名 转载地址:Android APK签名 JKS 密钥库使用专用格式.建议使用 "keytool -importkeystore -srckeystore ...
- Android apk签名获取方法
Android apk签名获取的一种方法,供大家参考 Windows(黑窗口)或Mac(终端)获取apk的签名: 1,先获取.jks文件路径(复制好备用) 2,在黑窗口或终端中输入 keytool - ...
- android apk签名工具_关于keytool和jarsigner工具签名的使用小结
在我们日常Android应用开发中,我们都要对我们开发的apk做签名处理,或者加固,增强我们apk的安全性,防止被逆向反编译,在apk签名这块,我们一般采用JDK自动工具来签名,下面就对相关工具做个简 ...
- android软件更新模块实现的技术和方法,Android APK签名原理及方法
一 Android签名机制及原理 Android系统在安装APK的时候,首先会检验APK的签名,如果发现签名文件不存在或者校验签名失败,则会拒绝安装,所以应用程序在发布之前一定要进行签名.给APK签名 ...
- Android apk签名方法
为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动 ...
- Android Apk签名修改V1,V2,V3,V4
Unity游戏打出 Android Apk 包,默认签名方式是V1,V2方式的. 但是九游要求只能用V1签名方式.那就对生成的 Andorid Apk包重新签名就OK了. 改签环境 改签 Androi ...
- 对Android apk 签名 --apksigner
Android自签名方法,仅作记录. 因 apksigner 签名工具支持V1和V2签名,所以选用它 进行手动签名: 步骤如下: 切到Android SDK/build-tools/SDK版本, 输入 ...
- Android Apk 签名方案
Android签名方案 Android签名方案 V1签名(jarsigner方式) V2签名(apksigner方式) 验证签名 V3 签名 优化 查看签名文件证书(MD5/SHA1/SHA256.. ...
最新文章
- L - Oil Deposits HDU - 1241
- 手机虚拟摄像头_没键盘也能打字?三星展示最新虚拟键盘Selfie Type:是真的
- C 语言编程 — 逻辑控制语句
- 加ing形式的单词有哪些_高中英语人教版必修5知识研习Unit4重点单词treat
- Html点击按钮时 修改某个标签的 click点击事件
- VS 2019 要来了,是时候了解一下 C# 8.0 新功能
- ubuntu 关机重启
- 第 25 章 策略模式
- Java IO学习笔记总结
- Datamill 一个开源的框架
- gb28181的sip通信
- java 单体 启动优化_java设计优化之单例模式
- 几种主流的分布式定时任务
- Teechart 的用法详解:在VC6.0 跟Visual Studio 2005及之后版本的区别
- 22个Python绘图包,极简总结
- 【JZOJ A组】东风谷早苗
- 推特CEO继任者曝光:带着老婆孩子睡公司,钢铁侠20年嫡系,现在掌舵挖洞公司...
- 码流 /码率 / 比特率
- python 常用win32api 后台截图 后台鼠标 后台键盘 后台输入文字 剪切板
- 谷歌seo关键词怎么做?Google如何优化关键词