[问题] 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