[問題] Android Studio使用JNA

作者: nepholi (我不是砲哥)   2016-03-30 13:23:18
本篇好讀網址 http://tinyurl.com/gkpacec
先向各位鄉民請安
小弟最近初入Android,
如有較為愚蠢或基礎的觀念不對的話還請各位指教。
前陣子使用Android Studio成功寫出一個簡單的app
但都是使用純JAVA的code base。
最近因應公司需求,要開始朝"使用第三方Library"發展
直接聯想到的就是一定會被廣泛使用的C library (.dll)
查了一些官網以及網路上各神人的sample code
逐漸理解了『JNI』的實現方式
但有鑑於JNI對應到的C method必須要有特殊的命名法
Java_projectPath_className_cMethodName
所以我的理解是
"拿到dll之後要另外再包一層.h讓JNI認得" 這理解有誤嗎?(Q1)
這個方法不是不行但似乎要多不少功夫
於是查到了JNA這個備受推崇的第三方jar
看起來是強化很多JNI不方便的地方
https://github.com/java-native-access/jna (GitHub)
由頁面說明可看出眾多公司及有名的專案都有使用
促使小弟嘗試使用
於是遇到了以下諸多關於操作Android Studio的基本問題
(鋪梗鋪很久?)
環境:
Windows 10
Android Studio1.5.1
JDK 1.8.0_73
NDK r11 (用AS的SDK Manager裝)
1.
我使用AS(1.5.1)開啟了一個新的專案JNATest,選擇API18
參考這個網址的做法 http://goo.gl/yydkFW
找到路徑 JNATest/app/libs 將下載好的jna.jar放入
(JNATest/app/libs/jna-4.2.2.jar)
要import進去的jar,放在此路徑有放錯嗎? (Q2)
2.
http://imgur.com/xywVu9K
在MainActivity.java寫好基本的JNA sample
然後在AS左側的project樹狀圖找到jna-4.2.2.jar點右鍵選擇"Add as library"
可以看到關於import com.sun.jna部分的警告都已消除
http://imgur.com/H0mA9Fm
檢查過Project Structure的Dependencies有包含jna-4.2.2.jar
檢查過build.gradle的dependencies也有compile files
我這段test code是參考wiki對於JNA的example
https://en.wikipedia.org/wiki/Java_Native_Access#Example
但問題出在圖中的紅色箭頭所指
當我去呼叫printf()的時候就造成crash (Q3)
Android Monitor顯示錯誤為下圖
http://imgur.com/kdCdaYM
實體裝置為Sony Z3 搭載Android 5.0.2
我查了好多篇文獻都是在講code如何implement
卻都沒有提到有關設定的部分
感覺很像是基本常識所以沒人提\⊙▽⊙/
請問是不是我在import jar的設定哪裡錯誤..
或是有人可以提供如何使用JNA的方法嗎 囧
作者: ssccg (23)   2016-03-30 14:01:00
只有jar不夠,還要放libjnidispatch.so另外不是隨便拿個library來就能用,要拿library的sourcecode用ndk build,或是有提供build好給android用的版本
作者: mshockwave (夏克維夫)   2016-03-30 21:42:00
他指的是你第三方library要有原始碼吧還有JNI也可以用程式方法去註冊native端函式,關鍵字:JNI_OnLoad RegisterNative我個人認為用程式碼註冊是會比較簡潔AOSP 也是用他來處理JNI相關事務

Links booklink

Contact Us: admin [ a t ] ucptt.com