Android Studio開發(fā)之 JNI 篇的簡單示例
前言
Android上層應(yīng)用使用java開發(fā),不過java并不適合密集型運(yùn)算,比如圖片處理等,遇到密集型運(yùn)算,一般使用c/c++完成。
Java虛擬機(jī)支持調(diào)用c/c++代碼,即JNI(Java Native Interface),它提供了若干的API實(shí)現(xiàn)了Java和其他語言的通信。為方便android平臺上使用JNI技術(shù),提供了NDK開發(fā)包,可以將NDK理解為對JNI的進(jìn)一步封裝,方便開發(fā)使用罷了。
JNI開發(fā)方式有多種,可以在Android 源碼中開發(fā),也可以利用其它工具,但都比較煩瑣或者要下載很多東西,Android Studio也支持JNI開發(fā),使用起來也比較方便,本文主要講述下如何使用Android Studio進(jìn)行JNI開發(fā)。
NDK設(shè)置
NDK需要下載,一共有兩種方式,建議從Android Studio中下載。
從Android Studio中打開SDK Manager,進(jìn)入如下界面并且勾選NDK選項(xiàng)。
點(diǎn)擊應(yīng)用,安裝完后重啟Android Studio即可。
也可以從官網(wǎng)下載,然后在Android Studio中設(shè)置,這種方式不再講述。
JNI開發(fā)
本章中以高斯模糊圖像處理為示例,學(xué)習(xí)如何進(jìn)行JNI開發(fā)。
1、新建一個(gè)Android工程,注意Android Studio對包名的處理,它的默認(rèn)處理非常地別扭,如果不喜歡這種包名命名方式,可以點(diǎn)擊 Edit 進(jìn)行更改。
2、將工程以Project視圖顯示,方便查找具體文件。
3、在項(xiàng)目gradle.properties文件中加上以下代碼,表示我們要使用NDK進(jìn)行開發(fā)。
android.useDeprecatedNdk=true
4、查看項(xiàng)目local.properties中是否有加入ndk和sdk的路徑,如果沒有需要補(bǔ)充。
ndk.dir=D\:\\android-sdk\\ndk-bundle sdk.dir=D\:\\android-sdk
5、在app文件夾下的build.gradle的defaultConfig里加入如下代碼
ndk { moduleName "ImageBlur" //生成的so文件名字,調(diào)用C程序的代碼中會用到該名字 abiFilters "armeabi", "armeabi-v7a", "x86" //輸出指定三種平臺下的so庫 ldLibs "log", "jnigraphics", "android" //jni中需要用到的其它庫 }
6、定義native方法
7、生成h文件,打開Android Studio提供的命令行工具Terminal,輸入以下指令。
cd app/src/main/java javah -jni 包名+類名
本例中報(bào)錯(cuò),“無法確定Bitmap的簽名”,根據(jù)網(wǎng)上搜索結(jié)果,需要指出 android.jar 文件的位置才行,于是按如下方法生成 h 文件。
javah -classpath C:\PROGRA~2\Android\android-sdk\platforms\android-8\android.jar;. com.test.JniTest
8、建立 JNI 文件夾,復(fù)制生成的 h 文件到 JNI 文件夾中來。 選擇File->New->Folder->JNI Folder
注意:在彈出創(chuàng)建 JNI 文件夾的對話框中勾選 Change Folder Location,并在下面輸入文件夾名,如下圖所示。
一般來說JNI相關(guān)文件放在 src/main/jni 之中。
9、新建c文件,實(shí)現(xiàn)對應(yīng)接口,在java代碼中完成 JNI 接口調(diào)用。
結(jié)語
在gradle構(gòu)建的過程中有可能出現(xiàn)這樣或那樣的異常,查看gradle構(gòu)建日志,即可知道具體異常,而查看gradle構(gòu)建日志按鈕比較隱蔽。
比如說,使用c文件或c++文件,往往會有一些不同,使用c++文件可能編譯報(bào)錯(cuò),此時(shí)則需要打開gradle console查看具體原因。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android Studio實(shí)現(xiàn)單選對話框
這篇文章主要為大家詳細(xì)介紹了Android Studio實(shí)現(xiàn)單選對話框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05android實(shí)現(xiàn)文字水印效果 支持多行水印
這篇文章主要為大家詳細(xì)介紹了android添加文字水印,并支持多行水印,自定義角度和文字大小,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10Android時(shí)間選擇器、日期選擇器實(shí)現(xiàn)代碼
這篇文章主要為大家分別介紹了Android時(shí)間選擇器、日期選擇器實(shí)現(xiàn)代碼,感興趣的小伙伴們可以參考一下2016-04-04基于RxJava框架實(shí)現(xiàn)獲取驗(yàn)證碼的輔助類
這篇文章主要為大家詳細(xì)介紹了基于RxJava框架實(shí)現(xiàn)獲取驗(yàn)證碼的輔助類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06Android編程重寫ViewGroup實(shí)現(xiàn)卡片布局的方法
這篇文章主要介紹了Android編程重寫ViewGroup實(shí)現(xiàn)卡片布局的方法,實(shí)例分析新建FlowLayout繼承ViewGroup類及設(shè)置布局文件實(shí)現(xiàn)卡片布局效果的相關(guān)技巧,需要的朋友可以參考下2016-02-02android byte[] 和short[]轉(zhuǎn)換的方法代碼
這篇文章主要介紹了android byte[] 和short[]轉(zhuǎn)換的方法代碼,有需要的朋友可以參考一下2014-01-01解決Android WebView攔截url,視頻播放加載失敗的問題
這篇文章主要介紹了解決Android WebView攔截url,視頻播放加載失敗的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android中網(wǎng)絡(luò)框架簡單封裝的實(shí)例方法
在本篇文章里小編給大家整理的是關(guān)于Android中網(wǎng)絡(luò)框架簡單封裝的實(shí)例方法,需要的朋友們可以學(xué)習(xí)下。2020-03-03詳解Flutter手游操縱桿移動的原理與實(shí)現(xiàn)
這篇文章將為大家詳細(xì)介紹一下Android?Flutter手游中操縱桿移動角色的原理與實(shí)現(xiàn)過程,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-07-07