004androidStudio ndk开发环境
2024-09-06 00:55:02
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 = []
}
}
参考链接
- Android Studio中NDK开发
- NDK错误 org.gradle.process.internal.ExecException: Process 'command with non-zero exit value 2
最新文章
- [LeetCode] Missing Ranges 缺失区间
- [New Portal]Windows Azure Cloud Service (34) TechEd 2013 North America关于Azure的最新消息
- 【转】JAVA 接口
- Cloudera Manager5安装总结遇到问题及解决办法
- 【转】asp.net mvc3 简单缓存实现sql依赖
- Android开发 将数据保存到SD卡
- Start of Something New
- 使用ajax方法实现form表单的提交(附源码)
- nGrinder 简易使用教程
- 第二章:Python基础の快速认识基本数据类型和操作实战
- c++ 回调函数使用
- C# CRC - 16
- autolayout原理
- mysql学习5:数据库设计
- 88、const、static、extern介绍
- Java中的Dom4j
- LabVIEW 波形图表显示多条曲线
- git基本操作及上传代码到gitHub
- QSplineSeries QChartView绘制曲线
- PID file /run/zabbix/zabbix_server.pid not readable (yet?) after start. 报错解决
热门文章
- nodeJs常用API
- Can we say objects have attributes, states and behaviors?
- webmagic 下载页面
- 正则表达式表示 ja.resx 所在行
- Bitnami 2015
- 从webstorm转vscode,来一个vscode的教程和心得总结
- IT痴汉的工作现状21-Android开发前景论
- django迁移model到别的app中
- 攻克了Cocoapods Undefined symbols for architecture _OBJC_CLASS_xxxx的问题,辛苦死我了,记录下之后有空在研究
- C语言-EOF和feof()判断文件结尾的区别