成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android NDK開發(fā),沒有你想象的那么難

移動開發(fā) Android
為什么要用NDK:我們都知道,java是半解釋型語言,很容易被反匯編后拿到源代碼文件,在開發(fā)一些重要協(xié)議時,我們?yōu)榱税踩鹨姡褂肅語言來編寫這些重要的部分,來增大系統(tǒng)的安全性。還有,在一些接近硬件環(huán)境下,相信大家都清楚C與java的優(yōu)劣。順帶提一下:NDK并不能顯著提升應(yīng)用效率。

DK:Native Development Kit原生開發(fā)工具

NDK能干什么:NDK使得在android中,java可以調(diào)用C函數(shù)庫。

為什么要用NDK:我們都知道,java是半解釋型語言,很容易被反匯編后拿到源代碼文件,在開發(fā)一些重要協(xié)議時,我們?yōu)榱税踩鹨姡褂肅語言來編寫這些重要的部分,來增大系統(tǒng)的安全性。還有,在一些接近硬件環(huán)境下,相信大家都清楚C與java的優(yōu)劣。順帶提一下:NDK并不能顯著提升應(yīng)用效率。why?我們都覺得C語言比起java來說效率要高出很多,一方面,隨著jdk的不斷更新,java的效率也隨之提高;另一方面,即便使用C語言編碼提高了應(yīng)用效率,但是在java與C相互調(diào)用時平白又增大了開銷。

對于這些問題,這里就不多說了,希望詳細(xì)了解的,請各位自行搜索。

NDK開發(fā),第一步,當(dāng)然是搭建環(huán)境

首先,去 http://developer.android.com/tools/sdk/ndk/index.html 下載你對應(yīng)平臺的開發(fā)工具

接著,我們需要實現(xiàn)linux環(huán)境 下載cygwin  http://www.cygwin.com/  (對于64位的用戶,可以直接下載我已經(jīng)下載好的,百度的鏈接應(yīng)該比在線安裝快一些,正在上傳到我的網(wǎng)盤,稍后將地址放在回復(fù)里面)

選擇在線下載的朋友,建議選擇下圖的地址,(是國內(nèi)的)

選擇好下載源以后就是選擇下載目錄了。我們用鼠標(biāo)點開組件列表中的“Devel”分支,在該分支下,有很多組件,

我們必須的是:binutils,gcc,gcc-mingw,gdb

選好這四個目錄了以后,就是漫長的等待了,可以去吃頓飯差不多了。

下面該配環(huán)境變量了:NDK環(huán)境變量需要將NDK根目錄(其實就是ndk-builder.cmd文件的目錄)加入系統(tǒng)環(huán)境變量

cygwin環(huán)境變量需要將bin目錄加入系統(tǒng)環(huán)境變量

例如我的路徑是:C:\java\android-ndk-r7b 和 C:\java\cygwin\bin 這兩個

配置好環(huán)境后就可以開始編碼了

1、新建一個android工程

2、在工程目錄下添加名為 jni 的文件夾(必須)

3、在jni文件夾下新建你的.c文件(我的叫Hello.c)

4、在jni文件夾下新建名字為Android.mk文件

.mk文件中加入

  1. LOCAL_PATH := $(call my-dir)    //當(dāng)前路徑(如果你了解shell語言,應(yīng)該可以很輕松的理解) 
  2. include $(CLEAR_VARS) 
  3. LOCAL_MODULE    := Hello        //要生成的.so庫名 
  4. LOCAL_SRC_FILES := Hello.c        //你的.c文件名字 
  5. include $(BUILD_SHARED_LIBRARY) 

現(xiàn)在可以開始寫我們的C代碼了,當(dāng)然這里不能再去從main函數(shù)開始寫,而是有固定的命名方式

如圖,我的函數(shù)名為:Java_com_example_testndk_MainActivity_helloWorldFromC     (Java_包名_類名_函數(shù)名)

呵呵,寫C的朋友可能要抱怨了,我什么時候?qū)戇^這么長的函數(shù)名了。沒辦法,這是jni的規(guī)范,以Java_開頭,后跟java應(yīng)用的包名加上類名,都是以下劃線分割,最后才是跟我們的C函數(shù)名

至于參數(shù)形式以及返回值類型,我們可以去jdk目錄下翻閱jni.h文件(我的jni文件目錄:C:\java\jdk1.7.0_25\include\jni),有很多函數(shù)模板(不同于C++模板)

由于源碼太多大家自己去查看吧,我就不貼圖了

在jni.h文件的第104行這里可以看到我們返回的jstring本質(zhì)上就是一個結(jié)構(gòu)體指針,從C代碼里面可以看到就是一個指向字符串的指針,在java里也就是一個數(shù)組。

