在 local.properties 添加如下配置:
sdk.dir=path_of_android-sdk
ndk.dir=path_of_android-ndk
android studio中有对ndk环境的设置:
【File】->[Project Struct]->Android NDK Location
在如上位置设置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
}
默认情况下,你需要把C/C++源代码放在 [module]/src/main/jni/ 路径下。效果如下图所示: 当然,你也可以自定义源代码路径:
android {
// .. android settings ..
sourceSets.main {
jni.srcDirs 'src/main/source'
}
}
这一步不是必须的,你可以根据需要,对各个平台进行不同的编译配置,可以设置覆盖前面的编译选项(例如 cFlags )。例如你只想编译指定平台的.so,而不是所有的平台。如下:
android {
// .. android settings ..
productFlavors {
x86 {
ndk {
abiFilter "x86"
}
}
arm {
ndk {
abiFilter "armeabi-v7a"
}
}
mips {
ndk {
abiFilter "mips"
}
}
}
} // android
android studio 根据Gradle配置自动生成Android.mk 位于app\build\intermediates\ndk\debug下 如果只有c/cpp文件,直接这样编译的话,会报错,这应该是android studio 在这种情况自动生成Android.mk 时的一个bug,见编译错误。
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 = []
}
}