试用高德地图开发Android应用程序遇到的一些问题总结

滹水莜人 2016-11-20 标签: 技术

在看技术文章时发现了一篇比较好的文章,想跟着实际操作一下,所以就开始了学习过程,文章中有些没讲到的我自己做了补充,文章中讲到的我就不说了。

我是Android开发新手,只会一些基本的界面程序编写,对一些Android开发的技巧和约定不是很懂,所以走了一些弯路,自己记一下,高手绕路。

因为我原来是做C/C++的,阅历还可行,只是在Android方面未有时间进行系统地学习,只是参与过其中的Java开发,有一些片断性的认识和了解,现在会用一些业余时间充充电,所以文章里的一些东西,如果你看不懂也不要紧。

1. 首先是要注册一个开始者账号。

我的目的很简单,并不是为了发布一个应用,只是为了增加开发经验,注册这个有点重了。但操作一下还是有好处的。我补充三点(后增加一点):

1. 填写SHA1时,官方文档中只讲了如下如何取得sha1,没有讲如何创建这个SHA1,我就增加一下这个过程。

关于key的管理,做为一个Android开发新手,我知道APK需要打包签名及其意义,也在工作中尝试过去Hack一下别人的包。所以有一些关于key的认识。SHA1对应的是一个有名字的key,但是它的管理方式好像的Linux上的ssh不太一样,Linux上是一个相祼的key文件,而这里会组织成keystore的形式,就是说一个文件中可以包含多个不同用途的key,整个文件会有一层密码保护,每个key也会有各自的密码保护,这样做的好处是文件少,保密强,但好多人是keystore和很多key是同一个密码吧,吐槽一下密码。我自己建了两个Keystore,分别用来保存发布版和调试版的key,不过密码,呵呵,都一样,防止忘记。过程中要输入一些单位名和地址之类的,问你是否确认时,中文版中,如果提示“否”的话,你应该输入的是一个中文的“是”,这个地方好二啊!

执行下面的命令可以创建一个keystore,一路下来你应该有一个叫android的key,用就行了,暂时没看过怎么增加新key,应该不是什么难事。

keytool -genkey -v -keystore my.keystore -alias android -keyalg RSA -validity 20000

AndroidStudio中要打包时使用Key的话,需要在Build > General Singed APK选项下选择keystore文件路径和指定其中的一个key,输入密码之类的,后面弹出的master protect可以不管,直接不输入任何东西,当然是不好的习惯,如果你记忆力好请不要学我。我不太确信的一点是,我做了这个操作后AndroidStudio会怎样生成包,是只会生成签名包,还是两者都会生成,如果是后者的话,有什么一个操作可以让我指定默认运行时使用签名包还是未签名包,如果是前者的话就是我多虑了。

2. 填写包名的时候,最好已经创建了一个工程,在工程创建页面马上会有一个包名,复制过去就行了,当然如果当时没有也可以随意写,后面有了的话在key的设置中也可以随时改。

3. 在下载了SDK后,我解出来的只有三个包,分别是2d,3d,search对应的包,我觉得后两个可能没什么太大的用处,没有用,只把对应的2d中的jar包拷贝到了工程下,而且也没有找到有so,可能是新的版本全部在jar里实现了。这个jar包要想在工程中识别到就必须在工程中添加依赖,作者也说了,这个选项卡在File > project structor > app中,在dependices中点击绿色的“+”,选择file directories,找到文件后就可以加进来了。如果没有这一步,我发现后面的Activity中的MapView根本找不到,工程就编译不了。

4.后来才发现,其实高德官方下载SDK时有两个选项,一个是一键下载,另一个是自定义下载,一键下载的SDK包里居然没有定位相关的代码(工作人员工作不认真吗?),所以需要自定义下载,一定要确保勾选了定位功能,否则没法做高级功能的试验。

2. 然后看写代码的过程

1. 第一个坑是布局文件中的,我按照作者代码打上去后发现运行起来就崩溃,但调试是能走到setContenxtView的,把添加的代码去掉也是能运行的,所以问题肯定出在添加的代码上。后来发现是我下载的SDK的包名和作者用的不太一样,这容易解决,从java文件的import中把对应的包名路径拷贝过来,程序在这个地方就没有问题。

2. 作者说要添加一个meta-data到清单文件中,还要添加权限,我这种新手就比较困惑,主要问题有两点,一、这个meta-data要放在哪?通过百度(家里只能用这个),meta-data只是提供了一些静态的key-value,好像是预定义静态常量吧,它可以定义在application,activity,service等里面,这属于作用域的概念吧,我只添加到了activity中,有问题再调整吧,无伤大雅。二、关于权限问题,我在这个地方犯了错,我把权限写到了application下,我的想法是这个权限肯定不能只属于activity,因为我一个程序里面可能会有多个activity,它们可以共享权限。所以我选择了把权限放在了application下,但后来实际上程序总是报权限问题,我也不太清楚是什么原因,网上查的结果就是告诉我权限要放在manifest的下一级,还没有查到为什么不能放在application,逻辑上也没有错误,不解。

上面1,2做完后,我的程序已经可以正确地跑起来了,接下来我会跟着作者试一下高级的功能。

本文相关标签: android

赞助商

发表评论: