004androidStudio ndk开发环境

004androidStudio ndk开发环境android

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

1. 配置ndk.dir

在 local.properties 添加以下配置:android-studio

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

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

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

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

2.Gradle配置NDK模块

参考以下:
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"gradle

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还能够配置更多选项,以下:ui

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/ 路径下。效果以下图所示:
固然,你也能够自定义源代码路径:.net

android {

  // .. android settings ..

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

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

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

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,见编译错误。code

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 2blog

解决方法:

在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
相关文章
相关标签/搜索