03.08 Google Map开发基础教程

这篇文章是我一边学习google map一边整理的思绪,文章有的地方是从google map最新api直接copy的,也为不能翻墙的朋友带点福利。

1. 开发前的准备,我的开发工具是AS1.5.1正式版,开发google map应用首先得确保sdk下载了google api和google play service以及google repository(好多帖子主要是让安装google play service,不过google api和google repository也下载也没啥大碍。)

以下是google官方文档的截图,这下知道该下载哪个sdk了吧

Google Map开发基础教程

2. 在AS导入google playservice,可以使用dependecies设置依赖,也可以设置添加extras/google里的google-play-service.jar的jar包,我这里使用的是前者,格式如下

compile 'com.google.android.gms:play-services:8.4.0'

3. 大多数涉及第三方服务的都会有第三方开发平台,有平台就需要注册开发者账号,google也不例外,需要你去注册,并将你的项目的SHA1码提交上去,生成APIKey,SHA1码通过工程的签名证书获得,一台设备一般对应一debug.keystore,

怎么用命令行读取这里就不提及了,

4. 这里我使用vpn登录code.google.com注册了google账号,

然后进入https://code.google.com/apis/console创建工程

Google Map开发基础教程

Google Map开发基础教程

申请完成后大概这样子。

Google Map开发基础教程

上面生成的API key配置到AndroidManifest.xml

Google Map开发基础教程

(下面这张是最新的,上面那张在google目前网站没有找到,可能已经变成了下面的这个样子)

Google Map开发基础教程

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

7. Release版的和debug版的没什么差别的,就生成api key的SHA1不一样。 可以自己给项目打包生成的私人证书然后导出签名,那就是Release版的。

Release版的证书你不能在eclipse里面直接run的,直接run的是用debug的签名的,Release版的需要Export出正式版apk安装才能正常使用。

8. 准备工作做得差不多了,下面开始去敲代码,由于我自己也没有尝试过google地图开发,于是我收集了很多以前的博客资料,但是大多数开发的google地图资料太老旧,太肤浅,涉及功能太少。所以建议买个vpn,直接到google 开发者网站去看google给的地图最新api,这才是学习的最佳姿势(我以前也不想用vpn,觉得没必要花这个钱,但是当你真的想从初级Android跳到更高层次,墙外的世界才是真正美景,我用的速飞跃shadowsocks,买的15块65G流量,用完为止,我也是第一次用,买个便宜的试试水,反正访问google网页速度还行,就算你没有薪水还是个学生,这点钱你还是花的起,更何况像开发者这样的高薪人员呢)

下面show一下高大上google api网页

Google Map开发基础教程

9. 以下是我综合收集到的博客以及参考最新google开发者平台的“最新api”做得开发解析(由于我是一边开发一边写文章,写到这里才开始正式看google api,所以可能后面的知识和编号9之前的知识相悖也说不定,如果知识相同,我就不提了,如果与前面的知识冲突,以编号9之后的为准)

10.

(1)新建项目

AS新建project没有啥好说的,但是在选择Add an activity to mobile时,我们一般选择的是第一个和第二个blank activity,这里google让我们新建Google Maps Activity,后面的步骤也类似了,项目初次build完毕后,注意在values下有个google_maps_api.xml文件。请注意,<code>google_maps_api.xml/<code> 文件包含有关在您尝试运行应用前获取Google Maps API 密钥的说明,这个文件在project视窗下没有,在Android视窗才有,文件名后跟了个(debug)

(2)获取API秘钥

获取方式上文已经提到过,这里不赘述。Google说该密钥免费。 您可将其用于您的任何调用Google Maps Android API 的应用,并且其支持的用户数量不受限制。

你可以通过点击google_maps_api.xml给的路径去直接申请

https://console.developers.google.com/flows/enableapi?apiid=maps_android_backend&keyType=CLIENT_SIDE_ANDROID&r=(sha1码) %3B(应用包名)

这个路径就是map的开发指南

https://developers.google.com/maps/documentation/android/start#get-key

复制生成的 API 密钥,返回 Android Studio,将该 API 密钥粘贴到 <code>google_maps_api.xml/<code> 文件的<string>

(3)代码篇

生成项目时,地图的布局已经写好,只是一个fragment碎片,用来显示android:name="com.google.android.gms.maps.SupportMapFragment"这个路径下的SupportMapFragment
 
生成项目时生成了继承自FragmentActivity的MapActivity代替了平时使用的MainActivity

(4)关于测试环境

您需要的模拟器映像具有的 Google API 平台应基于 Android 4.2.2 或更高版本。

我试过夜神模拟器,由于它不是桥接的本地网络,即使我使用了vpn,模拟器仍然不能连接google服务,所以没法测试,用genymotion的朋友可以试试,genymotion使用的是vitrualbox,这个平台可以设置虚拟机网卡为桥接连本地;开发环境流畅的朋友也可以试试AS自带的模拟器。最后我直接用公司从国外买回的Android机,手机中也有vpn,可以访问google(我自己的小米安装了vpn服务还是不行,我的VPN服务商坑了)

(5)运行程序

以上工作都做完了,就可以运行了,您看到的地图应该在澳大利亚悉尼位置带有一个标记。如果您未看到地图,请确认您已完成本页面上介绍的所有步骤。具体地讲,请确认您已按上文所述添加了 API 密钥。

我成功后的截图(突然想住在墙外了有没有)

(6)其他知识补充

指定 Google Play 服务版本号

在 AndroidManifest.xml 的 <application> 元素内添加以下声明。 其作用是嵌入编译应用时所用 Google Play 服务的版本。/<application>

/<code> 元素作为 <code><manifest>/<code> 元素的子元素:

<uses-feature> android:glEsVersion="0x00020000"
android:required="true"/>/<uses-feature>

其作用是将要求通知外部服务。 具体地讲,其作用是防止 Google Play 商店在不支持 OpenGL ES 第 2 版的设备上显示您的应用。

显示应用的证书信息

API 密钥是以应用数字证书(即其 SHA-1 指纹)的简要形式为基础。要显示证书的 SHA-1 指纹,请先确保您使用的是正确的证书。您可能有两个证书:

  • 调试证书:Android SDK 工具会在您执行调试生成阶段时自动生成此证书。此证书只能用于要测试的应用。请勿尝试发布使用调试证书签署的应用。Android 开发者文档中的在调试模式下签署部分详细介绍了调试证书。

  • 发布证书:Android SDK 工具会在您执行版本生成阶段时自动生成此证书。您也可以使用 <code>keytool/<code> 程序生成此证书。如果您已准备好向外界发布应用,请使用此证书。

  • 注意:为了保护您的密钥库和密钥,除非您确信计算机的安全性,否则请不要在命令行中输入 <code>storepass/<code> 或 <code>keypass/<code>参数。例如,在公共计算机上,可能会有人查看您的终端窗口历史记录或正在运行的程序列表、获取密码,然后获得对您的签署证书的写入权限。这样,他们就能修改您的应用或将其替换为他们自己的应用。

  • <code>com.google.android.geo.API_KEY/<code>是建议使用的 API密钥元数据名称。可使用具有该名称的密钥向 Android平台上的多个基于 Google Maps的 API(包括 Google Maps Android API)验证身份。出于向后兼容性上的考虑,该 API 还支持<code>com.google.android.maps.v2.API_KEY/<code>名称。该旧有名称只允许向 Android Maps API v2验证身份。应用只能指定其中一个 API密钥元数据名称。如果两个都指定,API会抛出异常。

/<meta-data>

/<meta-data>


分享到:


相關文章: