Android JNI開発--サードパーティSOの統合
5647 ワード
我々のアプリケーションはサードパーティsoのメソッドを呼び出す必要があり、サードパーティは対応するSOファイルと対応するヘッダファイルを提供することができる. SOファイル:libFunction.so; ヘッダファイル:function.h,以下:
次はこのSOとヘッダファイルfunctionの使い方です.h.
SO内メソッドの呼び出し
例えば私たちのソースファイルはTestです.cpp:
次に、javaコードが対応するJNIIメソッドjava呼び出しJNIメソッドでこのfunctionメソッドを呼び出すことができます.他の複雑な論理を追加することもできます.
サードパーティSOの使用
まず、サードパーティのSOファイルを私たちのプロジェクトディレクトリのフォルダに置く必要があります.実際には、いずれのディレクトリでも、app(module)/libs、app/src/main/libs内、またはapp(module)内に直接新しいフォルダを作成してもよいので、自分の考え通りにすることができます.例えばapp(module)内に1つ作成します.thirdpartlibsフォルダを作成し、対応するCPUアーキテクチャアダプタファイルarmeabi-v 7 aを作成し、サードパーティSOファイルをこのフォルダに配置します.そして、対応するAndroidを作成する必要があります.mkファイル、サードパーティSOファイルを私たちの新しいSOファイルに組み込みます.以下のようにします.
そして、対応する新しいlibTestを生成することができる.soファイル、javaコードで直接:
extern "C" {
......
int getResult(int index);
}
次はこのSOとヘッダファイルfunctionの使い方です.h.
SO内メソッドの呼び出し
例えば私たちのソースファイルはTestです.cpp:
//
#include "function.h"
int function(int index){
//
return getResult(index);
}
......
次に、javaコードが対応するJNIIメソッドjava呼び出しJNIメソッドでこのfunctionメソッドを呼び出すことができます.他の複雑な論理を追加することもできます.
サードパーティSOの使用
まず、サードパーティのSOファイルを私たちのプロジェクトディレクトリのフォルダに置く必要があります.実際には、いずれのディレクトリでも、app(module)/libs、app/src/main/libs内、またはapp(module)内に直接新しいフォルダを作成してもよいので、自分の考え通りにすることができます.例えばapp(module)内に1つ作成します.thirdpartlibsフォルダを作成し、対応するCPUアーキテクチャアダプタファイルarmeabi-v 7 aを作成し、サードパーティSOファイルをこのフォルダに配置します.そして、対応するAndroidを作成する必要があります.mkファイル、サードパーティSOファイルを私たちの新しいSOファイルに組み込みます.以下のようにします.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# c SO , LOCAL_MODULE
LOCAL_MODULE := libFunction.so
# c so
LOCAL_SRC_FILES := ../../../.thirdpartlibs/$(TARGET_ARCH_ABI)/libFunction.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
# c SO
LOCAL_MODULE := Test
# c
LOCAL_SRC_FILES += Test.cpp
# c SO SO
LOCAL_SHARED_LIBRARIES += libFunction.so
LOCAL_LDLIBS := -llog -landroid
NDK_APP_DST_DIR := ../libs/$(TARGET_ARCH_ABI)
include $(BUILD_SHARED_LIBRARY)
そして、対応する新しいlibTestを生成することができる.soファイル、javaコードで直接:
static
{
System.loadLibrary("Test");
}