網上一些介紹AndroidStudio NDK入門的教程,感受都不是很完整和全面,也沒有告訴初學AndroidStudio NDK的同窗們一些須要注意的地方。網上的方法大多須要使用javah
命令,使用本文的方法將再也不使用該命令了,是否是方便了不少。
本文所介紹的是在AndroidStudio上搭建最佳的NDK開發環境,給使用NDK的開發人員最大的方便。
本人AndroidStudio版本2.0。
本人Gradle版本2.10。java
要進行Android NDK開發,首先要下載Android NDK開發工具。能夠在AndroidStudio上面的下載,也能夠本身下載好了,而後將NDK的路徑設置爲本身下載的Android NDK開發工具的路徑。Android NDK開發工具下載地址:http://wear.techbrood.com/tools/sdk/ndk/ 。 android
gradle插件不支持NDK(固然用它也能夠進行NDK開發,就是很是不方便),咱們須要使用gradle-experimental插件。gradle-experimental插件使用的時候與gradle插件稍微有點區別。c++
配置Project的build.gradle很簡單就是將dependencies
中classpath
的值改成對應的gradle-experimental插件。git
dependencies { classpath 'com.android.tools.build:gradle-experimental:0.7.0' }
先給出一個我配置的範例,而後說明那些須要注意的。github
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'
。api
其次,在原來android
的外層加入了一個model
層次。微信
再次,原來在android
的裏面的塊,除了defaultConfig
外,所有移除android
塊放入model
塊中與android
並列,而且前面的名字加上android.
。app
而後,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
塊中。
首先,在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的路徑。
歡迎關注個人微信公衆號:Android技術漫談