轉自:http://www.race604.com/android-studio-with-ndk/?utm_source=tuicool
以下是翻譯自NDK With Android Studio這篇文章。
在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' // <-- 你的.so庫的實際路徑
}
}
在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" // <-- This is the name of my C++ module!
}
}
// ... more gradle stuff here ...
} // end of android section
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