新聞中心
java jni 怎么在windows環(huán)境中編譯成linux下的so文件
可以直接在android工程下使用,因為android就是linux內核。
創(chuàng)新互聯(lián)主要從事成都網站制作、成都做網站、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務洛江,十多年網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220
android的NDK開發(fā)需要在linux下進行: 因為需要把C/C++編寫的代碼生成能在arm上運行的.so文件,這就需要用到交叉編譯環(huán)境,而交叉編譯需要在linux系統(tǒng)下才能完成。
2.安裝android-ndk開發(fā)包,這個開發(fā)包可以在google android : 通過這個開發(fā)包的工具才能將android jni 的C/C++的代碼編譯成庫
3.android應用程序開發(fā)環(huán)境: 包括eclipse、java、 android sdk、 adt等。
NDK編譯步驟:
選擇 ndk 自帶的例子 hello-jni ,位于E:\android-ndk-r5\samples\hello-jni( 根據(jù)具體的安裝位置而定 ) 。
2.運行 cygwin ,輸入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,進入到 E:\android-ndk-r5\samples\hello-jni 目錄。
3.輸入 $NDK/ndk-build ,執(zhí)行成功后,它會自動生成一個 libs 目錄,把編譯生成的 .so 文件放在里面。 ($NDK是調用我們之前配置好的環(huán)境變量, ndk-build 是調用 ndk 的編譯程序 )
4.此時去 hello-jni 的 libs 目錄下看有沒有生成的 .so 文件,如果有,ndk 就運行正常啦。
NDK和直接用JAVA編寫代碼哪個效率更高
PC機
C程序移植
ANDROID
NDK效率更高
些(編程效率)
目前
用純C
實現(xiàn)安卓編程
linux
程序
移植更
便
windows
程序
更改
要
些
NDK相關
資料比較少
調試起
比較麻煩
現(xiàn)問題
搜索起
比較費事
工程
建議用java做
工程(幾十
CPP文件)
建議用NDK
怎樣將Java源代碼轉換成Java開應用程序
我試了一下,jbuilder生成的exe文件,在沒有裝jre的機器上不能運行,于是我就在該exe文件的同一位置提供一個jre目錄,可是該exe文件不會去自動找這個jre,應該怎樣做才能使exe文件找到這個jre,并運行起來呢?
先寫一個bak,檢查有沒有jre,有的話就直接運行你的程序,沒有的話,先安裝再執(zhí)行。
---------------------------------------------------------------
jbuilder有一個隱藏的技巧可以讓你從可執(zhí)行文件來啟動java程序,(不出現(xiàn)console窗口我沒有做到)。需要jbuilderx的bin目錄下的這些文件:
jbuilder.exe
jbuilderw.exe (可選)
jbuilder.config
jdk.config
“jbuilder.exe”是一個通用的可執(zhí)行外殼文件,用以啟動java程序,“jbuilderw.exe”好像是javaw.exe一樣,它把“jbuilder.exe”包裝起來,但是運行時候不顯示那個console的窗口。使用這些文件的關鍵是文件名?!癹builder.exe”查找一個文件叫“jbuilder.config”的配置文件,里面包含了運行java程序的必須信息。同樣的“jbuilderw.exe”查找“jbuilder.exe”來啟動不帶console窗口的java程序。如果把jbuilder.exe重命名為“foo.exe”,那“foo.exe”將去尋找“foo.config”配置文件,同樣“jbuilderw.exe”被重命名為“foow.exe”,它會去尋找“foo.exe”文件。
說到這里,聰明的讀者應該猜到怎樣利用jbuilder.exe來啟動應用程序了。只要把jbuilder.exe,jbuilerw.exe,jbuilder.config改名成相應的文件名,在jbuilder.config里面指定主類和類路徑,就能夠通過執(zhí)行jbuilder.exe(或者被改名后的exe文件)來啟動java應用程序了。
在\jbuilderx\bin\目錄下,后把jbuilder.exe,jbuilder.config,jdk.config四個文件拷貝到某目錄下,然后打開jbuilder.config文件,作相應的修改:
在jbuilder.config里面找到下面兩行
# start jbuilder using the its main class
mainclass com.borland.jbuilder.jbuilder ----修改主類為自己希望的類
config里面可以識別的命令可以在jbuilder/bin目錄下的config_readme.txt里面找到詳細說明。
然后修改jdk.config里面的javapath相對的路徑,例如原來是
javapath ../jdk1.3/bin/java ----修改主類為自己打包的jre路徑(可以使相對路徑,如./jre)
最后將jbuilder.exe,jbuilder.config修改成所需要的文件名,例如foo.exe和foo.config文件。
下面的小技巧可能更有趣,將jar文件打包進入exe文件!
將jar包附加到jbuilder.exe后面去,執(zhí)行過程:
copy /b ..\jbuilder.exe+hello.jar foo.exe
一個含jar包的exe文件得到了!
這個過程的大致原理是:exe文件的重要信息都在文件頭部,所以把亂七八糟的東西放exe文件尾部是不要緊的;而jar/zip文件的重要信息是在文件尾部的,這樣它們兩不相干,能夠容易的被執(zhí)行。
ndk生成的so怎么在java調用
1. 自己寫.c文件,然后生成so庫
2. 引用別人的靜態(tài)庫,或者動態(tài)庫來生成新的jni調用庫。
我們先來看最簡單的編寫一個jni調用的so庫,包含一個獲取字符串的方法,通過這個列子,我們主要是了解怎么在android的工程中調用jni的庫,以及要注意的問題。
第一步:首先我們來看下我們的工程的目錄
jni目錄是我們生成庫的文件,里面包含了一個.mk編譯文件以及一系列的.c文件
libs目錄是我們編譯jni目錄下的mk文件動態(tài)生成的。
當我們寫好了jni下面的庫文件以后,在當前目錄下執(zhí)行ndk-build則會自動生成我們需要調用的.so庫文件。
第二步: java里面怎么調用jni的庫文件,我們先看代碼
public class MainActivity extends Activity {
/* A native method that is implemented by the
* 'hello-jni' native library, which is packaged
* with this application.
*/
public native String stringFromJNI();
/* this is used to load the 'hello-jni' library on application
* startup. The library has already been unpacked into
* /data/data/com.example.HelloJni/lib/libhello-jni.so at
* installation time by the package manager.
*/
static {
System.loadLibrary("hello-jni");
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String str = stringFromJNI();
System.out.println("*****str:" + str);
}
}
在java文件中要做到調用jni文件生成的so庫,需要做到2步
分享題目:java代碼轉ndk java代碼轉換器
文章地址:http://www.dlmjj.cn/article/ddeohop.html