android项目添加so文件遇到的各种问题

记录一下目前开发遇到的问题,以方便以后的总结。

这是一个在手机背面添加单片机,用来打卡读卡功能,由单片机厂家提供so文件进行单片机的控制与磁卡读取。

一开始进行添加,毕竟是从eclipse当中移植到android studio当中的项目,so文件的路径有一定的差别。

按照网上所言进行配置之后,就开始了无论什么调整启动金手指初始化的代码都会报错

java.lang.UnsatisfiedLinkError: Native method not found:

之旅。

无论是cpu的适配还是路径的指向,甚至ndk的下载配置,依然是上面的报错,不增不减,很是任性。

因为是第一次接触给项目中添加so文件,所以很长时间都以为是自己的文件导入方式有问题。

但是后来发现因为安装在手机背后的金手指是临时安装,并没有把后盖完全关紧,可以看到金手指的电源指示灯光,就尝试跳过这段报错的初始化金手指代码。

用厂家提供的demo开启电源,然后注释掉程序里面单片机的初始化电源与信号源操作代码,运行。

果然不报错,且可以读卡。

也就是说,只有厂家提供单片机电源调试so文件会出现报错,而另一个负责接口读卡的so文件则没有任何问题,那么这么看来 这就不是我导入的问题了。

查阅网上大量资料以后,一篇小文章引起了我的注意,里面也跟我一样的问题,但是对方提到过,不光是android studio当中报错移植到另外的eclipse项目中一样报错,这就给了我一个提示。

赶紧把代码从商家提供的demo中移植到新建的eclipse项目中,运行调试,一样的报错。

那么这就只能是包名路径名的问题了。

果不其然,将调用so文件的公共类放置在与厂家提供的demo一致的路径包名之下,就可以正常运行,估计是C++代码里需要通过反射调用java层代码吧。

总的来说这个真的是非常的任性。

之后就是一路的开辟子线程,添加控制读卡时间的倒计时条进行调试。

然后又发生了莫名其妙的问题,手机安装好debug的app后运行第一次打卡,金手指卡死,无法读取磁卡。强退app,重新运行,打卡,正常读卡。退出,运行,读卡,卡死……

于是就变成了一次不能读卡,一次能读卡,一次不能读卡的怪异问题。

一开始以为是逻辑的错误,有可能是应该先打卡的接口被放到后面执行。

但是立马让我给否定了,因为厂家提供的demo运行完美。

因为是金手指卡死并不是手机自身的问题,日志里并不报错,加上真机测试日志输出干扰太多,所以无法用Log打印进行测试,便采用了debug断点形式进行测试,一条一条代码的运行找错。

结果运行的那叫一个完美。

那就只能是运行中有的代码必须延迟执行了……

每行代码都进行延迟执行这是不现实的,就采用Toast方式查看具体哪行需要延时(有意思的是,加入几条Toast之后竟然运行完美了开始,就一条一条的注释查看)。

经过调试,发现打开接口的那两行代码之后的代码需要延时执行,设立延时200毫秒,解决问题。



总结:

结合硬件的单片机进行打卡的功能这么一个小功能,居然耗费了我整整一个周的时间(绝大部分还是消耗在了包名路径名的报错闪退上),这真是……



===========================2016.9.6 补充=======================

除了打开接口,关闭接口依然需要一定的延时,暂定500毫秒。

目前还有一部分的打卡数据出错现象,主要是操作的过于频繁以及操作超时引起的,目前还未在逻辑上发现具体问题所在,但是至少目前操作怎样都不会闪退卡死,所以可以暂时放一下。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章