在Android开发中,你可以使用 CMake 或者 Android.mk 来编写 JNI 的代码。这两者都是用来管理和配置 JNI 层代码的工具,选择使用哪一个取决于你的喜好以及项目的需求。
使用 CMake 的优点:
- 现代性:CMake 是一种现代的、跨平台的构建工具,具有强大的功能和灵活性。
- 易于学习:CMake 的语法相对简单,易于学习和使用。
- 跨平台:CMake 能够生成针对不同平台的构建文件,因此可以轻松地将代码移植到其他平台。
- 集成性:Android Studio 默认支持 CMake,并提供了对其的良好支持,包括代码自动完成、语法高亮等功能。
使用 Android.mk 的优点:
- Android 特定性:Android.mk 是 Android NDK 提供的构建系统,专门用于 Android 开发,因此它与 Android 平台更加紧密结合。
- 传统支持:对于习惯使用传统 NDK 开发工具链的开发者,Android.mk 可能更为熟悉。
- NDK 特性支持:Android.mk 有更好的对 NDK 特性的支持,比如预编译头文件(Precompiled Headers)等。
如何选择:
- 如果你是一个新手或者想要使用现代化的构建工具,可以选择 CMake。
- 如果你已经熟悉了传统的 NDK 构建流程,或者项目中需要使用 Android NDK 的一些高级特性,那么可以选择 Android.mk。
- 可以根据团队的熟悉程度、项目需求和个人喜好来选择。
CMakeLists.txt
# 设置最低版本要求
cmake_minimum_required(VERSION 3.10.2)# 设置项目名称
project(MyProject)# 添加源文件
add_library(native-libSHAREDsrc/main/cpp/native-lib.cpp
)# 添加头文件搜索路径
include_directories(src/main/cpp/include)# 查找系统库,并链接到你的库
find_library(log-liblog
)# 链接库
target_link_libraries(native-lib${log-lib}
)
Android.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)# 指定当前模块的名称为 native-lib
LOCAL_MODULE := native-lib# 指定当前模块包含的源文件
LOCAL_SRC_FILES := \native-lib.cpp \utils.cpp# 指定当前模块所依赖的头文件目录
LOCAL_C_INCLUDES := \$(LOCAL_PATH)/include# 指定当前模块所依赖的系统库
LOCAL_LDLIBS := -llog# 包含默认的共享库构建规则
include $(BUILD_SHARED_LIBRARY)