关于Android开发中的证书和密钥等问题

引言

除了Android发布应用签名时需要用到证书外,在进行google Map Api开发和Facebook SDK API开发等时都需要申请API Key,在申请这些API Key的时候,也需要用到证书。

使用Eclipse和ADT开发的时候,证书都是自动生成的,可以在Eclipse里Window->Preferneces -> Android -> Bulid Setting里看到如下截图

也即这个开发Debug用的证书在C:\Users\Haihua\.android\debug.keystore中,在这个页面我们还可以看到MD5和SHA1的指纹码,这个SHA1指纹码在google Map API Key申请时就需要使用的。

假如单人开发应用一般无所谓,但是团队开发的时候,最好使用同一个debug.keystore,这样手机间切换,可以无缝安装,而且也可是使用同样的API KEY,免得每台机子编译时都需要去申请各自不同的API Key。但是必须使用默认的别名和密码(give alias name = androiddebugkey and password = android),否则添加自定义的证书会报失败。只有别名不对时,在上述对话框的黑体Build位置会提示如下报错

当别名和密码都不对时,会报如下错误

当然还会有一些其它的报错,诸如如下使用android studio的报错

http://stackoverflow.com/questions/17189076/what-is-the-equivalent-of-eclipse-custom-debug-keystore-in-android-studio

假设设置了自定义的证书后,就会如下图所示

本以为用这个可视化工具可以查看release证书的SHA1等信息,但是由于它使用默认密码,所以也没有办法查看到。

设置完自定义证书后,clean一下,然后重新编译运行就使用自定义证书了。我将打包的apk文件,重命名为zip或rar之后,解压缩,然后在解压的\META-INF\CERT.RSA文件就是签名的证书,对这个证书使用KeyTool如下操作

keytool -printcert –file \META-INF\CERT.RSA

就会拿到这个证书的一个详细信息,下面截图有两个证书,前一个是自动生成的证书,后一个是我试验做的一个证书。具体如下所示

如何生成证书
命令行生成证书

生成证书使用的是JDK附带的一个Keytool工具,像上面一样在cmd中使用时,需要将相关的路径设置到环境变量中,比如我本地的路径名为C:\Program Files\Java\jdk1.8.0_05\bin,就要将其加到Windows的环境变量中。

上述生成debug的证书可以使用如下命令

keytool -genkey -alias androiddebugkey -keyalg RSA -keysize 1024 -keypass android -validity 365 -keystore c:\test\mozatdev.keystore -storepass android

至于具体的生成证书和Keytool工具可以看下如下链接:

java keytool证书工具使用小结 http://www.micmiu.com/lang/java/keytool-start-guide/

Android签名机制:生成keystore、签名、查看签名信息

http://www.ourunix.org/post/146.html

可视化生成证书

上述是使用命令行方式来生成证书,那么有没有可视化的生成证书方式呢?

目前我知道可以使用Eclipse的ADT工具,即右键单击项目名称,选择"Android Tools"->"Export Signed Application Package..."(输出签名的应用程序包)

有时候工程中有些Lint Error,点击是会弹出如下对话框

这个时候我们可以先忽略掉错误检查,具体如下图所示,设置好之后,需要Clean一下再重新调用上述发布包的工具,否则还是没办法进行下一步。

下一步就给一个创建Key的截图吧

具体创建的过程可以参考网上的《android_apk安装包的制作过程图解》

上述可视化方法的缺点就是必须要真的打一次包才能生成证书。

如何申请google map V2 Api KEY

关于这一步网上有一个很专门的帖子,这里先不做展开,照着做就行了,目前为上面的mozatdev.keystore申请了如下两个API Key

具体参考链接

繁体版本(内含一个完整的goole map开发)

http://www.moke.tw/wordpress/computer/advanced/410 (推荐看这个,下面这个图片太小了)

http://cheng-min-i-taiwan.blogspot.sg/2013/04/google-maps-android-api-v2-android.html

在这里不做google map api的使用,这个还来不及做整理。

如何申请Facebook API Key

上面google map API Key的申请使用的是SHA1指纹,在申请Facebook SDK API时使用的相对来说复杂一点,因为他需要用到的KeyHash,具体命令类似如下:

keytool -exportcert -alias androiddebugkey -keystore C:\Users\Haihua\.android\debug.keystore | C:\OpenSSL\bin\openssl sha1 -binary | C:\OpenSSL\bin\openssl base64

运行结果类似如下,当密码输出的情况下生成的hash是一样的,直接用回车和输入正确密码时,结果也是一样的,两者的区别就是前者不能用,后者能用,至于为啥一样,跟算法有关,我也没去细究。

除了上面提到的keytool工具外,还需要安装一个openSSL,具体可以从如下链接下载一个安装包

https://www.openssl.org/

当然如果不想这么麻烦安装这些工具的话,也可以用下面链接中的代码方式获取hash,只是我没有尝试过。

详情还可以参考Facebook相关官网

官网文档

https://developers.facebook.com/docs/android/getting-started/

一个比较老的中文翻译

http://www.cnblogs.com/tianjian/archive/2012/03/21/2410633.html

一个繁体版本的链接(我觉得挺有用的)

http://androchen.logdown.com/posts/2014/01/26/android-facebook-sdk-release-key-hash

在这里也来不及做相关API使用的具体介绍,只是简单介绍下申请API Key。

通过上面两个具体API Key的申请,想必对Android的证书会有一个比较直观的了解了。

小结一些命令

下面再单独将上述用到的几个cmd命令抽出来一下

