使用Android Studio进行ndk开发的准备
1. gradle-ex
2. ndk开发包
3. 项目目录结构
4. lldb调试器
1. 一般来说gradle不是必需的,gradle也是可以进行ndk编译的,然而你需要在编译时使用更多(多于一个)c++编译选项时,以及让IDE可以使用lldb进行调试,或者是针对ndk开发和编译有更好的支持时,gradle-ex就是你所需要的。
gradle-ex的ex不是扩展而是experimental实验非正式。它对ndk相关的配置进行了增强,同时又语法不兼容gradle,并且在ndk相关以外的配置沿着的是gradle的语法。也就是gradle-ex并非完全全新,只对ndk相关进行改动,并且改动的地方与原来语法不兼容。gradle默认是废用ndk扩展的,需要手动修改开启支持。gradle对ndk的编译选项认为是cFlags,并且只能使用一个编译选项,而gradle-ex不再有cFlags,取代之的是cppFlags。gradle和gradle-ex对于ndk的配置的属性路径编排不一致,也就是gradle-ex对部分属性路径进行了重新的编排。gradle-ex中字符串和数组的赋值使用了新的语法。gradle和gradle-ex不对你的gradle脚本进行严格的语法检查,只会在gradle作业可错时报怨,你就自己慢慢去想到底哪里有问题吧。
使用gradle-ex,需要在Top-level build.gradle的buildscript.dependencies.classpath修改成com.andraoid.tools.build:gradle-experimental:0.7.0-alphal。
2. ndk开发包,包含了必要的交叉编译工具和平台导出的头文件和最小运行链接文件等。可以通过IDE配置选用Tools->System Settings->Android SDK->SDK Tools->NDK,让IDE自行更新下载。或者将离线压缩包解压到你的${ANDROID_SDK}目录下ndk-bundle子目录。
如果IDE未能正确识别NDK路径,可以利用任一个项目,对其local.properties文件进行NDK_PATH的配置,并且同步让IDE去执行配置适配。
3. gradle进行编译时依赖严格的目录结构。
使用ndk-build命令进行编译时,ndk-build需要搜索jni目录,如果没有jni目录,ndk-build就会以为没有需要编译的项目。
同样使用gradle或gradle-ex,它们也固定的搜索目录路径。
一般地在src目录下:
app/build/intermediates/binaries/debug/${HOST_ARCH}/lib jni项目需要生成的库文件。
app/build/intermediates/jniLibs/${HOST_ARCH}/debug 源代码jniLibs目录下的全部内容将会被复制到这里,第三方链接库。
app/build/intermediates/objectFiles 源代码base目录下的全部内容将会被复制到这里,本项目源代码生成的中间文件。
app/build/intermediates/transforms/mergeJniLibs/${HOST_ARCH}/.../lib 将jni项目生成的库文件,以及放在jniLibs备用并被需要链接上的库文件,合并目录。
也就是模拟器加载jni链接库的目录。
app/libs 导入jar包的目录
app/src/main/java java代码
app/src/main/java/jni native方法生成的c头文件
app/src/main/jni 所有c/c++源代码,以及第三方库的开发头文件
app/src/main/jniLibs 所有jni目录下代码所链接到的第三方库链接文件
4. lldb调用器,可以可以通过IDE配置选用Tools->System Settings->Android SDK->SDK Tools->lldb,让IDE自行更新下载。或者将离线压缩包解压到你的${ANDROID_SDK}目录下ndk-bundle子目录。
gradle-ex自动会建立起lldbserver远程调试连接,所以虽然使用了lldb调试器,但却是远程调试,使用的时候也有许多支持不好,比栈帧选用命令不起效,线程选用命令也不起效等。
使用Android Studio进行ndk开发的准备的更多相关文章
- 使用Android Studio进行NDK开发
Step1:创建native方法 很easy,仅仅须要给定义好的方法加上native关键词就可以 注意:由于该方法的详细实现是在c++中详细实现的.所以相似于接口方法不须要加{}. Step2:生成c ...
- Android Studio C/C++开发环境配置
Android Studio C/C++开发环境配置 我的开发环境 : Win 10 + android studio 1.5 一, 安装NDK 开发环境: 1. Settings -> ...
- 【Android Studio安装部署系列】二十五、Android studio使用NDK生成so文件和arr文件
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio使用ndk的简单步骤. NDK环境搭建 下载NDK 下载链接:https://developer.and ...
- Android studio 使用NDK工具实现JNI编程
前言: Android开发中常常会使用到第三方的.so库.在使用.so库的时候就要用到JNI编程.JNI是Java Native Interface的缩写.它提供了若干的API实现了Java和其它语言 ...
- Android Studio 之 NDK篇
由于工作内容的关系,对于NDK的工作涉及比较广(保密性,安全性),所以本章内容讲述一下NDK的基本使用过程. 网上也有很多这样的教程或者描述,但描述的并不完全 开发工具:Android Studio ...
- Mac下Android studio 之NDK配置教程(一)
Mac下Android studio 之NDK配置教程(一) 1.概述 近期项目全线转移到Mac下使用使用Android studio开发. 遇到关键代码封装到 ***native***层,此时在wi ...
- IDEA插件(Android Studio插件)开发示例代码及bug解决
IDEA插件(Android Studio插件)开发示例代码及bug解决 代码在actionPerformed方法中,有个AnActionEvent e 插件开发就是要求我们复写上述的这个方法即可,在 ...
- 用Android studio进行 OpenCV 开发的第一个项目
我的天! 折腾了好久终于搭建成功了第一个项目. 项目环境: Windows 7 家庭普通版 64位 Android studio 1.5.1 OpenCV-2.4.9-android-sdk 基于 ...
- Android studio 百度地图开发(3)地图导航
Android studio 百度地图开发(3)地图导航 email:chentravelling@163.com 开发环境:win7 64位,Android Studio,请注意是Android S ...
随机推荐
- POI读入Excel用String读取数值类型失真问题(精度丢失)
问题:POI读取Excel数值单元格时,读取的小数数值与真实值不一致 话不多说,直接上代码! public static String getRealStringValue(Cell cell) { ...
- cookie session token 详解
cookie 是保存在本地终端的数据.cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器. 可以在浏 ...
- ESP32 开发之旅① 走进ESP32的世界 安装开发环境
1.前言 欢迎大家来到ESP32的世界,从现在开始,笔者将带领大家慢慢揭开ESP32神秘的面纱. 在学习ESP32之前,博主希望读者能有ESP8266的学习基础(ESP32 Wifi模 ...
- 【MongoDB详细使用教程】二、MongoDB基本操作
目录 数据类型 数据库操作 集合操作 数据操作 增 查 改 修改整行 修改指定字段的值 删 数据类型 MongoDB常见类型 说明 Object ID 文档ID String 字符串,最常用,必须是有 ...
- 01 Python简介、环境搭建及包管理(一)
一.Python简介 1. Python的特点: 是一门动态.解释型.强类型语言 动态:在运行期间才做数据检查(不用提前声明变量)- 静态语音(C/Java):编译时检查数据类型(编码时需要声明变量类 ...
- 在Mac OSX上运行Windows应用程序
在Mac OSX中,借助wine,不需要安装虚拟机也可以运行Window应用程序. wine是一个在Linux和UNIX之上的,WIndows3.x和Windows APIs的实现.是运用API转换技 ...
- Andriod项目结构
在Android Studio第一次创建一个项目,点击左侧的Project选项卡,在Project窗口下有几个不同的视图,默认的是名为Android的视图: 对于大部分的开发工作,我们只要在Andro ...
- django-模板之URL标签(五)
book/views.py from django.shortcuts import render def index(request): return render(request,"in ...
- weex不支持类的动态追加
做一个weex项目时遇到需要根据状态动态改变样式的功能,本来想通过判断属性追加类的方式实现,如下: :class="['long-news',{'bold-txt':noRead}]&quo ...
- mysql中的锁机制之悲观锁和乐观锁
1.悲观锁? 悲观锁顾名思义就是很悲观,悲观锁认为数据随时就有可能会被外界进行修改,所以悲观锁一上来就会把数据给加上锁.悲观锁一般都是依靠关系型数据库提供的锁机制,然而事实上关系型数据库中的行锁,表锁 ...