3.17.2版本使用cmake怎么添加第三方so?

Android里用cmake方式编译的时候怎么添加第三方的so

cmake标准语法,add_library即可

cmake_minimum_required(VERSION 3.4.1)

find_library(
    log-lib
    log
)

set(ANDROID_STL c++_static)
set(ANDROID_TOOLCHAIN clang)

set(ANDROID_ROOT ../../..)
set(LUA_SQL_ROOT "${ANDROID_ROOT}/../..")
set(LUA_SQL_SRC_PATH "${LUA_SQL_ROOT}/src")

message(AUTHOR_WARNING "${CMAKE_CURRENT_SOURCE_DIR}/${LUA_SQL_SRC_PATH}")


## 编译所依赖的lua库
set(LUA51_PROJ_NAME lua51)
set(LUA51_SOURCE_PATH dep/lua51)
set(LUA51_SRCS
    ${LUA51_SOURCE_PATH}/lapi.c
    ${LUA51_SOURCE_PATH}/lauxlib.c
    ${LUA51_SOURCE_PATH}/lbaselib.c
    ${LUA51_SOURCE_PATH}/lcode.c
    ${LUA51_SOURCE_PATH}/ldblib.c
    ${LUA51_SOURCE_PATH}/ldebug.c
    ${LUA51_SOURCE_PATH}/ldo.c
    ${LUA51_SOURCE_PATH}/ldump.c
    ${LUA51_SOURCE_PATH}/lfunc.c
    ${LUA51_SOURCE_PATH}/lgc.c
    ${LUA51_SOURCE_PATH}/linit.c
    ${LUA51_SOURCE_PATH}/liolib.c
    ${LUA51_SOURCE_PATH}/llex.c
    ${LUA51_SOURCE_PATH}/lmathlib.c
    ${LUA51_SOURCE_PATH}/lmem.c
    ${LUA51_SOURCE_PATH}/loadlib.c
    ${LUA51_SOURCE_PATH}/lobject.c
    ${LUA51_SOURCE_PATH}/lopcodes.c
    ${LUA51_SOURCE_PATH}/loslib.c
    ${LUA51_SOURCE_PATH}/lparser.c
    ${LUA51_SOURCE_PATH}/lstate.c
    ${LUA51_SOURCE_PATH}/lstring.c
    ${LUA51_SOURCE_PATH}/lstrlib.c
    ${LUA51_SOURCE_PATH}/ltable.c
    ${LUA51_SOURCE_PATH}/ltablib.c
    ${LUA51_SOURCE_PATH}/ltm.c
    ${LUA51_SOURCE_PATH}/lundump.c
    ${LUA51_SOURCE_PATH}/lvm.c
    ${LUA51_SOURCE_PATH}/lzio.c
    ${LUA51_SOURCE_PATH}/print.c
)

add_library(
    ${LUA51_PROJ_NAME}
    SHARED
    ${LUA51_SRCS}
)
target_include_directories(
    ${LUA51_PROJ_NAME}
    PRIVATE
    ${LUA51_SOURCE_PATH}
)

##编译sql3
set(SQL3_PROJ_NAME sql3)
set(SQL3SOURCE_PATH dep/sqlite3)
set(SQL3_SRCS
    ${SQL3SOURCE_PATH}/sqlite3.c
    )
add_library(
    ${SQL3_PROJ_NAME}
    STATIC
    ${SQL3_SRCS}
)
target_include_directories(
    ${SQL3_PROJ_NAME}
    PRIVATE
    ${SQL3SOURCE_PATH}
)


## 编译luasql
set(LUASQLSQL3_PROJ_NAME luasql)
# 不编译未使用的库,例如mysql
#file(GLOB LUASQL_SRCS ${LUA_SQL_SRC_PATH}/*.c ${LUA_SQL_SRC_PATH}/*.cpp)
set(LUASQLSQL3_SRC
    ${LUA_SQL_SRC_PATH}/ls_sqlite3.c
    ${LUA_SQL_SRC_PATH}/luasql.c
    )
