Android 學習JNI,用JAVA調用C

來源:互聯網
上載者:User

標籤:使用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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.