導航:首頁 > 操作系統 > androidjna

androidjna

發布時間:2023-08-30 18:24:07

『壹』 如何在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 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平台。(比較長,可略過不看)

ndex:
native/Makefile
===================================================================
---
native/Makefile (revision 1146)
+++ native/Makefile (working
)
@@ -54,8 +54,8
@@
LIBSFX=.so
ARSFX=.a
JNISFX=$(LIBSFX)
-CC=gcc
-LD=gcc
+CC=arm-none-linux-gnueabi-gcc
+LD=arm-none-linux-gnueabi-gcc
LIBS=
#
Default to Sun recommendations 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 )
@@ -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 @@

< file="${dist}/out-of-date.jar" tofile="${dist}/win32-x86.jar"
overwrite="true"/>
< file="${dist}/out-of-date.jar"
tofile="${dist}/win32-amd64.jar" overwrite="true"/>
<
file="${dist}/out-of-date.jar" tofile="${dist}/linux-i386.jar"
overwrite="true"/>
+ < file="${dist}/out-of-date.jar"
tofile="${dist}/android.jar" overwrite="true"/>
<
file="${dist}/out-of-date.jar" tofile="${dist}/linux-amd64.jar"
overwrite="true"/>
< file="${dist}/out-of-date.jar"
tofile="${dist}/linux-ia64.jar" overwrite="true"/>
<
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..的方法加入,你可以嘗試一下。
轉載五品員外郎

『貳』 GitHub上面有哪些經典的java框架源碼

閱讀全文

與androidjna相關的資料

熱點內容
互聯網程序員下班可以學嗎 瀏覽:111
通達信海洋狀態指標源碼 瀏覽:548
工作壓力大有什麼好的解壓方法 瀏覽:925
數字還可以怎樣加密 瀏覽:116
為什麼安卓沒白鳥 瀏覽:237
程序員投行 瀏覽:319
java多線程讀取文件 瀏覽:148
香港外貿伺服器有什麼好處 瀏覽:614
鄧倫參加密室大逃脫結果變成團寵 瀏覽:849
購買文件伺服器怎麼選擇 瀏覽:722
空調壓縮機高壓報警 瀏覽:502
u盤數控程序放哪個文件夾 瀏覽:856
python模擬微信登錄其他APP 瀏覽:304
綁扎鋼筋加密區規范 瀏覽:671
怎麼更換手機壁紙安卓 瀏覽:808
閑魚app賣手機怎麼走驗機 瀏覽:821
安卓三個按鍵音怎麼關閉 瀏覽:64
esp8266手機app源碼 瀏覽:713
伺服器如何建立多個站點 瀏覽:151
加密狗可以在筆記本上做賬嗎 瀏覽:888