Android Studio中NDK開發

johnychen發表於2021-09-09

更新(2015.07.24):本文說的方法是針對Android Studio 1.3 之前的版本,從 AS 1.3 開始,官方支援了 NDK 的開發,可以參考。


之前有人問到怎麼使用Android Studio進行NDK開發,經過網上搜尋,自己也嘗試了一下,用Android Studio進行NDK開發比Eclipse更加靈活方便。

以下是翻譯自這篇文章。

在ADT中進行NDK開發非常簡單,在Android Studio進行NDK開發也同樣的容易。NDK開發主要有兩中情況:一種是使用已經編譯好的.so動態庫;一種是使用c/c++原始碼開發。下面分別介紹。

使用預編譯好的.so動態庫

你可以先用ndk-build工具先編譯好.so,然後在Android Studio中引用。 這種情況比較件簡單,只要把的.so檔案放到相應的目錄即可。如下所示:

  • [module_name]


    • [src]


    • [main]




    • [jniLibs]




    • [armeabi]





    • [armeabi-v7a]





    • [x86]





    • [mips]



注意jniLibs目錄是放在module下面,在Android Studio中效果如下:圖片描述

現在就可以在程式碼中直接載入此庫了,如下:

String libName = "helloNDK"; // 庫名, 注意沒有字首lib和字尾.so  
System.loadLibrary( libName );

如果你不想把.so放在上面的預設路徑,可以在buid.gradle中進行如下配置:

android {  
  // .. android settings ..  sourceSets.main {
      jniLibs.srcDir 'src/main/myCppLibraries' // 

在Android Studio編譯C/C++原始碼

如果你不想像上面那樣,在終端中用ndk-build編譯.so,然後回到Android Studio中寫Java程式碼。可以直接讓Android Studio幫你編譯。配置方法如下:

1.配置ndk.dir

local.properties新增如下配置:

  sdk.dir=/path/to/android-sdk
  ndk.dir=/path/to/android-ndk

2.Gradle配置NDK模組

android {  
    compileSdkVersion 19
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "com.example.ndksample"
        minSdkVersion 9
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"

        ndk {
            moduleName "helloNDK" // 

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

原文連結:http://www.apkbus.com/blog-839902-61322.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4301/viewspace-2814836/,如需轉載,請註明出處,否則將追究法律責任。

相關文章