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
相關文章
相關標籤/搜索