android studio jni 學(xué)習(xí)總結(jié)

我們來看下jni的定義(來自百度):JNI是java Native Interface 的縮寫,它提供了若干個的Api實(shí)現(xiàn)了java和其他語言的通信(主要是C和C++);

android開發(fā)用的語言是java,但是android底層實(shí)現(xiàn)是c語言實(shí)現(xiàn)的linux內(nèi)核,一些驅(qū)動等都是c代碼,我們用java開發(fā)功能時要對硬件進(jìn)行調(diào)用控制,c和java不能互相調(diào)用,這時就得用一個中間件來完成,jni就是c與java兩個語言互調(diào)的中間件。

下面我們來看一下android studio中來實(shí)現(xiàn)jni操作;首先我們假設(shè)android studio 已經(jīng)配置好而且都會用android studio;下面來配置NDK:1、下載NDK 網(wǎng)址:https://developer.android.com/ndk/guides/index.html? google 官方例子:https://github.com/googlesamples/android-ndk/tree/master

google 已經(jīng)給我們添加好的NDK下載,我們可以在sdkmanager中進(jìn)行下載,


圖 1
圖 2
圖 3

把NDK這個勾上點(diǎn)擊應(yīng)用android studio會自動幫我們下載,下載好之后,我們在這里配置一下File->other setting->default project structure進(jìn)行配置。

上面這幾部完成我們就可以來完成jni開發(fā);首先我們來進(jìn)行一個簡單的測試:

1、我們要實(shí)現(xiàn)什么功能:在textView中顯示從jni獲得的字符串;

2、我們要創(chuàng)建一個類名叫:HelloJni里面定義一個方法叫g(shù)etJniString(),這里報錯,不要管它;


圖 4

3、通過javah獲取這個類及方法對應(yīng)的c代碼中的.h文件(在android studio中有個teminal這個命令行工具并直接定位到了所在的工程app下):

1)我們下進(jìn)行編譯一下,報錯不要管(怎么先編譯啊,這個其實(shí)可以不用,這個是因?yàn)樵贘DK早期的版本中需要在class文件進(jìn)行生成.h文件這是我們就需要先編譯生成.class文件,這個build->made project 在app->build->intermediates->classes下中找到對應(yīng)的.class文件,有的話進(jìn)行下邊額操作),其實(shí)我們可以直接在java文件下生成.h文件(可能會出錯,JDK版本問題)

圖 5

2)在terminal中來生成.h文件,沒有進(jìn)入到classes目錄?????,好吧我們直接找工程進(jìn)入對應(yīng)的目錄,看來只能相信自己了,在對應(yīng)的debug目錄下打開命令行shift+鼠標(biāo)右擊,選擇‘在此處打開命令行窗口’輸入javah查看一下有無當(dāng)前命令之后輸入對應(yīng)的命令 : javah -jni com.oath.demo.HelloJni 這個是在debug文件夾下對應(yīng)的你的文件路徑(HelloJni)用.隔開也就是包路徑,這時回車在debug文件夾下生成.h文件。

圖 6
圖 7
圖 8
圖 9

3)我們在app的main文件下創(chuàng)建jni文件夾,把生成的.h文件方進(jìn)去,這個.h只是一個聲明沒有具體實(shí)現(xiàn),下面我們在床架一個.c文件來實(shí)現(xiàn)這個方法;同樣在jni文件夾下創(chuàng)建HelloJni.c(可以不叫HelloJni,其他的也行這個沒有限制)文件,接下來我們來寫HelloJni.c的內(nèi)容如圖:


圖 10
圖 11

4)在app下的build.pradle下聲明NDK,在mainActivity中調(diào)用一下getJniString();先加載jni庫文件,這個myjni是隨便起的;

圖 12
圖 13

5)測試如圖

圖 14
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容