android stduio CMake编译学习

android stduio CMake编译学习

简介

CMake编译配置比之前的Android.mk编译配置简单,功能更强大,话不多说,直接开始

开始

apk的编译都是从build.gradle配置开始的,我们需要在build.gradle里面配置好CMakeLists的位置,以及Cmake的编译配置

def platformVersion = 21 
android {
    compileSdkVersion 28
    defaultConfig {
        ....
        externalNativeBuild {
            cmake {
            	//编译选项 这段可以不进行配置,而使用默认参数
                cppFlags "-std=c++11"
                //-D变量名=参数1 ,编译Android平台版本以及Cmake的工具链
                arguments "-DANDROID_PLATFORM_LEVEL=${platformVersion}",
                        '-DANDROID_TOOLCHAIN=clang'
            }
            ndk {
                abiFilters "armeabi-v7a"
            }
        }
    }
 	...
    externalNativeBuild {
        cmake {
        	//cmake配置文件位置
            path "src/main/cpp/CMakeLists.txt"
        }
    }
}

想要了解更详细的编译参数选项可以参考这里

进入指定CMakeLists配置

先看个例子,在了解cmake内部的一些语法规则,现在需求是使用第三方的so库,并自己生成一个新库player,对其进行测试:

目录结构图如下:
在这里插入图片描述
cpp文件夹下最外层的cmakelist是我们在build里面指定的,因为我们需要使用第三方ffmpeg的so,所以我们需要引入进来,并且指定其位置

# 添加头文件
include_directories(common include)
#引入进来的库
add_library( # 第三方so库名字
             ffmpeg
             # 标明这个库是一个so库
             SHARED
             # 从外部引入
            IMPORTED)
# 这个ffmpeg库的位置
set_target_properties(ffmpeg   #名字
					  # 属性
                      PROPERTIES IMPORTED_LOCATION
					  #位置  
	                  ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libffmpeg.so)


#添加播放器源代码,因为这里有一也有一个cmake
add_subdirectory(${CMAKE_SOURCE_DIR}/player)

add_subdirectory(路径)
如果使用这条命令,标明该路径下是一个独立的模块,模块内部有自己的CMakeList,使用自己的编译配置

进入模块配置

因为需要用到ffmpeg库,所以需要使用target_link_libraries动态链接此库,将库链接起来,如下配置:

#添加头文件
include_directories(android)
#添加源文件,会生成一个libplayer.so
add_library(player
            SHARED
            native-lib.cpp)
#库与库之间的链接共享,android、log等是Android底层自己提供的库
target_link_libraries(player
                      ffmpeg

                    -landroid
                    -llog
                    -lOpenSLES
                    -lEGL
                    ${GLES-lib})

以上配置好后,就可以在native-lib.cpp里面调用ffmpeg的方法进行测试了;

仓库地址

cmake其他相关知识可以看看这里

posted @ 2021-10-31 15:24  帅气好男人_jack  阅读(10)  评论(0编辑  收藏  举报  来源