好了,C代碼講解完畢,回到我們android工程。

從剛才的C代碼函數(shù)名,大家應(yīng)該就可以知道我的java類名了(這是必須的,因為要一一對應(yīng)嘛)

需要注意的是圖中紅色方框中的靜態(tài)代碼塊

學(xué)過java大家都知道,一個 類在初始化的時候最先執(zhí)行的不是構(gòu)造方法而是靜態(tài)代碼塊,沒錯也就是這里之所以把System.loadLibrary()放到靜態(tài)代碼塊的原因。從名字我們就可以猜到了,加載庫(“Hello”)

還記得我們在Android.mk中聲明的那個Hello嗎,就是那里的名字

緊接著,看到第12行代碼,回憶java知識了,用native修飾的方法,表示java的本地方法,也就是我們的C函數(shù)了。(其實這樣的函數(shù)在 android SDK)中并不少見,比如我們常用到的多媒體類MediaPlayer,大家可以去看看源碼,這里我就不發(fā)了,里面有很多native方法,因為要調(diào)用音 頻驅(qū)動嘛。 

至此,NDK工程就結(jié)束了,來測試一下吧。首先編譯我們的C代碼。打開cmd,切換到工程目錄下(工程目錄?右鍵工程名,properties,如上圖)輸 入ndk-builder(當(dāng)時的環(huán)境變量設(shè)置成功了嗎?去看看安卓工程的libs文件夾里面是不是多出來了個libHello.so文件)

然后我們再運行我們的安卓工程吧。

最后,我再說一點自己的看法吧,首先就是C語言的基礎(chǔ),結(jié)構(gòu)體指針一定要掌握的好,好好看看jni.h文件給出了哪些函數(shù),其中還有支持C與java交互的函數(shù),要想用好NDK,先用好JNI

責(zé)任編輯:閆佳明 來源: oschina
相關(guān)推薦

2023-07-30 16:09:38

數(shù)字經(jīng)濟數(shù)字化轉(zhuǎn)型

2018-07-30 09:00:49

技術(shù)管理實踐

2016-06-08 13:42:08

2020-09-30 10:40:56

人工智能AI

2022-07-11 12:37:15

安全運營網(wǎng)絡(luò)攻擊

2017-08-09 14:49:03

WebHTTPS瀏覽器

2015-06-24 10:32:13

訊鳥云計算會展

2023-07-28 14:41:07

技術(shù)方案

2013-02-22 09:49:43

大數(shù)據(jù)谷歌大數(shù)據(jù)全球技術(shù)峰會

2014-03-14 09:35:56

內(nèi)存優(yōu)化軟件內(nèi)存優(yōu)化

2010-08-20 09:37:04

虛擬化

2023-12-04 07:18:05

Goswitch

2013-01-06 13:45:14

2021-08-18 10:45:44

網(wǎng)絡(luò)AI智能

2018-12-18 09:20:06

2023-05-10 16:10:28

數(shù)據(jù)分析數(shù)字化轉(zhuǎn)型

2023-12-28 12:07:21

2022-08-01 10:31:40

KubernetesIPLinux

2016-10-13 13:43:04

WebPGoogleJPEG和PNG格式

2009-06-22 14:02:00

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美伊人久久久久久久久影院 | 久久国产一区 | 欧美一级二级视频 | 久久国产精品99久久久大便 | 亚洲高清免费观看 | 欧美日韩一区二区三区视频 | 久久久久国 | 激情伊人网 | 久久久久久综合 | 精品一区二区三区免费视频 | 99re| 久久久精品一区二区三区 | 免费一二区 | 欧美韩一区二区三区 | 午夜av电影| 成人精品一区二区户外勾搭野战 | 日韩在线精品视频 | 亚洲免费观看视频网站 | 中文字幕亚洲专区 | 久久久在线视频 | 精品亚洲一区二区三区四区五区 | 欧美一级黄色免费 | av天天干 | 欧美一级片免费看 | 国产午夜精品久久久 | 日本在线视频中文字幕 | 国产精品毛片一区二区在线看 | 日韩精品一区二区在线观看 | 免费在线观看一区二区三区 | 国产精品久久久久久久久久久新郎 | 久久久国产一区二区三区 | 久久久久国产 | 美女在线视频一区二区三区 | 亚洲欧洲日韩精品 中文字幕 | 国产一区二区精品在线 | 日韩在线观看中文字幕 | 在线看91| 99免费在线观看视频 | 欧美精品在线免费观看 | 欧美另类视频在线 | 欧美一区二区在线观看 |