Android Studio 生成so文件 及調用

so文件是C、C++的函數庫,在Android中 調用這些庫,使用的是JNI( Java Native interface)

JNI 可以使Java程序調用本地程序或者庫(一般是使用C、C++ 或者匯編語言編寫)。

這篇文章 會介紹 使用Android Studio 如何生成so文件,及如何使用so

一.NDK環境安裝

首先需要配置NDK 的環境,沒有環境的同學,自行google或者百度,網上有很多資料。

二.JNI 開發

1.創建JniUtil類

該類的作用是定義native 接口,如下圖,我們定義了一個getKey的native方法

2.生成class文件

執行gradle clean build 命令,生成class文件

查看?build\intermediates\classes\debug\包名 ? 路徑下是否存在JniUtil.class, 如果沒有重新build

3.使用javah生成.h頭文件

使用Tirminal或者 終端 切換目錄到build\intermediates\classes\debug\ ?下執行

javah -jni com.jni.demo.JniUtil ?(JniUtil類的路徑)?

會生成com_jni_demo_JniUtil.h 文件,內容如下

這個方法就對應我們在JniUtil類中定義native方法,

4.創建 jni目錄

在app/main/ 路徑下創建jni目錄(與java目錄同級),并將上面生成的com_jni_demo_JniUtil.h 文件復制到該目錄下

5.創建.c文件

在jni文件中創建?JniUtil.c 文件,編輯內容如下:

6.創建Android.mk和Application.mk文件?

在jni目錄中創建Android.mk文件,并編輯內容如下:

LOCAL_PATH := $(call my-dir) ? // 不需要調整(代碼所在的目錄,jni目錄)

include $(CLEAR_VARS) ? ?//不需要調整

LOCAL_MODULE := jniutil ?// 庫的名稱

LOCAL_SRC_FILES := JniUtil.c ?// 需要編譯的C、C++文件

include $(BUILD_SHARED_LIBRARY)

在jni了目錄下創建Application.mk 文件,編輯內容如下:

APP_ABI := armeabi armeabi-v7a x86 // 生成so文件的平臺 ,設置為all, 代表所有平臺

7.生成so文件

切換到main目錄下 執行ndk-build 生成so文件,

這里會生成了一個libs文件夾和obj文件及,都有 so文件,我做了測試,obj 文件下的是正確的,這里還沒有確定libs文件夾的作用。

三、加載so文件

1.將我們生成的so文件復制到 app下的libs文件夾下,并配置build.gradle 文件

2.使用System.loadLibrary("jniutil"); 加載so文件,可以將其寫在JniUtil類中

當我們調用getKey方法的時候,實際就是調用了so庫中的Java_com_jni_demo_JniUtil_getKey 方法

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。