android源码ndk编译环境,004android初级篇之androidStudio 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 = []

}

}

参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值