四、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");
    }

至此就可以运行了。
 

 

©️2020 CSDN 皮肤主题: 点我我会动 设计师:上身试试 返回首页