最近正好有一个项目需要从java层利用jna调用底层H323通信栈,尝试了一把将jna加到android上支持。如下:
1) 首先 JNA存在形式只是一个jna.jar 结构为java class + platform native lib(libjnidispatch.so),现在支持的平台有win32 x86/amd64/mac, linux x86/bsd, sun os 等等,java层应该是通用,无需做改动。所以文章就做在怎样得到android平台辨认的native .so 上。
2) 确定思路,搭建jna/native arm交叉编译环境,得到android自己的jna.jar.
3) 源码下载,开源项目非常方便
$ svn co https://jna.dev.java.net/svn/jna/trunk/jnalib
4) 选择编译器,考虑到jna是gnu项目,而且所有eabi编译器都兼容,所以选择arm-linux-none-gnueabi-gcc.
5) 进入源码树,
$ cd jnalib
6) 设置环境变量。java, gcc, ant等。
$ export PATH=/opt/ant/bin:/opt/jdk1.6.0_11/bin:/opt/arm-none-linux-gnueabi/bin:/opt/android-ndk-r4/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin:$PATH
$ export JAVA_HOME=/usr/java/jdk1.6.0_21/
7) 更改build.xml,native/makefile来支持arm平台。(比较长&#