add_library(
    ${LUASQLSQL3_PROJ_NAME}
    SHARED
    ${LUASQLSQL3_SRC}
)
target_include_directories(
    ${LUASQLSQL3_PROJ_NAME}
    PRIVATE
    ${LUA_SQL_SRC_PATH}
    ${LUA51_SOURCE_PATH}
    ${SQL3SOURCE_PATH}
)
target_link_libraries(
    ${LUASQLSQL3_PROJ_NAME}
    PRIVATE
    ${LUA51_PROJ_NAME}
    ${SQL3_PROJ_NAME}
    ${log-lib}
)

类似ndk make语法

## 首先编译lua
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := lua51
LOCAL_MODULE_FILENAME := lua51

LOCAL_SRC_FILES := \
dep/lua51/lapi.c \
dep/lua51/lauxlib.c \
dep/lua51/lbaselib.c \
dep/lua51/lcode.c \
dep/lua51/ldblib.c \
dep/lua51/ldebug.c \
dep/lua51/ldo.c \
dep/lua51/ldump.c \
dep/lua51/lfunc.c \
dep/lua51/lgc.c \
dep/lua51/linit.c \
dep/lua51/liolib.c \
dep/lua51/llex.c \
dep/lua51/lmathlib.c \
dep/lua51/lmem.c \
dep/lua51/loadlib.c \
dep/lua51/lobject.c \
dep/lua51/lopcodes.c \
dep/lua51/loslib.c \
dep/lua51/lparser.c \
dep/lua51/lstate.c \
dep/lua51/lstring.c \
dep/lua51/lstrlib.c \
dep/lua51/ltable.c \
dep/lua51/ltablib.c \
dep/lua51/ltm.c \
dep/lua51/lundump.c \
dep/lua51/lvm.c \
dep/lua51/lzio.c \
dep/lua51/print.c \

LOCAL_C_INCLUDES := $(LOCAL_PATH)/dep/lua51
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/dep/lua51

include $(BUILD_SHARED_LIBRARY)


## 编译sql
include $(CLEAR_VARS)
LOCAL_MODULE := sql3
LOCAL_MODULE_FILENAME := sql3

LOCAL_SRC_FILES := \
dep/sqlite3/sqlite3.c

LOCAL_C_INCLUDES := $(LOCAL_PATH)/dep/sqlite3
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/dep/sqlite3
include $(BUILD_STATIC_LIBRARY)


## 编译luasql
include $(CLEAR_VARS)
LOCAL_MODULE := luasql
LOCAL_MODULE_FILENAME := luasql

LOCAL_SRC_FILES := \
../../../../../src/ls_sqlite3.c \
../../../../../src/luasql.c

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../../../src
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../../../../src

## 分别依赖静态库和动态库
LOCAL_STATIC_LIBRARIES += sql3
LOCAL_SHARED_LIBRARIES += lua51
include $(BUILD_SHARED_LIBRARY)

大神你好, 好像不是这个意思。
现在是需要讯飞的语音sdk 他提供了一个msc.jar包和libmsc.so文件,在他的jar包里会load这个libmsc.so。 正常情况下把他们都放在lib目录就可以了, 但是cocos编译的时候好像会删掉so文件,解开apk包里面没有这个libmsc.so了。
原来使用ndk-build的时候是这样配置的
LOCAL_MODULE := libmsc
LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libmsc.so
include $(PREBUILT_SHARED_LIBRARY)
LOCAL_SHARED_LIBRARIES := libmsc

但是用cmake不知道怎么配:joy:

如果是已经编译好的库,且不需要依赖cocos,则编译cocos so不需要引入,你不要把库放在cocos会删除的目录,你新建一个目录,然后设置 sourcesets jnilibs.dirs变量即可,建议了解一下android gradle dsl语法

 sourceSets{
        debug{
            jniLibs.srcDir "jnilibs/debug"
            jniLibs.srcDir "jni/xunfei"
        }
        release{
            jniLibs.srcDir "jnilibs"
            jniLibs.srcDir "jni/xunfei"
        }

mark

可以了,谢谢大神!好的:smile: