【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都做的很好~点赞~
如果像蛐蛐儿这样的~以防万一我们先建立新的工程~出错了大不了可以删嘛~
- 新建一个新的Android工程
- 将lib文件复制到新的工程下的lib文件中
- 将res文件中的资源复制到新的工程中
- 将src中的源代码复制到新的工程中
- 修改AndroidManifest.xml文件
- 修正错误
- run it
出现的问题
很遗憾,我们的程序并没有像DEMO中一样正确运行,那么我们就要看LOGCAT(这点很重要,不会看logcat的人想必百度都不知道怎么百度)
首先是出现了这样的问题:
重点是在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
NETWORKONMAINTHREADEXCEPTION
很常见的异常,在很老的SDK或者源代码中经常出现的异常,报错原因是因为在ANDROID3.0以后网络线程,数据库线程等比较耗时的线程都不可以直接在主线程上直接使用,换换句话说就是一定要用多线程。
估计这个人写DEMO的时候还是在2.3.3的时候,好几年没更新了!!!
然后最后推荐网络线程还是要用handler来实现多线程,方便而且可以直接在内部直接操作界面元素~
END