【移动应用开发技术】详解Android studio ndk配置cmake开发native C_第1页
【移动应用开发技术】详解Android studio ndk配置cmake开发native C_第2页
【移动应用开发技术】详解Android studio ndk配置cmake开发native C_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】详解Androidstudiondk配置cmake开发nativeC

Android2.2以后的版本对NDK的支持已经非常好了。最近把一个纯C的android项目,从eclipseADT迁移到Androidstudio上。本文是参考AddCandC++CodetoYourProject官方文档(需要翻墙),经过各种尝试之后的总结。Androidstudio整合NDK开发,有两种模式,一种是ndkbuild,一种是cmake,如果是新项目官方推荐cmake。原来,ADT的时候只能用ndkbuild,这次切换IDE并没有选用ndkbuild,而是尝试了cmake感觉上配置更加简洁方便。

本文探讨一下几点:1.迁移现有nativeC代码使用cmake,如果是新项目同理更加简单。

2.项目是nativeactivity就是没有java代码的纯nativeproject。

3.构建编译出多个so文件,并有依赖关系。

4.使用不依赖IDE目录结构的代码目录。

5.创建过程中的注意事项。

创建native项目,可以有两个选项。第一个是创建的时候,选择带有C++Support功能的。

第二个是对已有工程添加c/c++功能。这里,无论是不是新项目,都推荐使用创建一个项目在添加c/c++功能,这样nativecode就可以独立于项目放在任意目录。创建一个没有nativecode工程,在根据CMakeLists.txt文件来添加NDK的支持。File->LinkC++ProjectwithGradle。

这样,我们的代码就可以独立于IDE的目录结构。只要提供CMakeLists.txt文件即可。一旦我们提供了CMakeLists.txt文件,Androidstudio就会根据这个文件为我们在工程下面生成一个cpp文件夹用来存放CMakeLists.txt里面配置的native代码文件。下面我们来快速的介绍一下CMakeLists.txt基本功能的写法,能够应付通常的情况。更多丰富的使用规则需要查看官方文档。CMakedocumentation。那么编译出来的库文件在为什么位置呢,如下:系统生成apk的时候,会自动安装进去。那么,有些情况,能不能自己控制库文件的输出的目录能。当然是可以的,参看NDK官方的例子,hello-libs。接下来的问题就是,如果我有多个不同库功能不同,源码很多不能放在一起编译。希望能够模块化管理,有两个方案。第一个方案,给工程添加一个依赖模块,用同样的方法link一个CMakeLists.txt这样。如果这样,工程就有两个模块不同的gradle配置,就需要我们用上面的方法把作为库文件产生的so文件编译到指定目录下面,在添加预编译文件的方式进行连接。我开始是用的这个方法,可以工作但感觉并不好,NDK的例子hello-libs也是用的这个方法。后来我发现了一个跟简单的方法。第二个方案,利用CMake的add_subdirectory函数,可以添加一个子目录,去让CMakeLists.txt再去载入另外一个CMakeLists.txt。这正是我们需要方法。类似于NDKBuild里面的嵌套mk文件。两种方案都会把多个CMakeLists.txt文件导入到AndroidStudio里面。如上,我们把NativeLib作为库编译,Development依赖这个库。需要注意的是,在子目录的CMakeLists.txt中内置变量CMAKE_SOURCE_DIR是父目录的值,而不是当前文件目录。另外,可以看到我们编译出了两个so文件,链接它们。这样在java中就需要载入两个so文件。其实我是想合并两个so的,但是利用"-Wl,--whole-archive"属性的时候,会发生libc.so里面很多重定义。经过google发现这个可能是NDK的一个bug并没有修复。当然,也可以只生成一个so文件。就是让NativeLib编译为STATIC的,然后在Developmenttarget_link_libraries的时候使用"-Wl,--whole-archive"完全把NativeLib的a文件合并到Development里面就可以了。

最后,就是一个Gradle的配置了。cmake的参数配置,arguments可以参看官方文档UsingCMakeVariables,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论