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快捷命令,如下图所示:


然后配置模块的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'
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容