SHAR1,获取不同,release版本SHAR1,debug版本SHAR1,导致定位失败,经纬度获取为0
来源:互联网 发布:淘宝渠道管理在哪里 编辑:程序博客网 时间:2024/06/10 01:31
问题:
1,获取的shar1不同
2,直接运行到手机上没有服务,比如定位失败,导航失败;打包后是有服务的,有时候,直接运行上去又服务,打包后没有服务了,APP要上线了,出这样的问题,毫无头绪,好着急,好尴尬啊,好慌乱啊。。。。。
定位失败,导航失败,获取经纬度失败,都是这个shar1惹的祸。。。
Android studio,eclipse开发中,会经常使用到第三方的比如定位等,百度定位,导航,高德定位导航等等的服务功能,使用这个第三方的服务
首先,需要在高德或者百度的开发者官方注册账号,
然后,需要生成一个key
但是在生成这个key的过程中,需要提供一个SHAR1值,如果是eclipse开发还需要提供一个包名,如果是as开发还需要提供applicationId(在app目录下面的build.gradle里面),
最后,生成了key,在APP的配置文件中加以配置,这个key就相当于一把钥匙,钥匙需要第三方服务知道这是一个合法的key,然后第三方才会给APP提供服务,这个key第三方获取到以后怎么判断合法不合法????,就是通过这个shar1进行判断的。所以,shar1是可以得到第三方服务的关键,必须保证这个shar1的正确性
今天的重点就是讨论这个SHAR1的问题,
先说说shar1的获取方式:
方式1:直接获取
eclipse的话:
直接点击window–>preferences–>android–>build
方式2:使用 keytool(jdk自带工具)获取 SHA1
打开电脑命令行,依次输入命令:
1,cmd
2,cd .android
3,keytool -list -v -keystore 打包秘钥文件路径\秘钥
比如:keytool -list -v -keystore C:\Users\company\key\ditudemo_key.jks
4,输入秘钥库口令(就是打包时候的密码)
回车就搞定了
如果是Android studio
方式3,
打开as的terminal
依次输入命令
1,keytool -list -v -keystore 打包秘钥文件路径\秘钥
比如:keytool -list -v -keystore C:\Users\company\key\ditudemo_key.jks
2,输入秘钥库口令(就是打包时候的密码)
方式4,(高德官方提供的)
public static String sHA1(Context context) { try { PackageInfo info = context.getPackageManager().getPackageInfo( context.getPackageName(), PackageManager.GET_SIGNATURES); byte[] cert = info.signatures[0].toByteArray(); MessageDigest md = MessageDigest.getInstance("SHA1"); byte[] publicKey = md.digest(cert); StringBuffer hexString = new StringBuffer(); for (int i = 0; i < publicKey.length; i++) { String appendString = Integer.toHexString(0xFF & publicKey[i]) .toUpperCase(Locale.US); if (appendString.length() == 1) hexString.append("0"); hexString.append(appendString); hexString.append(":"); } String result = hexString.toString(); return result.substring(0, result.length()-1); } catch (NameNotFoundException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null;}
但是问题的重点不是这怎么获取这个shar1,而是shar1,不同的获取方式得到的结果不同,明明是通过正确的方式获取的shar1,正确的shar1,怎么就获取不到服务呢?这是为什么呢?
其实,①第一种获取方式和最后一种获取方式,可以看成是同一种,得到的结果也是相同的,②第二种第三种也是得到的相同的结果,然而,①②两大类的获取到的结果是不同的,这是为什么呢?
要回答这个问题,就得知道这个shar1到底是什么,它是怎么产生的,它的产生和什么有关系?????????
其实是因为,①大类获取shar1的方式是default的方式,是没有打包的,是和签名文件也就是秘钥文件没有产生关联的,就算是有关联也是debug版本的key,debug版本的秘钥,这个debug版本的秘钥是系统自动生成的;
②大类的shar1获取过程是明确通过秘钥文件生成的,因为你看到了啊,明确给出了秘钥的路劲和秘钥文件这个秘钥是开发者自己创建的,是release版本的key,release版本的秘钥
总结来说:打包程序,(必须要使用开发者自己创建的key文件,是release版本的key)获取的shar1是根据release版本的key生成的;————–;不打包程序,(是直接点击开发工具运行到手机上的,使用的是默认系统给出的系统默认的debug版本的key)是根据debug版本的key生成的,【两个shar1肯定是不同的,】debug版本的shar1,直接运行到APP上就可以获取服务,但是打包后就获取不到服务了,release版本的shar1打包后可以获取到服务,但是直接运行到手机上是不能获取到服务的
你瞧,default debug keystore: debug.keystore异常的亮眼啊。。。。不是事情太诡异,而是我们没有太仔细,是我们没有太细心,任何时候,都要仔细,细心,耐心的分析问题产生的原因,慌乱解决不了问题,只会让事情更糟糕,让心情更暴躁,让同事更觉得你是个low逼,寻根究底,一探究竟,原来问题是如此的简单。。。。。。
- SHAR1,获取不同,release版本SHAR1,debug版本SHAR1,导致定位失败,经纬度获取为0
- Android Studio 查看Shar1码
- release版本成功,debug版本失败,或者debug 版本成功,release版本失败
- AndroidStudio 获取debug和release版本的SHA1和MD5
- android-ndk-r11b/RELEASE.TXT 文件获取 NDK 版本失败。
- android-ndk-r14b\RELEASE.TXT 文件获取 NDK 版本失败
- App release版本和debug版本参数不同
- Debug 版本 vs Release版本
- debug版本与release版本
- Debug 版本 vs Release版本
- Debug 版本与 Release版本
- release版本和debug版本
- debug版本与release版本
- DEBUG RELEASE 版本
- Release Debug版本相关
- debug和release版本dll混用导致的问题
- 获取不同版本的DataRow
- DEBUG和RELEASE的不同版本 2011.12.13
- IDEA 打war包
- Scala中使用两种方式对单词进行次数统计(wordCount)
- 通过HttpURLConnection抓取图片
- dubbo运行流程
- 浙大PAT甲级-1007
- SHAR1,获取不同,release版本SHAR1,debug版本SHAR1,导致定位失败,经纬度获取为0
- springboot(十四):springboot整合shiro-登录认证和权限管理
- abstract与interface
- 新的开始
- caffe 添加Python层
- 归并排序
- java中break跳出当前循环的实例
- 《代码大全》
- 怎么去除新装修房子的甲醛