分享

Google Maps API v2 android版本开发 国内手机不支持google play Service相关问题解决

 quasiceo 2015-12-13

Google Maps API v2 android版本开发 国内手机不支持google play Service相关问题解决--图文教程

Google Maps API v2 android版本开发 国内手机不支持google play Service相关问题解决--图文教程

google 地图在国内的使用让人很头痛,麻烦得要死,真搞不明白google为什么不能搞成跟百度地图那样让人使用。

后注:最近刷机后重新安装(默认root的)可以直接在市场上下载几个apk安装后使用google服务了。

google maps依赖于google play Service,而国内手机大部分都没预装google play Service,单独安装也安装不了,要root后经过几步安装系统app才能使用。

v2版本的申请api key方式让调试也变得复杂,开发的jar包不是用普通的导入方式就可以的,还需要导入工程,相对其他功能来说复杂了很多,网上搜索了很多资料,自己测试出了很多问题后总算在手机上看到地图了,这里记录一下,时间是2013-03-25.(以后可能现在可以的方法又不行了)。

把自己手机上最新的apk导出来传到博客上共享了 google服务相关apk-20130325.zip 

http://files.cnblogs.com/zdz8207/google%E6%9C%8D%E5%8A%A1%E7%9B%B8%E5%85%B3apk-20130325.zip 

官方介绍地址

Google Maps Android API v2的初步介绍:
  https://developers.google.com/maps/documentation/android/
  Introduction
  https://developers.google.com/maps/documentation/android/intro

===================================================

具体步骤:

一、下载 Google Play services SDK :打开Android SDK Manager进行下载。

更新sdk内容,拉到最下面,下载会到你sdk目录的extras目录下,具体路径跟你环境有关,如上图,鼠标移动上去可以看到。

二、申请api key

1.获取数字证书的证书指纹,数字证书(digital certificate)有Debug和Release两种。
本地调试的debug keystore 文件debug.keystore。
默认和虚拟机AVD存放在一起,xxx\.android\,也可以通过Eclipse中的Windows>Preferences>Android中的Default debug keystore进行查看。
Release的是自己发布应用生成的keystore
在cmd命令行里切换到你安装的JDK的bin目录中输入下列命令(路径替换成你自己的):
keytool -v -list -keystore E:\android\avd\.android\debug.keystore

debug.keystore默认密码是android,自己的签名文件是你自己设置的密码,跟发布时输入的密码一样。
查看"证书指纹"中的SHA1中的内容,这个内容记下来,接下来会使用到.
效果图如下:

2.创建Google Maps API Key

https://code.google.com/apis/console
需要先登录,首次使用会出现让你创建API工程的页面.
点击Create project后会跳转到services页面,需要在这个页面选择你要使用的API.选择Google Maps Android API v2.
跳转到服务条款确认的页面,接受后,在显示的页面中左边列表选择”API Access”,然后点击Create new Android key... 按钮.

在弹出的对话框中填写SHA1认证指纹和程序的包命,中间用分号分隔(google自带的google map v2示例程序的包命是com.example.mapdemo):
C6:3D:DB:7B:1C:07:FD:5A:53:E0:85:28:3D:D1:5F:FE:FF:8E:D1:38;com.example.mapdemo
点击create按钮后,就创建了一个新的API key:
Key for Android apps (with certificates)
API key:
AIzaSyDFGLwpvnJ33QxKvHPY7MxrhbNUX29J42Y
Android apps:
C6:3D:DB:7B:1C:07:FD:5A:53:E0:85:28:3D:D1:5F:FE:FF:8E:D1:38;com.example.mapdemo
Activated on: Mar 25, 2013 12:56 AM

 

上面生成的API key配置到AndroidManifest.xml
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyDFGLwpvnJ33QxKvHPY7MxrhbNUX29J42Y"/>

再到Service里面打开api功能,尤其是android的api v2 哪项,否则无法使用申请的key

 

三、导入工程

Eclipse中选择 File > Import, Android > Existing Android Code into Workspace. (注意: 是 Android > Existing Android Code into Workspace, 不是General > Existing Projects into Workspace, 否则是无法导入) ,拷贝到自己的工作目录,注意:这个项目和maps项目必须在同一文件夹或者工作空间才行,否则会出错。

导入<android-sdk-folder>/extras/google/google_play_services/samples/maps 注意:新版本eclipse不能先复制到workspace下再导入了,否则会报错。

Eclipse中选择 File > Import, Android > Existing Android Code into Workspace,把此程序导入到Eclipse中.(注意: 这里是 Android > Existing Android Code into Workspace, 而不是General > Existing Projects into Workspace, 否则会出现大量错误.) 

导入后发现有大量错误,解决办法

1.删除res\layout下面的options_demo.xml multimap_demo.xml 删除对应类,修改MainActivity。

2.创建libs文件夹,导入android-support-v4.jar

3.修改AndroidManifest.xml 把申请到的api key 填到里面,

注意,你的包名必须和申请的一致才可以,修改了包名以后要重新申请,当然debug.keystore不一样也要重新申请,就是说我这里这个key你是用不了的

