NDK开发流程

大概的流程是:编写native方法,然后生成jni调用的头文件,然后根据头文件编写源文件,然后编写Android.mk或CMakeLists.txt文件,最后编译生成库文件。

1. 编写native方法

public class LibSlave {

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

    public static native boolean initDevice(String name, String version, String serial, String ip);
}

2. 生成JNI头文件

通过javah命令可以生成。

..src\main\java > javah -d ..\jni com.myclassroom.groupslave.LiveSlave

注:如果java类中包含中文字符则需要加上-encoding UTF-8,如果javah命令找不到说明java的环境变量没有配置正确。

3. 编写JNI源文件

将头文件的方法全部复制到源文件中。

#include "com_myclassroom_groupslave_LibSlave.h"
/*
 * Class:     com_myclassroom_groupslave_LibSlave
 * Method:    initDevice
 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
 */
JNIEXPORT jboolean JNICALL Java_com_myclassroom_groupslave_LibSlave_initDevice
        (JNIEnv *, jclass, jstring, jstring, jstring, jstring) {

}

4. 编写Android.mk或CMakeLists.txt文件

Android.mk是使用ndk-build来进行编译,代码如下:

LOCAL_PATH  := $(call my-dir)
ANDROID_PRIVATE_LIBDIR := $(LOCAL_PATH)/prebuilt
ARCH=$(APP_ABI)

#####################
#   libSlave    #
#####################
include $(CLEAR_VARS)

LOCAL_MODULE    := libSlave
LOCAL_SRC_FILES := com_myclassroom_groupslave_LibSlave.cpp
LOCAL_CFLAGS    := -fpic
LOCAL_LDLIBS    := -llog -lz -landroid

include $(BUILD_SHARED_LIBRARY)

CMakeLists.txt使用cmake来编译,代码如下:

5. 编译生成库文件

有多种方式生成库文件

方式一:手动使用ndk-build生成

进入模块的src/main/jni目录 运行ndk-build.cmd命令编译生成。
或者在Android Studio的External Tools配置ndk-build快捷命令,如下图所示:


NDK开发流程_第1张图片
NDK开发流程_第2张图片

然后配置模块的build.gradle,如下:

    sourceSets.main {
        jni.srcDirs = []
        jniLibs.srcDir 'src/main/libs'
    }
方式二:使用Link C++ Project with Gradle

模块右键选择Link C++ Project with Gradle,然后选择使用ndk-build还是cmake(ndk-build使用Android.mk文件,cmake使用CMakeLists.txt文件)。
自动链接C++工程,其实也就是在模块的build.gradle增加了如下代码库(以ndk-build为例):

    externalNativeBuild {
        ndkBuild {
            path 'src/main/jni/Android.mk'
        }
    }

你可能感兴趣的:(NDK开发流程)