AndroidStudio2.2以后Android.mk转换成CMakeLists.text

最近在做项目的时候用到了一个比较老的用Android.mk生成so库的项目,由于是比较老的版本做的并不支持能够在C部分打断点调试,所以就花了点时间研究怎么将Android.mk文件转换成CMakeList.txt文件。

1.在主项目下添加CMakeList.txt文件,如果没有模板可参考如下:

cmake_minimum_required(VERSION 3.4.1)

add_library(  native-lib  SHARED   src/main/cpp/native-lib.cpp )

find_library( log-lib   log )

target_link_libraries( native-lib ${log-lib} )

2.在主项目的build.gradle文件中添加

externalNativeBuild { cmake { path “CMakeLists.txt” }}

defaultConfig {

     externalNativeBuild {

cmake {

cppFlags “-std=c++11 -std=gnu++11”

arguments ‘-DANDROID_STL=gnustl_static’

}

}

}

3.具体语法:

include $(CLEAR_VARS)

LOCAL_MODULE := DeflatingDecompressor-v3

LOCAL_SRC_FILES := DeflatingDecompressor/DeflatingDecompressor.cpp

LOCAL_LDLIBS := -lz

include $(BUILD_SHARED_LIBRARY)

其中:

LOCAL_MODULE后面的表示项目的名称(不用加lib前缀,系统会自动添加),就是add_library方法的第一个参数;

LOCAL_SRC_FILES后面的表示的所要要到的源文件:导入的是add_library的第三个参数,应该把所有的源文件都写进去,用空格隔开,文件的路径应比较完整;

BUILD_SHARED_LIBRARY:表示导入的是add_library的第二个参数:(BUILD_STATIC_LIBRARY表示导入的是静态库,可不写,如果写的话就是(IMPORT);BUILD_SHARED_LIBRARY表示生成的是动态库,SHARED)

其他:

LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(EXPAT_DIR)

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/$(EXPAT_DIR)/lib

LOCAL_C_INCLUDES:表示导入头文件

LOCAL_EXPORT_C_INCLUDES:导入其他头文件;

两者转换成CMakeList语法是:link_directories(..)参数为头文件的目录地址,如果有多个用空格分开

LOCAL_CFLAGS := -DHAVE_EXPAT_CONFIG_H

转换为add_definitions(-DHAVE_EXPAT_CONFIG_H) 括号内的内容同LOCAL_CFLAGS后的内容;

LOCAL_LDLIBS := -lz -llog

LOCAL_STATIC_LIBRARIES := expat

两者都是表示关联库文件,上面的是导入ndk内的库,需要通过find_library来先找到库文件;下面的表示关联静态库。可以用target_link_libraries(DeflatingDecompressor-v3 ${log-lib} ${z-lib} expat) 第一个参数要关联的目标库文件,其他的参数问需要关联的参数。

    原文作者:Boyad
    原文地址: https://www.jianshu.com/p/3c698a7e6301
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