<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyDFGLwpvnJ33QxKvHPY7MxrhbNUX29J42Y"/>

4.把google-play-services.jar这个jar包导入,在自己的项目上右键,选Properties,左边选Android,然后在下面的Library里面Add刚才的google-play-services_lib。

 

注意:一定要变成绿色打勾了以后才可以,当前情况下可以的,关闭后再进入有可能又变红x了,原因应该是路径的问题,上面说过了两个项目必须在同一workspace里面才可以。

另外,手机的google play必须更新到最新版本,否则第一次运行会提示要你先更新了才能使用。

本人的运行效果:

测试过程遇到了很多问题,可能不同环境,不同机型还会遇到其他问题,我遇到的问题要点都在上面说明了,下面是两个报错比较多的异常。

03-25 13:09:00.265: E/AndroidRuntime(16215): java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable

03-25 15:45:19.311: E/Google Maps Android API(10212): Failed to load map. Could not contact Google servers.

最后为了方便大家把自己手机上最新的apk导出来传到博客上共享了 google服务相关apk-20130325.zip

把两个导入到workspace的项目代码也发上来吧---由于key和环境不一样,其他人导入了也用不了的,只能做参考了。

google-play-services_lib.zip  maps.zip

=========================================

收集的一些反馈信息

博主,我虚拟机跑的地图是英文版的 看你截图跑出来是中午地名 这个哪里控制 。 还有博主Release版的 发布后在手机上地图跑出来了没? 我创建的私人证书 然后用里面的SHA1申请了API KEY 替换key后在手机上显示的是一片空白 地图显示不出来 只有+-两个标准 包名是匹配的  由于我是新手 第一次生成自个的私人密钥 地图始终显示不出来 我怀疑是我的证书有问题 求助啊..
---------------------------------------------------------
地图出来什么版本跟手机或者虚拟机设置的语言有关的,你把语言设置成中文,地图就变成中文了,这个是google地图自己做的事情。
Release版的和debug版的没什么差别的,就生成api key的SHA1不一样。 可以用ADT插件生成的私人证书然后导出签名。
Release版的证书你不能在eclipse里面直接run的,直接run的是用debug的签名的,Release版的需要Export出正式版apk安装才能正常使用。

========================================

流风,飘然的风,本人博客网站:http://www.
QQ群:Android技术交流群 253065556, python技术交流群:453879716 有兴趣的可以加入
posted @ 2013-03-25 19:46 流风,飘然的风 阅读(11839) 评论(20) 编辑 收藏

发表评论
  
#1楼 2013-03-26 16:35 | Jewin  
博主,我虚拟机跑的地图是英文版的 看你截图跑出来是中午地名 这个哪里控制 。 还有博主Release版的 发布后在手机上地图跑出来了没? 我创建的私人证书 然后用里面的SHA1申请了API KEY 替换key后在手机上显示的是一片空白 地图显示不出来 只有+-两个标准 包名是匹配的  由于我是新手 第一次生成自个的私人密钥 地图始终显示不出来 我怀疑是我的证书有问题 求助啊..

  
#2楼 2013-03-26 16:59 | Jewin  
@流风,飘然的风
那我Release版的在手机上跑不出来 应该就是api key的问题了 api key出了问题 那就是我在证书签名上有问题咯? 用ADT插件生成的私人证书然后导出签名 是可行的么?

  
#3楼 2013-03-26 17:13 | Jewin  
@流风,飘然的风
我测试的项目是谷歌官方示例项目 
Key for Android apps (with certificates)
API key:
AIzaSyDtSzsnloYpPkYmS75mJB4_ekHInFrlUas
Android apps:
BD:7D:38:75:76:9D:8A:F5:ED:C5:B4:FD:64:B5:07:44:03:BD:41:83;com.example.mapdemo

<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyDtSzsnloYpPkYmS75mJB4_ekHInFrlUas"/>
包名和申请到的api key是对应了的   可是还是显示空白

  
#4楼 2013-03-28 16:20 | Jewin  
@流风,飘然的风
现在最让我郁闷的事情发现了,当我下载了google地图打开运行过后,再运行我的demo 地图就跑出来了 各方面功能皆能正常使用, 然后我把google地图卸载了清除了缓存 再次运行我的demo 一切还是正常的 但是当我把我的demo卸载重装后 一切又回到原地 显示一片空白 只有+-两个logo

  
#5楼 2013-03-28 16:23 | Jewin  
@流风,飘然的风
我一直怀疑是ADT插件快捷创建的证书不行 今天我尝试用cmd创建了个新证书 提取出SHA1申请的api key 运行发现还是一样 显示一片空白 只有+-两个logo

  
#6楼 2013-03-28 16:29 | Jewin  
@流风,飘然的风
Google APIs Console.里面 Google Maps Android API v2 和Google Play Android Developer API 还有Google Maps API v2 服务我全都是开启了的
测试了这么久除了在虚拟机上直接跑出地图来了以外 就没成功的案例了 实在想不明白问题出在哪里。 难道还是说国产手机不支持Google Play services? 我用小米1 小米2 还有三星盖世3 测试均是一样的结果

  
#7楼[楼主] 2013-04-01 18:12 | 流风,飘然的风  
@Jewin
我的都是在真机上测试的 没有在模拟器上跑过

  
#8楼 2013-05-20 19:40 | wzwanlin  
Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).



