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毫秒。

目前還有一部分的打卡數據出錯現象,主要是操作的過於頻繁以及操作超時引起的,目前還未在邏輯上發現具體問題所在,但是至少目前操作怎樣都不會閃退卡死,所以可以暫時放一下。


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