當前位置:編程學習大全網 - 源碼下載 - 如何在android上支持jna <二>實戰步驟

如何在android上支持jna <二>實戰步驟

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 mendations for JNI compilation

COPT=-O2

-fno-omit-frame-pointer -fno-strict-aliasing

@@ -126,10 +126,12

@@

endif

ifeq ($(OS),linux)

-ARCH=$(shell uname -m | sed

's/i.86/i386/g')

+ARCH=arm #$(shell uname -m | sed

's/i.86/i386/g')

PCFLAGS+=-fPIC

CDEFINES+=-DHAVE_PROTECTION

LDFLAGS+=-Wl,-soname,$@

+FFI_CONFIG

+=

--host=arm-none-linux-gnueabi

+CINCLUDES+=-I/usr/include

endif

ifeq

($(OS),freebsd)

Index:

build.xml

===================================================================

---

build.xml (revision 1146)

+++ build.xml (working copy)

@@ -92,6

+92,7 @@

<os arch="ppc64"/>

<os

arch="sparcv9"/>

<os arch="amd64"/>

+ <os

arch="arm"/>

</or>

</condition>

<condition property="ld.preload" value="LD_PRELOAD_64"

else="LD_PRELOAD">

@@ -110,6 +111,9 @@

<condition

property="jre.arch" value="i386">

<equals arg1="x86"

arg2="${os.arch}"/>

</condition>

+ <condition

property="jre.arch" value="arm">

+ <equals arg1="arm"

arg2="${os.arch}"/>

+ </condition>

<condition

property="jre.arch" value="amd64">

<equals arg1="x86_64"

arg2="${os.arch}"/>

</condition>

@@ -285,6 +289,7 @@

<copy file="${dist}/out-of-date.jar" tofile="${dist}/win32-x86.jar"

overwrite="true"/>

<copy file="${dist}/out-of-date.jar"

tofile="${dist}/win32-amd64.jar" overwrite="true"/>

<copy

file="${dist}/out-of-date.jar" tofile="${dist}/linux-i386.jar"

overwrite="true"/>

+ <copy file="${dist}/out-of-date.jar"

tofile="${dist}/android.jar" overwrite="true"/>

<copy

file="${dist}/out-of-date.jar" tofile="${dist}/linux-amd64.jar"

overwrite="true"/>

<copy file="${dist}/out-of-date.jar"

tofile="${dist}/linux-ia64.jar" overwrite="true"/>

<copy

file="${dist}/out-of-date.jar" tofile="${dist}/freebsd-i386.jar"

overwrite="true"/>

@@ -598,6 +603,9 @@

<zipfileset

src="${dist}/linux-i386.jar"

includes="*jnidispatch*"

prefix="com/sun/jna/linux-i386"/>

+ <zipfileset

src="${dist}/arm-none-linux.jar"

+

includes="*jnidispatch*"

+

prefix="com/sun/jna/android"/>

<zipfileset

src="${dist}/linux-amd64.jar"

includes="*jnidispatch*"

prefix="com/sun/jna/linux-amd64"/>

8) 編譯

$ ant -Djre.arch=arm -Dos.arch=arm -Dos.prefix=linux-arm

9)編譯完成,妳就可以在build下等到arm編譯器編出來的jna.jar了, 如果妳用eclipse,就可以直接Project...->add

Jar 使用它了。有可能(還不確定), android不支持在jar包中加本地native .so 的做法,妳可以將jna.jar分拆開將java

class還以Jar的方式加載,而把linux-arm/下的libjnidispatch.so以add Lib..的方法加入,妳可以嘗試壹下。

轉載五品員外郎

  • 上一篇:信托投資公司信息披露管理暫行辦法的第二章
  • 下一篇:什麽是慢速隨機指標SKD
  • copyright 2024編程學習大全網