四、android studio使用自己庫編譯工程

這一篇要把我們之前做的庫和接口通過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");
    }

至此就可以運行了。
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章