Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 學習JNI,用JAVA調用C

Android 學習JNI,用JAVA調用C

編輯:關於Android編程

首先必須知道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 中就有

 

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語言成功。

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved