Android JNI開発--サードパーティSOの統合

5647 ワード

我々のアプリケーションはサードパーティsoのメソッドを呼び出す必要があり、サードパーティは対応するSOファイルと対応するヘッダファイルを提供することができる.
  • SOファイル:libFunction.so;
  • ヘッダファイル:function.h,以下:
  • 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");
        }