以前在App中集成百度地图时,需要在百度地图的开发者网站上绑定应用的包名和签名,以预防自己的key被别人乱用。
最近公司的一个球机产品也搞了类似的做法,我们要访问它的摄像头功能需要使用厂家提供的aar库,但是你要想正常调用它的Api,需要先提供应用的包名和签名文件的MD5和SHA1指纹,这比百度地图还多了一个,百度地图只需要SHA1,而他们竟然还要MD5一起,这两个有一个不就可以了吗,搞不懂。这也告诉我们在App中可以通过代码再次获取到app签名文件的指纹,这样厂家的aar库才能进行比较验证,有时间也可以查一下怎么实现的,这样以后如果自己公司有这样的需求也可以这样做了。
按照百度地图的命令是查看不到MD5指纹的,这个命令是只要安装了JDK环境就可以使用,百度地图提供的查看命令如下:
keytool -list -v -keystore platform.jks
这个jks文件可以根据你的签名文件修改,运行结果如下:
经过百度,发现有更简单的方式,使用Android Studio即可,首先需要在应用的gradle配置文件中配置好打包的配置,示例如下:
如上图,我们有两个变体,一个是debug版本,一个是release版本,两个变体都用了相同的签名文件,正常情况下debug版本要用debug的签名,release版本要用release的签名,应该分开的,但是因为我的应用需要使用系统签名,所以就算是debug版本也需要系统签名,不能使用Android Studio自带的那个默认的debug签名,否则应用中需要系统签名的Api就调用不了,一调用就会崩掉,所以可以配置成都用同一个签名配置即可。看着好像只有两个变体,其实有3个的,我也是运行了查看签名指纹的命令才发现的,在gradle的运行界面中输入如入命令,然后回车:
gradle signingReport
运行结果如下:
如上图,可以看到有三个变体:debug、release、debugAndroidTest,它们的指纹都是一样的,因为我们配置的时候配置成了同一个,其中debugAndroidTest变体无需配置,它是Android Studio自动生成的。
另外,在结果中可以看到,签名的有效期到2035年,离现在也就12年左右,好像有点短啊。这个有效期究竟可以设置多长,挺好奇的,于是用Android Studio生成一个签名,发现最长可以设置为1000年,截图如下:
再向上按发现就上不去了,或者直接输入更大的值也不行,只要光标定位到另外的输入框,有效期就会变成最近一次的有效输入(小于1000的值)