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开发的准备的更多相关文章

  1. 使用Android Studio进行NDK开发

    Step1:创建native方法 很easy,仅仅须要给定义好的方法加上native关键词就可以 注意:由于该方法的详细实现是在c++中详细实现的.所以相似于接口方法不须要加{}. Step2:生成c ...

  2. Android Studio C/C++开发环境配置

    Android Studio C/C++开发环境配置  我的开发环境 : Win 10 + android studio 1.5   一, 安装NDK 开发环境: 1.  Settings -> ...

  3. 【Android Studio安装部署系列】二十五、Android studio使用NDK生成so文件和arr文件

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio使用ndk的简单步骤. NDK环境搭建 下载NDK 下载链接:https://developer.and ...

  4. Android studio 使用NDK工具实现JNI编程

    前言: Android开发中常常会使用到第三方的.so库.在使用.so库的时候就要用到JNI编程.JNI是Java Native Interface的缩写.它提供了若干的API实现了Java和其它语言 ...

  5. Android Studio 之 NDK篇

    由于工作内容的关系,对于NDK的工作涉及比较广(保密性,安全性),所以本章内容讲述一下NDK的基本使用过程. 网上也有很多这样的教程或者描述,但描述的并不完全 开发工具:Android Studio ...

  6. Mac下Android studio 之NDK配置教程(一)

    Mac下Android studio 之NDK配置教程(一) 1.概述 近期项目全线转移到Mac下使用使用Android studio开发. 遇到关键代码封装到 ***native***层,此时在wi ...

  7. IDEA插件(Android Studio插件)开发示例代码及bug解决

    IDEA插件(Android Studio插件)开发示例代码及bug解决 代码在actionPerformed方法中,有个AnActionEvent e 插件开发就是要求我们复写上述的这个方法即可,在 ...

  8. 用Android studio进行 OpenCV 开发的第一个项目

    我的天! 折腾了好久终于搭建成功了第一个项目. 项目环境: Windows 7  家庭普通版  64位 Android studio 1.5.1 OpenCV-2.4.9-android-sdk 基于 ...

  9. Android studio 百度地图开发(3)地图导航

    Android studio 百度地图开发(3)地图导航 email:chentravelling@163.com 开发环境:win7 64位,Android Studio,请注意是Android S ...

随机推荐

  1. Java NIO之Java中的IO分类

    前言 前面两篇文章(Java NIO之理解I/O模型(一).Java NIO之理解I/O模型(二))介绍了,IO的机制,以及几种IO模型的内容,还有涉及到的设计模式.这次要写一些更贴近实际一些的内容了 ...

  2. 图像处理 - ImageMagick 简单介绍与案例

    在客户端我们可以用 PhotoShop 等 GUI 工具处理静态图片或者动态 GIF 图片,不过在服务器端对于 WEB 应用程序要处理图片格式转换,缩放裁剪,翻转扭曲,PDF解析等操作, GUI 软件 ...

  3. idea的各种牛逼插件

    Translation : 一款免费的解决对话框的翻译插件 MyBatisCodeHelper-Pro: 功能类似mybatis plugin,我的文章有破解的教程 地址:破解

  4. java 实现基于opencv全景图合成

    因项目需要,自己做了demo,从中学习很多,所以分享出来,希望有这方面需求的少走一些弯路,opencv怎么安装网上教程多多,这里不加详细说明,我安装的opencv-3.3.0 如上图所示,找到相应的j ...

  5. mysql慢日志分析组件安装

    1.pt-query-digest 安装 cd /usr/bin wget percona.com/get/pt-query-digest chmod u+x pt-query-digest yum ...

  6. C/C++——strcpy函数的实现

    题目:     已知strcpy函数的原型是:         char * strcpy(char * strDest,const char * strSrc);     1.不调用库函数,实现st ...

  7. Rest_Framework之频率组件部分

    一.RestFramework之频率组件源码部分 频率组件的源码部分和权限组件流程一模一样的,这里就不多说了,直接上源码的主要逻辑部分: def check_throttles(self, reque ...

  8. Cookie 、session、token都是什么?

    1.Cookie 起源:1993年,网景浏览器的员工为了让用户访问某网站时,进一步提高访问速度,实现个人化网络发明了cookie.(看来有时候的偷懒会促进社会的进步啊~,就像人们不想做饭就诞生了外卖) ...

  9. LeetCode刷题总结-数组篇(中)

    本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...

  10. [翻译]——MySQL 8.0 Histograms

    前言: 本文是对这篇博客MySQL 8.0 Histograms的翻译,翻译如有不当的地方,敬请谅解,请尊重原创和翻译劳动成果,转载的时候请注明出处.谢谢! 英文原文地址:https://lefred ...