一、创建项目
二、配置CMakeLists.txt
官方文档说明:https://cmake.org/cmake/help/v3.19/manual/cmake-toolchains.7.html#cross-compiling-for-android
android ndk里面只支持3.10.2,所以要设置cmake版本
cmake_minimum_required(VERSION 3.10.2)
mac开发给Android或者Linux系统用,自然就有生成so动态库的需求,以Android为例,修改CMakeLists如下(碰到的大坑:set 命令要放在project命令前面,否则可能不生效,因为命令行可以但CmakeLists不行所以发现了这个大坑)
cmake_minimum_required(VERSION 3.10.2)
set(CMAKE_CXX_STANDARD 11)
set(NDK_PATH /Users/lingmin/Library/Android/sdk/ndk/android-ndk-r20b)
#32位
#set(CMAKE_C_COMPILER ${NDK_PATH}/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi21-clang)
#set(CMAKE_CXX_COMPILER ${NDK_PATH}/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi21-clang++)
#64位
set(CMAKE_C_COMPILER ${NDK_PATH}/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang)
set(CMAKE_CXX_COMPILER ${NDK_PATH}/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang++)
#add_definitions("--sysroot=/ndk/sysroot")
#https://cmake.org/cmake/help/v3.19/manual/cmake-toolchains.7.html#cross-compiling-for-android
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 21) # API level
#set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a)
set(CMAKE_ANDROID_ARCH_ABI arm64-v8a)
set(CMAKE_ANDROID_NDK ${NDK_PATH})
#set(CMAKE_ANDROID_STL_TYPE c++_shared)#动态库
set(CMAKE_ANDROID_STL_TYPE c++_static)
set(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION clang)
project(c_android_2)
set(SOURCE_FILES
main.cpp
#native_c.cpp #多个cpp在这里添加
)
add_executable(c_android_2 ${SOURCE_FILES})
#生成静态库
#add_library(clion STATIC ${SOURCE_FILES})
#生成动态库
add_library(clion SHARED ${SOURCE_FILES})
三、写代码
正常引入jni
四、编译静态库.a/动态库.so
在mac上编译出来的是.dylib
编译结果:
查看文件类型:arm 64位
最后把dylib丢到android项目里面,后缀改为so调用,会出现链接不到动态库找不方法的问题,原因还未知,继续研究。