生成证书的命令

keytool -genkey -alias androiddebugkey -keyalg RSA -keysize 1024 -keypass android -validity 365 -keystore c:\test\mozatdev.keystore -storepass android

查看证书详情的命令

keytool -list -v -keystore C:\Users\Haihua\.android\debug.keystore -alias androiddebugkey -storepass android -keypass android

如何查看apk已签名的证书详情。由于在apk安装时我也不知道怎么查看,只知道采取apk重命名后解压缩,拿到\META-INF\CERT.RSA文件,然后执行如下命令查看。

keytool -printcert -file c:\test\ShellShabikDev\cert.rsa

网上还有一种方法,用jarsigner来查看,但是这会查看所有的文件,而且看不到SHA1等指纹,具体命令

jarsigner -verify -verbose -certs ShellShabik.rar

具体显示

sm 3122 Mon Aug 25 15:51:26 SGT 2014 res/drawable-xxhdpi/common_signin_btn_text_pressed_dark.9.png

X.509, CN=FrankSun, OU=mozat.com, O=mozat, L=Singapore, ST=singapore, C=sg

[certificate is valid from 23/08/14 下午 10:07 to 23/08/15 下午 10:07]

[CertPath not validated: Path does not chain with any of the trust anchors]

导出证书的相关命令

keytool -exportcert -alias androiddebugkey -keystore C:\Users\Haihua\.android\debug.keystore | C:\OpenSSL\bin\openssl sha1 -binary | C:\OpenSSL\bin\openssl base64

时间: 2024-08-05 17:39:28

关于Android开发中的证书和密钥等问题的相关文章

android开发中碰到的三个小问题

Android开发中注意到的几个问题 1.  关于actionbar 初始化配置actionbar,getactionbar经常为null,原因是因为在源码或者布局文件中设置了全屏显示的缘故,不设置全屏显示就不会有问题. 2.  关于textview Textview默认是没有焦点的,因此不可能有点击事件,也无法直接实现背景的selector.通过设置android:clickable = true;就可以了,这一点与Button有很大的不同 3.  关于sourcinsight中的php代码.

android开发中监听器的三种实现方法(OnClickListener)

Android开发中监听器的实现有三种方法,对于初学者来说,能够很好地理解这三种方法,将能更好地增进自己对android中监听器的理解. 一.什么是监听器. 监听器是一个存在于View类下的接口,一般以On******Llistener命名,实现该接口需要复写相应的on****(View v)方法(如onClick(View v)). 二.监听器的三种实现方法 (以OnClickListener为例) 方法一:在Activity中定义一个内部类继承监听器接口(这里是OnClickListener

android开发中,两个按下手机实体返回键,两个Activity反复来回跳转的问题

android开发中,对于用intent实现跳转的Ativity,有时候按下手机的返回键时,两个Activity之间会多次相互跳转,始终退出不了程序的情况.这是由于从Activity  A跳转到Activity  B时,A被压入Activity栈中:当从B返回时,默认又重新创建了一个Activity A对象,这样一来就有了多个Activity A对象.所以造成了无法退出情况. 解决办法是:在AndroidManifest.xml文件中找到Activity A项,在其属性中加入  android:

Android开发中常用的ListView列表的优化方式ViewHolder

在Android开发中难免会遇到大量的数据加载到ListView中进行显示, 然后其中最重要的数据传递桥梁Adapter适配器是常用的,随着市场的需 求变化ListView'条目中的内容是越来越多这就需要程序员来自定义适配器, 而关键的就是适配器的优化问题,适配器没有优化好往往就会造成OOM (内存溢出)或者是滑动卡顿之类的问题,接下来我就给大家介绍一种常 用的Adapter优化方法 1 /** 2 * list View的适配器 3 */ 4 class Adapter extends Bas

Builder模式详解及其在Android开发中的应用

一.引言 在Android开发中,采用Builder模式的代码随处可见,比如说Android系统对话框AlertDialog的使用或者是Android中的通知栏(Notification)的使用,又比如说在一些常用的第三方库中也随处可见其踪迹,比如说一些常用的网络请求库如OkHttp或者是retrofit,又或者是图片加载库Glide中也不缺乏它的应用. 为什么Builder模式在Android或是Java开发中这么火呢?因为它相较于构造函数或者是Get/Set方法,它的灵活性和封装性上都比较有

android权限--android开发中的权限及含义(上)

android权限--android开发中的权限及含义(上) android.permission.EXPAND_STATUS_BAR 允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序 android.permission.FACTORY_TEST 作为一个工厂测试程序,运行在root用户 android.permission.FLASHLIGHT 访问闪光灯,android开发网提示HTC Dream不包含闪光灯 android.pe

Android学习笔记_78_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>

Android开发中使用七牛云存储进行图片上传下载

Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储原理,上面这幅图片是官方给出的原理图,表述当然比较清晰了.可以看出,要进行图片上传的话可以分为五大步: 1. 客户端用户登录到APP的账号系统里面: 2. 客户端上传文件之前,需要向业务服务器申请七牛的上传凭证,这个凭证由业务服务器使用七牛提供的服务端SDK生成: 3. 客户端使用七牛提供的客户端S

MVP模式在Android开发中的应用

一.MVP介绍 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互.同一时候让Model仅仅关系数据的处理.基于MVC概念的MVP(Model-View-Presenter)模式应运而生. 在MVP模式里通常包括4个要素: (1)View:负责绘制UI元素.与用户进行交互(在Android中体现为Activity); (2)View interface:须要View实现的接口,V