国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Android NDK開發(fā)之從環(huán)境搭建到Demo級十步流

寫在正文之前:

幾個月沒有更新博客,感覺有點生疏了,所以說不能斷,一斷人就懶。

其實這幾個月也并不是什么事也沒有做,俺可是時刻想著今年的任務(wù)呢,10本書,30篇博文...,這幾個月間斷性的也是在學(xué)習(xí)中,學(xué)H5,學(xué)設(shè)計模式,以及NDK JNI開發(fā)等等。

學(xué)習(xí)JNI主要是因為公司有一些COCOS游戲需要添加計費點,而又沒有真正的游戲開發(fā)人員,這個重任就落到我身上了,然后就是各種虐,一虐到底,苦不堪言,這種虐并不是學(xué)習(xí)技術(shù)的虐,而是一款游戲用于N種計費點,不停的改改改,那個需求這個需要的,然后你就等著被玩吧。

正文

OK,言歸正傳,說到NDK,相信大家都不陌生,它是Google為便于Android開發(fā)提供的一種原生開發(fā)集:Native Development Kit,而且也是一個包含API、構(gòu)建工具、交叉編譯、調(diào)試器、文檔示例等一系列的工具集,可以幫助開發(fā)者快速開發(fā)C(或C++)的動態(tài)庫,并能自動將so和java應(yīng)用一起打包成APK。

與NDK密切相關(guān)的另一個詞匯則是JNI,它是NDK開發(fā)中的樞紐,Java與底層交互絕大多數(shù)都是通過它來完成的,那么接下來看看什么是JNI?

JNI:Java Native Interface 也就是java本地接口,它是一個協(xié)議,這個協(xié)議用來溝通java代碼和本地代碼(c/c++)。通過這個協(xié)議,Java類的某些方法可以使用原生實現(xiàn),同時讓它們可以像普通的Java方法一樣被調(diào)用和使用,而原生方法也可以使用Java對象,調(diào)用和使用Java方法。也就是說,使用JNI這種協(xié)議可以實現(xiàn):java代碼調(diào)用c/c++代碼,而c/c++代碼也可以調(diào)用java代碼。

那為什么要使用NDK開發(fā)呢?

  • 我們都知道,java是半解釋型語言,很容易被反匯編后拿到源代碼文件,在開發(fā)一些重要協(xié)議時,我們?yōu)榱税踩鹨?,使用C語言來編寫這些重要的部分,來增大系統(tǒng)的安全性。

  • 在一些復(fù)雜性的計算中,要求高性能的場景中,C/C++更加的有效率,代碼也更便于復(fù)用。

當(dāng)然還有其他的優(yōu)點,這些都驅(qū)使我們選擇相對來說高效和安全的DNK來開發(fā)我們的應(yīng)用程序。

OK,說了那么多NDK,那到底怎么使用NDK來開發(fā)應(yīng)用程序呢?

俗話說,工欲善其事必先利其器,想要使用NDK開發(fā),必先打磨好工具。那下面首先來看看DNK的環(huán)境搭建吧。

NDK的環(huán)境搭建

  1. 安裝配置NDK

    首先下載NDK,這里我使用的是android-ndk-r14b-windows-x86_64,可以自主選擇。

    1). 解壓NDK的zip包,注意路徑目錄不要出現(xiàn)空格和中文,這里建議大家把包解壓到SDK目錄里面,并命名為ndk-bundle,好處是,啟動AS的時候會檢查它并直接添加到ndk.dir中,減少我們的配置工作;

    2). 配置path : 把解壓好的路徑添加到環(huán)境變量path中;

    3).ndk-build:cd到解壓后NDK的根目錄,執(zhí)行ndk-build命令。

  2. 給AS配置關(guān)聯(lián)NDK,這里我使用的是androidstudio,使用Eclipse的會有所不同,請自行查找資料來配置。

    1). 在建立的工程中的local.properties中添加如下配置
    ndk.dir=D:\guanmanman\androidStudio\sdk\ndk-bundle,這里注意下要使用轉(zhuǎn)義字符“”來進(jìn)行字符轉(zhuǎn)義。如果ndk目錄是存放在SDK中,并命名為ndk-bundle,這個配置會自動為添加上去。

    2). 在工程中g(shù)radle.properties中添加對舊版本的NDK支持的配置
    android.useDeprecatedNdk=true

