Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android--JNI簡單的實例解析

Android--JNI簡單的實例解析

編輯:關於android開發

Android--JNI簡單的實例解析


最近項目迭代了幾個版本,目前比較輕松,雖然項目閒了,但是人不能太閒,否則就廢了。千裡之行始於足下、量變引起質變、學而不思則罔.......好了好了好了.....編不下去了,讓我們直入正題吧,還是再說一句吧,歡迎大家交流學習,共同進步,歡迎扔搬磚,就算是你扔我也不接大笑

一、新建一個Android項目,和以前自己建項目是一模一樣滴

二、創建一個JNICall.java類:

\

創建一個本地方法,這個方法作為我們調用C/C++程序的接口,另外我們通過static的方式,靜態的去加載.so文件。

三、添加本地支持

選中項目,右鍵---->Android Tools---->Add Native Support,如圖:

\

這時會彈出一個Add Android Native Support對話框,此時我們輸入我們的要加載的so文件的名稱就ok啦:

\

此時項目會多出一個,jni文件夾,裡面包含了一個my_jni.cpp和Android.mk文件,如圖:

\

其中my_jni.cpp文件中只有一行代碼,引入了jni庫:

\

下面我們來看看Android.mk文件:

\

這個自動生成MakeFile文件中有多個屬性:

 

LOCAL_PATH是C/C++代碼所在目錄,也就是我們的jni目錄。

 

include$(CLEAR_VARS)代表清除之前的依賴類庫

LOCAL_MODULE是要編譯的庫的名稱,就是我們在Add Android Native Support對話框中輸入的名稱。編譯器會自動在前面加上lib,在後面加上.so。

LOCAL_SRC_FILES是要編譯的C/C++文件。

include$(BUILD_SHARED_LIBRARY)代表編譯出來的是動態庫,其中include $(BUILD_STATIC_LIBRARY),編譯出的是靜態庫 。

四、編譯JNI,下面我們需要生成.h的頭文件:

找到Android項目中的bin文件夾,找到classes文件夾,eclipse為我們自動生成的字節碼文件都在這個文件夾下面,首先在命令行中使用cd命令切換到該目錄下,然

後使用javah命令,生成我們想要得到的.h頭文件:

\

這個頭文件生成的名字,我們是可以修改的,只要合法就可以,讓我們來看一下生成的.h文件:

\

五、編寫生成本地庫的cpp文件:

\

這裡我們需要引入頭文件,關鍵的是我們來看一下方法名的格式:

Java_com_example_jnidemo_JNICall_myJni

Java:固定的寫法,必須如此

com_example_jnidemo:為包含native方法的包名

JNICall:為包含native方法的類名

myJni:為native方法名

這幾個方法名我們一定要對應起來,否則會出現錯誤:java.lang.UnsatisfiedLinkError: Native method not found

六、生成.so文件(這一步不是必須的,因為我們可以在運行的時候,eclipse可以自動會和項目一塊編譯生成.so文件,當然了我們也可以自己單獨編譯,下面介紹一下單獨編譯的過程)

首先通過命令cd進入到項目所在的目錄,然後通過ndk-build命令生成.so文件:

\

說明so文件生成了,刷新一下項目,然後我們來看一下目錄的變化:

\

七:調用native方法:

\

八、運行項目,效果如圖:

\

 

目前為止,一個簡單的JNI程序已經完成了

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