您当前的位置: 首页 > 

命运之手

暂无认证

  • 3浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【NDK】【011】通过CMakeLists编译Native代码为so库

命运之手 发布时间:2020-05-20 00:37:23 ,浏览量:3

前面我们已经介绍过,通过Gradle/命令行来编译Native代码,通过JNI/JNA来调用Native代码

这里我们再介绍一种新的方法,Gradle+CMake编译Native代码,很适合从C语言转过来的开发人员

其实CMake和NdkBuild的使用基本完全一样

只不过一个通过Android.mk来配置编译脚本,一个通过CMakeLists.txt来配置脚本

一个需要在Gradle里面开启NdkBuild,一个需要在Gradle里面开启CMake,仅此而已

我们以这个Lame库编译的博客为例,它本是通过Android.mk来编译的

这里我们只修改gradle文件和CMakeLists文件,就可以将其改为一个CMakeLists项目

NDK编译Lame库

build.gradle


	android {
	
	    //加载指定位置的so库
	    sourceSets {
	        main {
	            jniLibs.srcDirs = ['libs']
	        }
	    }
	
	    //通过CMake编译Native代码
	    //开启这个选项后,会自动编译指定目录下的Native代码,生成so文件并自动引用
	    //开启此选项后,就不需要再将so库拷贝到sourceSets中指定的目录了,否则会引起so库重复错误
	    externalNativeBuild {
	        cmake {
	            path 'src/jni/CMakeLists.txt'
	        }
	    }
	}

CMakeLists.txt


	#设置最低CMake版本
	cmake_minimum_required(VERSION 3.6.0)
	
	#设置C++语法标准版本
	set(CMAKE_CXX_STANDARD 11)
	
	#设置忽略警告
	add_definitions(
	        -Wno-error=format-security
	)
	
	#设置编译库的名称,类型,源文件
	add_library(
	        lame
	        SHARED
	        JnaLame.cpp logcat.cpp liblame/bitstream.c liblame/bitstream.h liblame/encoder.c liblame/encoder.h liblame/fft.c liblame/fft.h liblame/gain_analysis.c liblame/gain_analysis.h liblame/id3tag.c liblame/id3tag.h liblame/l3side.h liblame/lame-analysis.h liblame/lame.c liblame/lame.h liblame/lameerror.h liblame/lame_global_flags.h liblame/machine.h liblame/mpglib_interface.c liblame/newmdct.c liblame/newmdct.h liblame/presets.c liblame/psymodel.c liblame/psymodel.h liblame/quantize.c liblame/quantize.h liblame/quantize_pvt.c liblame/quantize_pvt.h liblame/reservoir.c liblame/reservoir.h liblame/set_get.c liblame/set_get.h liblame/tables.c liblame/tables.h liblame/takehiro.c liblame/util.c liblame/util.h liblame/vbrquantize.c liblame/vbrquantize.h liblame/VbrTag.c liblame/VbrTag.h liblame/version.c liblame/version.h
	)
	
	#查找预编译好的系统模块库所在位置
	find_library(
	        LIBRARY_PATH_LOG
	        log
	)
	
	#链接指定的路径到目标库
	#add_library和target_link_libraries可以指定多个,这样就会编译出多个so文件
	target_link_libraries(
	        lame
	        ${LIBRARY_PATH_LOG}
	)

关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.0385s