AndroidStudio NDK開發入門教程
AndroidStudio NDK開發入門教程
網上一些介紹AndroidStudio NDK入門的教程,感覺都不是很完整和全面,也沒有告訴初學AndroidStudio NDK的同學們一些需要注意的地方。
本文所介紹的是在AndroidStudio上搭建最佳的NDK開發環境,給使用NDK的開發人員最大的方便。
本人AndroidStudio版本2.0。
本人Gradle版本2.10。
1. Android NDK開發工具準備
要進行Android NDK開發,首先要下載Android NDK開發工具。可以在AndroidStudio上面的下載,也可以自己下載好了,然後將NDK的路徑設置為自己下載的Android NDK開發工具的路徑。Android NDK開發工具下載地址:http://wear.techbrood.com/tools/sdk/ndk/ 。
Advertisements
2. Gradle的相關配置
gradle插件不支持NDK(當然用它也可以進行NDK開發,就是非常不方便),我們需要使用gradle-experimental插件。gradle-experimental插件使用的時候與gradle插件稍微有點區別。
1. 我們來配置Project的build.gradle
配置Project的build.gradle很簡單就是將dependencies
中classpath
的值改為對應的gradle-experimental插件。
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.7.0'
Advertisements
}
2. 我們來配置Module的build.gradle
先給出一個我配置的範例,然後說明那些需要注意的。
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig {
applicationId "com.lavor.ndklearning"
minSdkVersion.apiLevel 15
targetSdkVersion.apiLevel 23
versionCode 4
versionName "1.0.1"
}
}
android.ndk {
moduleName "lavor"
ldLibs.addAll(['log'])
cppFlags.add("-std=c++11")
cppFlags.add("-fexceptions")
platformVersion 15
stl 'gnustl_shared'
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file("proguard-rules.txt"))
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
}
首先在
apply
的時候我們引入的插件名稱由'com.android.application'
變成了'com.android.model.application'
。其次,在原來
android
的外層加入了一個model
層次。再次,原來在
android
的裡面的塊,除了defaultConfig
外,全部移除android
塊放入model
塊中與android
並列,並且前面的名字加上android.
。然後,
compileSdkVersion 23
與buildToolsVersion "23.0.2"
改成compileSdkVersion = 23
和buildToolsVersion = "23.0.2"
,中間加上了=
。其次,添加上
android.ndk
塊,塊中的moduleName
表示C/C++代碼打包成so文件的名字。再次,
android.buildTypes
塊中的proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
改成proguardFiles.add(file("proguard-rules.txt"))
。最後,注意
dependencies
塊依然在最外層,它不在model
塊中。
3. 開始NDK之旅
首先,在Android程序中添加一個native方法:
public native String getString();
。其次,我們注意到添加的native方法的方法名是紅色的,將滑鼠移動到方法名上(注意不能是括弧裡面或者後面),然後按下
Alt+Enter
快捷鍵,彈出一些解決的方法建議,點擊第一個Create Function...
。再次,此時會自動建立一個與java目錄同級的jni目錄,在jni目錄自動建立一個c文件,在c文件中實現剛才的native方法。
然後,稍稍修改一下c文件中實現的native方法。
JNIEXPORT jstring JNICALL
Java_com_lavor_ndklearning_MainActivity_getString(JNIEnv *env, jobject instance) {
// TODO
return (*env)->NewStringUTF(env, "AndroidStudio NDK開發最佳入門實踐");
}
最後在Android程序中添加上載入so庫文件的代碼。
static {
System.loadLibrary("lavor");
}
運行程序后界面如下:
AndroidStudio NDK開發入門介紹完畢。程序源代碼下載地址:https://github.com/lavor-zl/NDKLearning
注意:gradle的版本不能太低,不然會出錯,AndroidStudio版本也不能太低不然可能沒有集成C/C++編譯器,某些1.7的JDK可能會出錯,重新下載一個JDK就好了,並設置JDK的路徑。