JNI 入门

2019-03-11  本文已影响0人  Lesss

基础知识

1 什么是JNI?
JNI全称为:Java Native Interface。JNI 是本地编程接口,它使得在 Java 虚拟机内部运行的 Java 代码能够与用其它语言(如 C、C++)编写的代码进行交互

2 什么是NDK?
NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。NDK集成了交叉编译器(交叉编译器需要UNIX或LINUX系统环境),并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so

工具安装

jni_install.png

打开Android SDK 选中SDK Tools 勾选 LLDB CMake NDK 然后点击 下载-安装

JNI开发

新建一个jni moudle

jni01.png

建一个java类

public class JNIEncrypt {

    static {
        System.loadLibrary("JNIEncrypt");
    }

    public static native int getJniTest();

}

生成.h文件

 cd core.jni/src/main/java
 javah -jni org.ls.jni.JNIEncrypt(包名字+类名字)

编写cpp文件

//
// Created by Less on 2019/3/11.
//

#include <jni.h>
#include "org_ls_jni_JNIEncrypt.h"

extern "C" JNIEXPORT jint JNICALL Java_org_ls_jni_JNIEncrypt_getJniTest
             (JNIEnv *, jclass) {
    return 7777777;
}

CMakeLists.txt

将该文件建立在moudle目录下与moudle和build.gradle文件同级别

# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.4.1)

# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.
add_library( # (需要手动修改)Sets the name of the library.
             JNIEncrypt

             # Sets the library as a shared library.
             SHARED

             # (需要手动修改)Provides a relative path to your source file(s).
             src/main/jni/JNIEncrypt.cpp )

# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.

find_library( # Sets the name of the path variable.
              log-lib

              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )

# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.
#target_link_libraries( # Specifies the target library.
#                       Main.so
#
#                       # Links the target library to the log library
#                       # included in the NDK.
#                       ${log-lib} )

上面的内容有几处需要修改 我已经标注

修改moudle的build.gradle文件

jni002.png

集成ok

jni003.png
上一篇下一篇

猜你喜欢

热点阅读