NDK調(diào)用第三方so文件
說明:此處的so可以是jni生成的或者純凈的C語言的動(dòng)態(tài)庫.關(guān)于生成.so可參看我的上篇文章.
-
導(dǎo)入第三方.so.需要新建jniLibs,必須是這個(gè)文件名,否則會(huì)找不到.so(最簡(jiǎn)單的方式)
image -
修改CmakeList文件.
image -
CmakeList的文件內(nèi)容
cmake_minimum_required(VERSION 3.4.1) add_library( share-lib#第三方so的名稱 SHARED#動(dòng)態(tài)庫標(biāo)志 IMPORTED)#導(dǎo)入第三方的標(biāo)志 #注意這兩個(gè)屬性必須靠在一起,下邊是對(duì)上邊的解釋. set_target_properties(share-lib #第三方so的名稱 PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libshare-lib.so)#設(shè)置.so的路徑(必須) add_library( # Sets the name of the library. native-lib#jni的loadLibrary的名稱 SHARED#動(dòng)態(tài)庫標(biāo)志 native-lib.cpp)#jni的源文件 target_include_directories(native-lib PRIVATE ${CMAKE_SOURCE_DIR}/../myinclude #配置include的路徑(如果需要使用.h文件的話) ) find_library( # Sets the name of the path variable. log-lib log) target_link_libraries( # 鏈接所有的.cpp .so,(.h文件不需要) native-lib share-lib#第三方so的名稱 ${log-lib})
-
此時(shí),第三方導(dǎo)入完畢調(diào)取即可.JNI調(diào)用代碼如下:native-lib.c
#include <jni.h> #include <string> extern "C" std::string getMyString(); using namespace std; extern "C" JNIEXPORT jstring JNICALL Java_com_okay_usendkdemo_MainActivity_stringFromJNI( JNIEnv *env, jobject /* this */) { return env->NewStringUTF(getMyString().c_str()); }
-
調(diào)用代碼如下:
public class MainActivity extends AppCompatActivity { // Used to load the 'native-lib' library on application startup. static { System.loadLibrary("native-lib"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Example of a call to a native method TextView tv = findViewById(R.id.sample_text); tv.setText(stringFromJNI()+"--"); } /** * A native method that is implemented by the 'native-lib' native library, * which is packaged with this application. */ public native String stringFromJNI(); }
- OK.-->完成.