默認你的工程接口如圖所示android
首先配置好NDK開發目錄,在build.gradle的defaultconfig中配置好ndk選項apache
ndk { moduleName "xxx" }
而後,在build.gradle(app)文件的android結構下,加入如下配置:app
sourceSets.main{ jniLibs.srcDir 'src/main/libs' jni.srcDirs = [] }
jniLibs.srcDir 'src/main/libs':意思是編譯成功的so,會存放在src/main/libs目錄下面 jni.srcDirs = []:將gradle的jni源目錄設置爲空,禁用gradle自帶的ndk編譯函數
接着加入如下配置gradle
task ndkBuild(type: Exec) { if (Os.isFamily(Os.FAMILY_WINDOWS)) { commandLine 'ndk-build.cmd', '-C', file('src/main/jni').absolutePath } else { commandLine 'ndk-build', '-C', file('src/main/jni').absolutePath } } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn ndkBuild }
ndkBuild函數的意思是執行默認的ndk編譯 task.withType的意思是添加ndkbuild爲工程編譯的依賴項 由於涉及到os辨認,因此在此文件的文件頭須要加入ui
apply plugin: 'com.android.library' import org.apache.tools.ant.taskdefs.condition.Os
這樣在編譯的時候可能會報的錯誤爲 execution failed for task ':app:ndkbuild'.code
此時,檢查NDK路徑配置是否有誤,若是沒有異常,使用cmd命令直接調用ndk-build(.cmd) -C 進行編譯,若是代碼有誤,可直接檢查代碼。若是代碼確認無誤。,接口
將ndk-build.cmd的全路徑填入工程路徑中,便可成功編譯圖片
task ndkBuild(type: Exec) { if (Os.isFamily(Os.FAMILY_WINDOWS)) { commandLine 'D:\\xxxxx\\android-ndk-r11b\\ndk-build.cmd', '-C', file('src/main/jni').absolutePath } else { commandLine '/home/xxxxx/Android/android-ndk-r11b/ndk-build', '-C', file('src/main/jni').absolutePath } }