作者nepholi (我不是炮哥)
看板AndroidDev
标题[问题] Android Studio使用JNA
时间Wed Mar 30 13:23:18 2016
本篇好读网址
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的方法吗 囧
--
恭喜您荣获乡民资格!!
\ ˊ真是不好意思~
● ●>
/\/| (握)
∥ /\
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.225.16.96
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1459315423.A.2ED.html
※ 编辑: nepholi (36.225.16.96), 03/30/2016 13:35:40
1F:→ ssccg: 只有jar不够,还要放libjnidispatch.so 03/30 14:01
2F:→ ssccg: 另外不是随便拿个library来就能用,要拿library的source 03/30 14:03
3F:→ ssccg: code用ndk build,或是有提供build好给android用的版本 03/30 14:06
ssccg大你好
我去查了一下libjnidispatch.so在这两篇提到
http://tinyurl.com/hbyrtvp
http://tinyurl.com/z4wew27
是否就是你所提到的"要拿source code来build"概念呢
我将JNA的source code整包载下来後 对native/lib/$(platform).jar做解压缩
的确得到了libjnidispatch.so 但似乎对於放在哪里还不太能理解
我会先朝build JNA source code的方向去尝试
谢谢
※ 编辑: nepholi (36.225.16.96), 03/30/2016 14:35:05
4F:→ mshockwave: 他指的是你第三方library要有原始码吧 03/30 21:42
5F:→ mshockwave: 还有JNI也可以用程式方法去注册native端函式,关键字 03/30 21:44
6F:→ mshockwave: :JNI_OnLoad RegisterNative 03/30 21:44
7F:→ mshockwave: 我个人认为用程式码注册是会比较简洁 03/30 21:46
8F:→ mshockwave: AOSP 也是用他来处理JNI相关事务 03/30 21:46
mshockwave大你好
谢谢你提供的关键字,我有稍微看了一下用法
但我想import一个jar也是必学的一部分
会另外再找时间研究,非常感谢。
※ 编辑: nepholi (36.229.238.40), 03/31/2016 14:00:57