楼主,这个是什么错误啊

  
#9楼[楼主] 2013-07-13 18:28 | 流风,飘然的风  
@wzwanlin
引用Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).
楼主,这个是什么错误啊

不能连接google服务,有可能是google服务器不稳定导致的,也有可能你没有安装好google的服务框架

  
#10楼 2013-07-25 22:24 | 移动中的鸭子  
楼主啊!你真的是令我泪流满面啊!就因为你一句话,一句“注意:这个项目和maps项目必须在同一文件夹或者工作空间才行,否则会出错。
”我终于解决我的问题啊!
我x度、google,死活没找到根本原因,结果却因为你这句话提醒了我,让我的程序一下子用上了地图,感谢你。
为了让后面的童鞋不要走错路我说说我的情况:
我按照“圣骑士Wind”的文章,做个地图软件,结果,运行时弹出了个错误:
android.view.InflateException: Binary XML file line #6: Error inflating class fragment
问题似乎指向“activity_main.xml"布局文件,于是我又回头将Fragment相关的包又改来改去,有说是v4包的问题,可我改了也一样,我甚至看到“圣骑士Wind”那篇文章有人提问相同问题,但是没有解决(当然,我刚刚回复了解决方案)。
最糟糕的是,我以前的那些涉及Fragment的项目全部出现同样的错误,直接崩溃,我在压力中找呀找呀,google play server装了又卸,下载个新的又装,差点以为我的所有项目作废了,正在思量今晚如何过。
结果,就因为看到你的那句话,让我彻底明白了为什么谷歌自带的demo可以我不可以的原因了,现在那个莫名其妙的”android.view.InflateException: Binary XML file line #6: Error inflating class fragment“已经不出现了。虽然不知道这个错误怎么来,但是解决了问题始终是值得庆贺。再次感激楼主。

  
#11楼[楼主] 2013-08-02 01:05 | 流风,飘然的风  
@移动中的鸭子
谢谢你的回复,这个注意之所以加红加粗也是因为我自己在这个问题上折腾了很久才搞清楚的,希望对大家有帮助。

  
#12楼 2013-09-12 17:56 | hubs  
大侠们,是实现了 google map的展示,但要实现定位必须要求你 还要安装 google play services 和store 估计好像还得gmail账号登录进去, 这样嵌套进应用的话就会强制国内手机用户安装 google play services 和store 这样用户会不满意,用一个应用要 安装3个apk, 我们现在是放弃google地图了,希望对大家有个提示帮助

  
#13楼 2013-09-29 20:41 | 苏漓江  
您好~我尝试运行了您的demo,并且已经用了我自己的的debug证书和您的项目名称生成了一个API KEY重写进去了,但是还是一直出现下面这种情况,能帮忙看下怎么解决吗,我都是按照您的步骤做的,android服务框架也都安装了啊,谢谢。

  
#14楼[楼主] 2013-09-29 21:39 | 流风,飘然的风  
@苏漓江
引用您好~我尝试运行了您的demo,并且已经用了我自己的的debug证书和您的项目名称生成了一个API KEY重写进去了,但是还是一直出现下面这种情况500) this.width=500;">,能帮忙看下怎么解决吗,我都是按照您的步骤做的,android服务框架也都安装了啊,谢谢。

根据你报错的提示 应该是你没有申请正确的api key 没有在google账号控制台里面开启google maps的功能导致的

  
#15楼 2013-09-30 11:26 | 苏漓江  
@流风,飘然的风
仔细检查了一遍我的配置信息也没有发现有哪个地方出错了,能请您帮我看看吗?配置的截图信息在这个文档里:
http://pan.baidu.com/share/link?shareid=2318449787&uk=3760930196

  
#16楼 2013-10-22 11:56 | 奶茶gg  
不错 谢谢

  
#17楼 2013-11-14 11:51 | 阑珊寻梦  
11-13 22:41:52.759: E/AndroidRuntime(757): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mlgb/com.example.mlgb.MainActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
楼主啊,我明明已经导入了呀,为什么还会显示这样。

  
#18楼 2013-11-14 11:52 | 阑珊寻梦  
[img]http://images./blog/410877/201311/14115151-5796d699bf09412c9c50c1a4b8d763fc.x-png[/img]

  
#19楼 2013-12-03 15:41 | 循序渐进-->  
啥都不说了 非常感谢楼主 !!

我的小米2s 只安装一 Play Stroe 然后启动地图 demo,在demo中 获取google 服务,自动更新 就OK了 !
再次感谢 楼主!

  
#20楼 2014-05-10 16:02 | lawrence199243  
博主您好,我尝试用了下您的代码

现在报错主要有几个方面:R.layout.basic_demo
R.drawable.newark_nj_1922,R.id.description
都是最后一个词报错,您知道哪出问题了吗?
还有您有QQ等联系方式吗?谢谢

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多