标签:++ private imu addclass archive release help 类型 down
在android2.2中,加入了cmake编译,而以前都是用Android.mk、Application.mk的,今天就来记录下,他们的配置选项。
Android.mk在jni目录下,用于描述构建系统的源文件以及
shared libraries 。文件格式如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello.cpp
include $(BUILD_SHARED_LIBRARY)
当然,上面只是一个最简单的,下面我们来介绍其他的一些变量和宏。
构建系统提供了许多变量和宏,当然 也允许我们自定义,内置的有以下三种:
如果要自定义的话,建议MY_开头。
include $(CLEAR_VARS)
include $(BUILD_SHARED_LIBRARY)
include $(BUILD_STATIC_LIBRARY)
include $(PREBUILT_SHARED_LIBRARY)
TARGET_PLATFORM := android-22
TARGET_ARCH_ABI := arm64-v8a
TARGET_ABI := android-22-arm64-v8a
LOCAL_PATH := $(call my-dir)
,注意CLEAR_VARS,并不会清除这个的值LOCAL_CPP_FEATURES := rtti
LOCAL_LDLIBS := -lz
用于描述app需要的native model。
要求 Android Studio 2.2 以上。
在gradle中,
android {
defaultConfig {
externalNativeBuild {
cmake {
// 设置cmake参数 "-DVAR_NAME=VALUE"
arguments "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang"
}
}
// 设置 abi
ndk {
abiFilters "armeabi","x86","armeabi-v7a"
}
}
buildTypes {...}
externalNativeBuild {
cmake {
// CMakeLists.txt 文件路径
path ‘src/main/jni/CMakeLists.txt‘
}
}
}
我们需要编写的就是上面三处有注释的地方。
关于cmake 参数,官方文档
cmake_minimum_required(VERSION 3.4.1)
cmake的最小版本add_library(native lib name,SHARED(SHARED还是STATIC),c++或c文件路径)
include_directories(src/main/cpp/include/)
指定头文件路径find_library( # Defines the name of the path variable that stores the
# location of the NDK library.
log-lib
# Specifies the name of the NDK library that
# CMake needs to locate.
log )
按照我个人的理解,
然后使用target_link_libraries(native-lib,${log-lib}) 去链接咱们的本地库和ndk中带的本地库,
也可以将源代码添加进来,
add_library( app-glue
STATIC
${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c )
因为这些已经有的,需要用 IMPORTED 去告诉cmkae,只需要将这个lib导入到咱们的project
add_library( imported-lib
SHARED
IMPORTED )
然后需要用set_target_properties去指定路径。
set_target_properties( # Specifies the target library.
imported-lib
# Specifies the parameter you want to define.
PROPERTIES IMPORTED_LOCATION
# Provides the path to the library you want to import.
imported-lib/src/${ANDROID_ABI}/libimported-lib.so )
这时候需要include_directories来指定so对应的头文件路径,上面也说到过了。
有理解的不对的,大家指出,共同学习共同进步。
参考资料:
Android JNI学习笔记(三)-编译文件Android.mk、Application.mk 与camke
标签:++ private imu addclass archive release help 类型 down
原文地址:http://blog.csdn.net/qq_21430549/article/details/53365915