付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】详解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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国地质调查局青岛海洋地质研究所博士后招收笔试模拟试题及答案解析
- 2026湖北荆州市监利市事业单位人才引进64人笔试备考试题及答案解析
- 2026年上半年玉溪师范学院招聘人员(6人)笔试备考题库及答案解析
- 2026广东佛山顺德区杏坛伍蒋惠芳实验初级中学招聘化学临聘教师1人笔试模拟试题及答案解析
- 2026江西赣州有色冶金研究所有限公司招聘11人笔试备考试题及答案解析
- 2026重庆飞驶特人力资源管理有限公司大足分公司外派至重庆市大足区人力资源开发服务中心招聘公益性岗位人员1人考试备考题库及答案解析
- 2026江苏南京大学XZ2026-011地球科学与工程学院秘书招聘笔试备考试题及答案解析
- 2026福建一建集团有限公司招聘中层管理人员1人考试备考题库及答案解析
- 2026年上半年安徽宁马投资有限责任公司招聘10人笔试模拟试题及答案解析
- 2026南平光泽县不动产登记中心劳务派遣工作人员招聘2人考试备考题库及答案解析
- 意识障碍的判断及护理
- 储能电站安全管理与操作规程
- 2025年宿迁市泗阳县保安员招聘考试题库附答案解析
- 交通安全企业培训课件
- 2025年广东省中考物理试卷及答案
- 皮革项目商业计划书
- 主管护师护理学考试历年真题试卷及答案
- 华文慕课《刑法学》总论课后作业答案
- 公路护栏波型梁施工方案
- 2025版煤矿安全规程新增变化条款考试题库
- 基于SOLO分类理论剖析初中生数学开放题解决水平:现状差异与提升策略
评论
0/150
提交评论