在項目中遇到關于NDK的問題肢簿,不知道NDK到底是什么鬼,所以一直在找相關的資料,嘗試不同的方法進行編寫池充,在這個過程中碰到許多坑桩引,所以在這里進行一下總結(jié),同時也希望能幫助更多的開發(fā)者收夸,那么我們今天就淺淺的談一下NDK開發(fā)坑匠,
一,NDK 是 Google為Android提供做C/C++代碼開發(fā)的工具包卧惜,包含GCC的編譯器以及各個平臺(arm厘灼,X86,MIPS)的相關頭文件咽瓷,交叉編譯的一些平臺相關文件等手幢。
廢話不多說讓我們直接來體驗下ndk開發(fā)的感覺。
1.首先我們要配置好開發(fā)環(huán)境忱详,配置環(huán)境如下:
找到sdk目錄下的ndk文件夾围来,進行環(huán)境變量的配置,下面是Windows的環(huán)境變量配置匈睁;
在這里說明一下监透,使用android studio進行NDK下載時需要耗費一點時間,需要耐心等待航唆。配置好后dos下命令:ndk-build胀蛮;出現(xiàn)以下信息說明配置成功。
2.環(huán)境配置好后糯钙,下面就進行NDK的例子說明
首先新建一個項目粪狼,并勾選Include C++ support,一直next下去。
3.配置Android studio中的NDK路徑任岸,并檢查local.properties是否配置正確再榄,如下圖:
4.檢查是否配置正確:
5.設置as。將ndk版本差異檢測過濾掉享潜,要不然項目無法編譯困鸥。添加:android.useDeprecatedNdk=true
6. 編寫調(diào)用c的java代碼。同時把MainActivity里的static {System.loadLibrary("native-lib"); }與public static native int square(int num);剪切復制到新建的MathKit類中
7.生成調(diào)用本地方法的.h方法剑按,用as自帶的Terminal工具來生成疾就。命令:
進入創(chuàng)建項目的java文件夾下
執(zhí)行命令:
生成效果如下:
8.在main目錄下創(chuàng)建jin文件夾,將步驟7生成的.h文件剪切復制到jni目錄艺蝴,并創(chuàng)建.c文件
9. 寫c的測試代碼猬腰。include中指向你創(chuàng)建的.h頭文件com_fittop_ndkkaifa_MathKit;內(nèi)容如下:
10.在build.gradle中配置生成so文件的信息猜敢,主要配置abiFilters
由于android studio 2.2以上使用CMake姑荷,所以需要配置CMakeLists.txt文件,修改生成后so文件名稱侮攀、添加.c文件的路徑:
11. 用Make Project 生成so文件,然后運行項目厢拭。然后就可以拿到so文件
測試調(diào)用c文件,測試如下:
運行效果如下:
12.打包jar文件
刪除一些無用的資源撇叁,如MainActivity供鸠,layout等,只留下和JNI有關的java類.
14. 修改module的build.gradle文件
有如下幾個地方需要修改:
將最前面的apply plugin: 'com.android.application'修改為apply plugin: 'com.android.library'
將defaultConfig修改為:
在上圖該文件最后加上:
task deleteOldJar(type: Delete) {delete'build/outputs/test.jar'}task exportJar(type: Copy) {from('build/intermediates/bundles/release/')into('build/libs/')include('classes.jar')rename ('classes.jar','test.jar')}exportJar.dependsOn(deleteOldJar, build)
15.導出jar包
首先打開Gradle
打開app->Tasks->other->exportJar
雙擊exportJar就可以了陨闹,然后再'app/build/libs'文件夾下找到test.jar包楞捂,可以復制導出使用。
具體可參考小弟上傳到github上的demo:github.com/liuxinggithub/Ndk.git
本文參考了網(wǎng)上資料趋厉,總結(jié)了一下使用方法寨闹,方便更多使用者的使用。