004androidStudio ndk开发环境

android studio中编译C/C++源代码

1. 配置ndk.dir

在 local.properties 添加如下配置:

sdk.dir=path_of_android-sdk
ndk.dir=path_of_android-ndk

android studio中有对ndk环境的设置:

【File】->[Project Struct]->Android NDK Location

在如上位置设置ndk的安装位置。

2.Gradle配置NDK模块

参考如下:

android {

compileSdkVersion 23

buildToolsVersion "23.0.1"

    defaultConfig {
applicationId "com.frank.smart.smarthome"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
ndk {
moduleName "SmartSocket"
ldLibs "log", "z", "m"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
}

ndk还可以配置更多选项,如下:

ndk {
moduleName "myEpicGameCode"
cFlags "-DANDROID_NDK -D_DEBUG DNULL=0" // Define some macros
ldLibs "EGL", "GLESv3", "dl", "log" // Link with these libraries!
stl "stlport_shared" // Use shared stlport library
}

3.添加C/C++源代码

默认情况下,你需要把C/C++源代码放在 [module]/src/main/jni/ 路径下。效果如下图所示:

当然,你也可以自定义源代码路径:

android {

  // .. android settings ..

  sourceSets.main {
jni.srcDirs 'src/main/source'
}
}

4.分平台配置编译(可选)

这一步不是必须的,你可以根据需要,对各个平台进行不同的编译配置,可以设置覆盖前面的编译选项(例如 cFlags )。例如你只想编译指定平台的.so,而不是所有的平台。如下:

android {
// .. android settings ..
productFlavors {
x86 {
ndk {
abiFilter "x86"
}
}
arm {
ndk {
abiFilter "armeabi-v7a"
}
}
mips {
ndk {
abiFilter "mips"
}
}
}
} // android

5. 一个编译错误的解决

android studio 根据Gradle配置自动生成Android.mk 位于app\build\intermediates\ndk\debug下

如果只有c/cpp文件,直接这样编译的话,会报错,这应该是android studio 在这种情况自动生成Android.mk 时的一个bug,见编译错误。

Error:Execution failed for task ':nativeactivity:compileDebugNdk'.

com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\android-ndk-r10\ndk-build.cmd'' finished with non-zero exit value 2

解决方法:

   在jni文件下建一个空的empty.c文件 编译运行即可

如果还运行不了,在当前model的build.gradle下添加

android{

   …………
sourceSets.main {
jni.srcDirs = []
}
}

参考链接

  1. Android Studio中NDK开发
  2. NDK错误 org.gradle.process.internal.ExecException: Process 'command with non-zero exit value 2

最新文章

  1. [LeetCode] Missing Ranges 缺失区间
  2. [New Portal]Windows Azure Cloud Service (34) TechEd 2013 North America关于Azure的最新消息
  3. 【转】JAVA 接口
  4. Cloudera Manager5安装总结遇到问题及解决办法
  5. 【转】asp.net mvc3 简单缓存实现sql依赖
  6. Android开发 将数据保存到SD卡
  7. Start of Something New
  8. 使用ajax方法实现form表单的提交(附源码)
  9. nGrinder 简易使用教程
  10. 第二章:Python基础の快速认识基本数据类型和操作实战
  11. c++ 回调函数使用
  12. C# CRC - 16
  13. autolayout原理
  14. mysql学习5:数据库设计
  15. 88、const、static、extern介绍
  16. Java中的Dom4j
  17. LabVIEW 波形图表显示多条曲线
  18. git基本操作及上传代码到gitHub
  19. QSplineSeries QChartView绘制曲线
  20. PID file /run/zabbix/zabbix_server.pid not readable (yet?) after start. 报错解决

热门文章

  1. nodeJs常用API
  2. Can we say objects have attributes, states and behaviors?
  3. webmagic 下载页面
  4. 正则表达式表示 ja.resx 所在行
  5. Bitnami 2015
  6. 从webstorm转vscode,来一个vscode的教程和心得总结
  7. IT痴汉的工作现状21-Android开发前景论
  8. django迁移model到别的app中
  9. 攻克了Cocoapods Undefined symbols for architecture _OBJC_CLASS_xxxx的问题,辛苦死我了,记录下之后有空在研究
  10. C语言-EOF和feof()判断文件结尾的区别