這一篇要把我們之前做的庫和接口通過jni在android studio中給java調用。接口主要實現了字符串“123456”的MD5輸出。
源碼文件在https://download.csdn.net/download/andylauren/12295062
github放在https://github.com/RTplay/android-ndk-sample
1.創建工程
將openssl和mylib-sample的庫都放到生成的文件夾中
arm64-v8a armeabi-v7a x86 x86_64
每個文件夾都應該有如下文件libahPlayer.so、libcrypto.so、libssl.so
注意這裏的libcrypto.so、libssl.so不是軟連接,而是真實的庫文件。
然後打開androidstudio創建native c++工程
將上面四個文件夾放到/MyApplicationC/app/src/main/cpp/libs下
2.設置ndk路徑
如果你的androidstudio已經設置了ndk可以跳過這步
如果沒有設置過,工程創建時會提示
A problem occurred configuring project ':app'.
> NDK not configured. Download it with SDK manager. Preferred NDK version is '20.0.5594570'. Log: /home/neusoft/AndroidStudioProjects/MyApplicationC2/app/.cxx/ndk_locator_record.json
在Project Structure
中SDK Location的Android NDK location選擇下載或者配置爲自己下載的ndk路徑。
/home/neusoft/Android/Sdk/Sdk/ndk/21.0.6113669
設置成功後工程會CONFIGURE SUCCESSFUL
3.修改build.gradle(Module:app)
在externalNativeBuild下添加
sourceSets {
main {
jniLibs.srcDirs = ['src/main/cpp/libs']
}
}
4.修改cpp代碼
首先將頭文件拷貝到/app/src/main/cpp目錄下
common.h openssl
修改native-lib.cpp引入頭文件並實現jni接口
#include <jni.h>
#include <string>
#include "common.h"
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplicationc2_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
char aaa[33];
return env->NewStringUTF(MD5_Digest((unsigned char *) "123456", aaa));
}
修改cmakelist.txt
添加頭文件路徑include_directories(.)
添加動態庫路徑link_directories(${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI})
在依賴中添加動態庫依賴
crypto libmylib-sample ssl
在MainActivity.java代碼中添加動態庫加載
static {
System.loadLibrary("crypto");
System.loadLibrary("ssl");
System.loadLibrary("mylib-sample");
System.loadLibrary("native-lib");
}
至此就可以運行了。