標籤:使用jni 調用c語言
首先必須知道JNI是什麼東東?
JNI(Java Native Interface)是java本地語言介面,也就是提供一種方法可以用JAVA調用底層語言(C/C++)。一般如果項目必須使用C語言操作底層的硬體,那就必須用到JNI技術。
那既然要使用JAVA調用C語言,那必須要解決幾個問題?
1:JAVA是物件導向的語言,而C是面向過程的語言
2:JAVA中的Object,String類型,Boolean類型,在C中都是沒有的,那C語言是如何識別的?
其實這些JNI都給我們做好了,在JNI的標頭檔#include <jni.h>中就有
typedef unsigned char jboolean; /* unsigned 8 bits */typedef signed char jbyte; /* signed 8 bits */typedef unsigned short jchar; /* unsigned 16 bits */typedef short jshort; /* signed 16 bits */typedef int jint; /* signed 32 bits */typedef long long jlong; /* signed 64 bits */typedef float jfloat; /* 32-bit IEEE 754 */typedef double jdouble; /* 64-bit IEEE 754 */
/* * Reference types, in C. */typedef void* jobject;typedef jobject jclass;typedef jobject jstring;typedef jobject jarray;typedef jarray jobjectArray;typedef jarray jbooleanArray;typedef jarray jbyteArray;typedef jarray jcharArray;typedef jarray jshortArray;typedef jarray jintArray;typedef jarray jlongArray;typedef jarray jfloatArray;typedef jarray jdoubleArray;typedef jobject jthrowable;typedef jobject jweak;
可以看到JAVA中的object對象在void* ,這個學過C語言的大家都知道。
注意:在學習JNI之前,需要在Google官網下載NDK安裝,並且配置環境變數。
本次我們學習如何使用JAVA語言調用C語言,然後列印Hello World!
第一步: 建立一個Android Application工程
第二步:在項目根目錄下建議一個檔案夾,命名為jni
第三步:在jni檔案夾中,建立一個C檔案
第四步:在Java代碼,建立一個本地方法: helloFromC
第五步:在hello.c中實現第四步定義的本地函數,但是函數名必須為:Java+包名+Java檔案+本地方法名
如: Java_com_demo_helloworld_MainActivity_helloFromC(JNIEnv* env, jobject obj)
第六步:把c的字串轉化為Java的字串返回
第七步:在jni檔案夾中建立Android.mk檔案,這個類似與MakeFile檔案
第八步:在jni檔案夾下執行ndk-build.cmd指令
第九步:在Java中載入動態庫,調用本地方法
第十步:部署,如果出現以下錯誤
說明CPU平台是補對的,預設是ARM的架構CPU,而我模擬器用的X86的,難道我要建立一個ARM的模擬器,不用那麼麻煩
第十一步:編譯支援X86的平台,在jni檔案夾下建立Application.mk檔案
可以發現再次編譯,出現了x86的庫
再次部署運行:
可以看到C語言返回的Hello_World可以正常列印出來了。說明JAVA調用C語言成功。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Android 學習JNI,用JAVA調用C