【2014年8月18日】Android第三方SDK使用的一些提示

2014-08-19(二) by chenjia.me

前言

今天有个学弟问了我一个问题,关于蛐蛐儿的SDK为什么DEMO可以运行但是他一使用就直接报错。

我第一个想法是lib配置不对,提示应该加入lib order中。

这是新版本ADT中导入第三方类库经常出现CLASS NOT FOUND的原因、

学弟说他被这个问题困扰了很久了。一直导致无法继续敲代码。

然后我就试了一下~

任务开始

下载demo包

无论使用哪个网站的SDK,基本都会有DEMO包。

不过有的网站demo包是最新的,有的是sdk中的是最新的~这就要靠你来分辨了~

无论如何,我们都要下载他的demo包运行~

毕竟这是人家写好的代码,运行一是可以看效果,而是可以学习他们API调用的过程。

e.g 我下载了蛐蛐儿的DEMO包(他们只提供的demo包),然后把工程导入到ADT中编译运行~然后看到效果~

创建一个新项目

如果网站的API写的详细的话就可以直接按照说明加入到我们自己的工程去了~这点百度地图的SDK以及友盟的SDK都做的很好~点赞~

如果像蛐蛐儿这样的~以防万一我们先建立新的工程~出错了大不了可以删嘛~

  1. 新建一个新的Android工程
  2. 将lib文件复制到新的工程下的lib文件中
  3. 将res文件中的资源复制到新的工程中
  4. 将src中的源代码复制到新的工程中
  5. 修改AndroidManifest.xml文件
  6. 修正错误
  7. run it

出现的问题

很遗憾,我们的程序并没有像DEMO中一样正确运行,那么我们就要看LOGCAT(这点很重要,不会看logcat的人想必百度都不知道怎么百度)

首先是出现了这样的问题: pic1

重点是在NO JNI_ONLOAD FOUND IN XXXXX

第一反应是lib配置错了~重新配置了lib~问题依旧。

然后怀疑版本问题,因为DEMO是2.3.3而我的编译是4.4.2 然后调低了API,发现问题依旧

会不会是复制没完整,仔细对比了一下文件,发现是AndroidManifest.xml文件中缺少了权限

然后我就奇怪了~缺少权限为什么LOGCAT不是直接在error中打出来提示。

后来发现是该SDK在JNI的时候就调用了权限,并不在虚拟机中。

所以以后发现.so报错的时候可以看看这里。

修改后就可以运行了,可是学弟提醒说修改hello world就直接程序崩溃,我仔细看了一下logcat

pic2

NETWORKONMAINTHREADEXCEPTION

很常见的异常,在很老的SDK或者源代码中经常出现的异常,报错原因是因为在ANDROID3.0以后网络线程,数据库线程等比较耗时的线程都不可以直接在主线程上直接使用,换换句话说就是一定要用多线程。

估计这个人写DEMO的时候还是在2.3.3的时候,好几年没更新了!!!

然后最后推荐网络线程还是要用handler来实现多线程,方便而且可以直接在内部直接操作界面元素~

END


Comments