OK,到這里我們基本的NDK環(huán)境配置已基本完成,那接下來就開始我們的NDK開發(fā)旅程吧。

Demo實例之調(diào)用本地?zé)o參方法直接返回字符串

一 layout布局

直接在layout中添加一個按鈕Button控件,用于點擊調(diào)用本地方法:

二 在MainActivity中獲取該控件并注冊它的點擊監(jiān)聽器

三 創(chuàng)建Java2CJNI類及本地方法

在我們的包下直接創(chuàng)建一個Java2CJNI類,并在類里創(chuàng)建一個java2C的本地方法:

四 通過javah命令獲取到本地頭文件

在項目根目錄下,進(jìn)入main->java目錄,全選文件目錄欄,直接輸入cmd命令并按回車鍵進(jìn)入docs命令,在命令中執(zhí)行javah com.sanhui.ndkdemo.Java2CJNI命令:

執(zhí)行完javah命令后,會在java當(dāng)前目錄下創(chuàng)建一個.h的頭文件

五 在main目錄下創(chuàng)建一個jni文件夾,并把(四)中的頭文件轉(zhuǎn)移到該文件夾下

打開該文件夾可以看到系統(tǒng)為我們創(chuàng)建好的本地方法頭文件。

六 創(chuàng)建實現(xiàn)頭文件的.C源文件

在jni目錄下創(chuàng)建一個Java2C.c的源文件,通過#include引入我們的頭文件com_sanhui_ndkdemo_Java2CJNI.h,并把在頭文件下的聲明方法JNIEXPORT jstring JNICALL Java_com_sanhui_ndkdemo_Java2CJNI_java2C(JNIEnv *, jobject);復(fù)制到我們的Java2C.c中,補(bǔ)全方法參數(shù),并實現(xiàn)一個C字符串“I am From Native C .”的返回:

OK,至此我們的代碼已編寫完畢,接下來我們需要配置編譯后的so名稱和支持的cpu類型。

七 在該項目下的build.gradle配置生成的so名稱和支持的cpu類型

在android->defaultConfig下添加如下代碼:

ndk{     moduleName "Java2C" //so文件名     abiFilters "armeabi", "armeabi-v7a", "x86" //CPU類型}

當(dāng)然在這里不配置也是可以的,系統(tǒng)會用默認(rèn)的項目名稱作為so文件的名稱,并且cpu也將會支持全部類型,只是當(dāng)我們的項目名稱改變的時候,在我們引用加載so文件的地方也需要改變,不改變的話就出現(xiàn)找不到so庫的異常,所以,這里配置只是為了便利系統(tǒng)生成我們制定的so文件名,而不是根據(jù)項目名稱生成。

八 加載so庫

在我們創(chuàng)建的Java2CJNI類中加載so庫,主要是為了在我們調(diào)用本地方法之前先編譯本地源碼。

在使用 System.loadLibrary("Java2C");加載庫時,庫名一定要與在build.gradle中配置的moduleName 名稱一致,否則將找不到庫。

九 生成so文件

在項目的工具類中選擇Build->Rebuild Project,進(jìn)行重新編譯工程,然后AS會為我們生成so文件,so文件所在目錄為:NDKDemo\app\build\intermediates\ndk\debug\lib下

注意:so文件命名方式是:lib+moduleName+.so

十 執(zhí)行調(diào)用本地方法

在MainActivity中點擊Button按鈕調(diào)用本地方法。并通過Toast打印出來。

OK,到這里已經(jīng)完成了一個DEMO級別的NDK應(yīng)用開發(fā)了,那么來看看我們的執(zhí)行結(jié)果:

到這里一個DEMO級別的NDK開發(fā)已經(jīng)完成了,通過上面的十步已經(jīng)淋漓盡致的展現(xiàn)了NDK開發(fā)的所有步驟流程,相信你已經(jīng)完全的學(xué)會啦。

下面章節(jié)將會講述Java調(diào)用本地C方法和C回調(diào)Java方法的實例,也會穿插的講解下JNI的更多使用,敬請期待。

更多資訊請關(guān)注微信平臺,有博客更新會及時通知。愛學(xué)習(xí)愛技術(shù)。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android Studio2.2 CMAKE高效NDK開發(fā)
ffmpeg超詳細(xì)綜合教程
Android NDK開發(fā)入門實例
Android Studio開發(fā)JNI示例
Android:JNI 與 NDK到底是什么
基于Android本地代碼生成器詳解
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服