国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android Studio開(kāi)發(fā)之 JNI 篇的簡(jiǎn)單示例

2019-12-12 01:51:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

Android上層應(yīng)用使用java開(kāi)發(fā),不過(guò)java并不適合密集型運(yùn)算,比如圖片處理等,遇到密集型運(yùn)算,一般使用c/c++完成。

Java虛擬機(jī)支持調(diào)用c/c++代碼,即JNI(Java Native Interface),它提供了若干的API實(shí)現(xiàn)了Java和其他語(yǔ)言的通信。為方便android平臺(tái)上使用JNI技術(shù),提供了NDK開(kāi)發(fā)包,可以將NDK理解為對(duì)JNI的進(jìn)一步封裝,方便開(kāi)發(fā)使用罷了。

JNI開(kāi)發(fā)方式有多種,可以在Android 源碼中開(kāi)發(fā),也可以利用其它工具,但都比較煩瑣或者要下載很多東西,Android Studio也支持JNI開(kāi)發(fā),使用起來(lái)也比較方便,本文主要講述下如何使用Android Studio進(jìn)行JNI開(kāi)發(fā)。

NDK設(shè)置

NDK需要下載,一共有兩種方式,建議從Android Studio中下載。

從Android Studio中打開(kāi)SDK Manager,進(jìn)入如下界面并且勾選NDK選項(xiàng)。

點(diǎn)擊應(yīng)用,安裝完后重啟Android Studio即可。

也可以從官網(wǎng)下載,然后在Android Studio中設(shè)置,這種方式不再講述。

JNI開(kāi)發(fā)

本章中以高斯模糊圖像處理為示例,學(xué)習(xí)如何進(jìn)行JNI開(kāi)發(fā)。

1、新建一個(gè)Android工程,注意Android Studio對(duì)包名的處理,它的默認(rèn)處理非常地別扭,如果不喜歡這種包名命名方式,可以點(diǎn)擊 Edit 進(jìn)行更改。

2、將工程以Project視圖顯示,方便查找具體文件。

3、在項(xiàng)目gradle.properties文件中加上以下代碼,表示我們要使用NDK進(jìn)行開(kāi)發(fā)。

android.useDeprecatedNdk=true

4、查看項(xiàng)目local.properties中是否有加入ndk和sdk的路徑,如果沒(méi)有需要補(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程序的代碼中會(huì)用到該名字  abiFilters "armeabi", "armeabi-v7a", "x86" //輸出指定三種平臺(tái)下的so庫(kù)  ldLibs "log", "jnigraphics", "android" //jni中需要用到的其它庫(kù) }

6、定義native方法

7、生成h文件,打開(kāi)Android Studio提供的命令行工具Terminal,輸入以下指令。

cd app/src/main/javajavah -jni 包名+類名

本例中報(bào)錯(cuò),“無(wú)法確定Bitmap的簽名”,根據(jù)網(wǎng)上搜索結(jié)果,需要指出 android.jar 文件的位置才行,于是按如下方法生成 h 文件。

復(fù)制代碼 代碼如下:

javah -classpath C:/PROGRA~2/Android/android-sdk/platforms/android-8/android.jar;. com.test.JniTest

8、建立 JNI 文件夾,復(fù)制生成的 h 文件到 JNI 文件夾中來(lái)。 選擇File->New->Folder->JNI Folder

注意:在彈出創(chuàng)建 JNI 文件夾的對(duì)話框中勾選 Change Folder Location,并在下面輸入文件夾名,如下圖所示。

一般來(lái)說(shuō)JNI相關(guān)文件放在 src/main/jni 之中。

9、新建c文件,實(shí)現(xiàn)對(duì)應(yīng)接口,在java代碼中完成 JNI 接口調(diào)用。

結(jié)語(yǔ)

在gradle構(gòu)建的過(guò)程中有可能出現(xiàn)這樣或那樣的異常,查看gradle構(gòu)建日志,即可知道具體異常,而查看gradle構(gòu)建日志按鈕比較隱蔽。

比如說(shuō),使用c文件或c++文件,往往會(huì)有一些不同,使用c++文件可能編譯報(bào)錯(cuò),此時(shí)則需要打開(kāi)gradle console查看具體原因。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 长沙县| 龙门县| 巫山县| 原阳县| 游戏| 康马县| 塘沽区| 盘山县| 镇巴县| 安庆市| 渑池县| 峨眉山市| 成武县| 定安县| 安仁县| 贞丰县| 清徐县| 安乡县| 高阳县| 镇赉县| 江华| 上蔡县| 巴中市| 临汾市| 武邑县| 泰安市| 宣恩县| 青冈县| 波密县| 比如县| 海淀区| 满洲里市| 顺平县| 麻栗坡县| 商洛市| 常熟市| 社旗县| 亳州市| 友谊县| 松滋市| 富阳市|