999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

JNI技術在網絡交互中的應用

2016-09-12 08:02:32董偉巍
電子設計工程 2016年6期
關鍵詞:程序語言功能

董偉巍

(武漢郵電科學研究院 湖北 武漢 430000)

JNI技術在網絡交互中的應用

董偉巍

(武漢郵電科學研究院 湖北 武漢430000)

Android是一款運行在開放的Linux內核之上的操作系統,其上層應用程序采用Java開發語言,底層核心類庫采用C/C++語言編寫,開發者能夠非常便捷的使用Android SDK調用豐富的API,實現各種功能。不僅如此,Android還支持跨平臺跨語言操作,通過JNI技術可以方便的調用使用其他語言編寫的程序,滿足各種不同的開發需求。

Android開發;JNI技術;跨平臺;NDK

在移動開發如火如荼的今天,Android作為目前市場占有率最高的智能手機操作系統,自然是其中的佼佼者,其開發市場廣闊,勢如破竹,前景一片光明。Android系統架構采用軟件疊層的方式進行系統構建,從上至下依次為應用程序層、應用程序框架層、系統運行庫層和以及Linux內核層[1]。這種構架方式使得層與層之間相對獨立,當某一層發生了變化時,其它層受到的影響相對較小。Android上層的應用層和框架層都是使用Java語言,而系統運行庫層和Linux內核層則是使用C/C++編寫的,所以上層Java要調用底層的C/C++函數庫必須通過Java的JNI技術來實現[2]。

1 JNI技術簡介

JNI即Java Native Interface,通過JNI技術可以實現Java與其他語言(常見的有C、C++)的交互。JNI是完善Java功能的一個重要組成部分,JVM兼容了各種操作系統的差異性使用Java程序可以跨平臺運行,另一方面JNI提供了Java程序與操作系統和相關功能函數的交互接口使得Java功能更全面[3]。

JNI技術主要應用在以下幾個方面:

1)在程序對實時性要求高或對程序運算性能要求特別高時,可使用更底層的語言(如匯編、C和C++)來實現功能,然后在Java中調用;

2)在已有現成的用其他語言編寫的完整功能或者模塊時,使用Java直接調用;

3)在涉及Java標準平臺所不具備的依賴操作系統的特性時,使用JNI技術來實現。

圖1 JNI調用過程

JNI的調用過程可以抽象為一個代理模型來描述如圖 1所示,中間的 JNI-stub扮演著代理的角色,用來加載其他語言的動態庫,聲明Native接口方法;

為了與底層語言對接,通過 Javah生成頭文件,使用底層語言編寫頭文件中函數的代碼實體,實現各種所需的功能,這就是最右邊native,即被代理方的實體;

同時,聲明過的Native接口方法對其他Java類(圖1左邊部分)即客戶端開放,對于其他Java類來說JNI類可以通過簡答操作,直接使用,與調用其他Java類一樣方便。

2 NDK開發環境的配置

JNI開發需要用到NDK即Native Development Kit,下載Android NDK。下載地址為:http://developer.android.com/tools/ sdk/ndk/index.html下載后解壓縮到工作目錄。由于NDK開發大都涉及到C/C++在GCC環境下編譯、運行,所以在Windows環境下,需要用Cygwin模擬Linux編譯環境[4]。

下載并安裝Cygwin,安裝好之后運行安裝目錄下的“Cygwin.bat”,第一次運行時,它會自動創建用戶信息,用戶信息存放在“.Cygwinhome”中。在運行“Cygwin.bat”打開的命令行窗口輸入:“cygcheck-c cygwin”命令,會打印出當前Cygwin的版本和運行狀態,如果status是ok的話,則cygwin運行正常。分別輸入:“make-v”和,“gcc-v”命令如果檢測成功,會有make和gcc相關版本信息打印出來。

完成后開始配置NDK工作的環境變量,找到cygwin的安裝目錄,找到一個home<用戶名>.bash_profile文件,打開 bash_profile文件,添加 NDK=/cygdrive/<盤符 >/<android ndk目錄>例如:

NDK=/cygdrive/e/android-ndk-r5

export NDK

然后保存,打開 cygwin,輸入cd$NDK,若輸出上面配置的 /cygdrive/e/android-ndk-r5信息,則表明環境變量設置成功了。

3 網絡交互中JNI技術的應用與實現

3.1使用JNI的原因

網絡交互涉及多種底層網絡參數,硬件參數的獲取,網絡數據的自定義處理等。Java是高級語言,對于底層的操作效率較低,而C/C++在這些領域都已經有了比較成熟的解決方案。通過JNI技術我們可以很方便的在Android程序里使用這些成熟的解決方案,讓它為我們的應用需求進行服務,

3.2Java應用層

1)載入已經編譯好的本地*.so庫文件

這段代碼說明程序開始運行時就會加載ANKOclient,static區聲明的代碼會先于onCreate方法執行。如果程序中使用到多個庫,例如還有一個P2pClient庫 (完整的名字是p2pclient.so),并且P2pClient不是你應用程序的入口,那么p2pclient庫會在第一次使用P2pClient時候加載。

2)定義各需要調用的函數(這里只列舉部分函數)

從程序中可以看到在聲明這兩個方法時使有到 native關鍵字,native表明這兩個方法是本地方法,也就是說這兩個方法是通過本地代碼(C/C++)實現的,而在Java代碼中僅僅是聲明。用eclipse編譯該工程,會生成相應的.class文件,必須在生成.h文件之前編譯工程,因為生成.h文件需要用到相應的.class文件。

3.3編寫頭文件

利用Javah生成相應的.h文件,根據.h文件編寫相應的C/C++代碼[5]。首先在工程目錄下建立一個JNI文件夾,進入此文件夾并輸入以下命令:

Javah-classpath bin-d jni libp2pclient

其中-classpath bin:表示類的路徑,-d jni:表示生成的頭文件存放的目錄,libp2pclient則是完整類名。此頭文件不需要用戶編譯,直接供其它C、C++程序引用。以下是生成的頭文件的部分內容:

從上面的代碼中可以看到所聲明的函數名都比較長,不過它們的命名都是有規律的,完全是按照:Java_pacakege_class_mathod的形式來命名的。

3.4底層文件的編寫

編寫底層功能實現文件,需要導入剛剛生成的libp2pclient.h。

#include"libp2pclient.h"然后開始編寫函數實體,實現頭文件中的各個方法,完成需求的功能,以下為函數實體部分內容:

此函數實現了硬件參數查詢的功能,返回值為一個結構體,其中包括mac地址、通道數、是否支持拼接流在內的三項內容;

實現網絡參數獲取的功能,返回網絡參數。

3.5編譯生成相應的庫

將寫好的功能文件編譯成可供Java類調用的庫文件之前,首先要編寫Android.mk文件,以下逐條介紹mk文件中各個內容及其作用。

一個Android.mk文件首先必須定義好LOCAL_PATH變量。它用于在開發樹中查找源文件。在這個例子中,宏函數‘my-dir',由編譯系統提供,用于返回當前路徑 (即包含Android.mk file文件的目錄)。

CLEAR_VARS由編譯系統提供, 指定讓 GNU MAKEFILE清除許多除LOCAL_PATH外的LOCAL_XXX變量 (例如 LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_ STATIC_LIBRARIES,……)。這是非常必要的,因為所有的編譯控制文件都在同一個GNU MAKE執行環境中,所有的變量都是全局的。

編譯需要用到的所有庫文件,資源文件等等(這里只列舉部分)。

用來打印在c代碼里實現log打印。

編譯的目標對象,LOCAL_MODULE變量必須定義,以標識你在Android.mk文件中描述的每個模塊。名稱必須是唯一的,而且不包含任何空格。

編譯所包含的所有cpp文件(這里只列舉部分)。

7)include$(BUILD_SHARED_LIBRARY)

BUILD_SHARED_LIBRARY表示編譯生成共享庫,是編譯系統提供的變量,指向一個GNU Makefile腳本,負責收集自從上次調用 'include$(CLEAR_VARS)'以來,定義在LOCAL_XXX變量中的所有信息,并且決定編譯什么,如何正確地去完成。

完成Android.mk文件的編寫之后可以進行*.so庫文件的生成了,這里我們使用NDK所提供的ndk-build腳本生成共享庫libp2pclient.so,其中libp2pclient.so會自動生成到libs/ armeabi/目錄下,這時我們之前在Java類中寫好的調用函數就可以實現功能了,最后在eclipse中刷新我們的工程[6],重新編譯生成apk,libp2pclient.so共享庫將一起打包在apk文件內。

4 結束語

本文介紹了Android開發中JNI技術在網絡交互過程中的應用,重點闡述了NDK環境的配置和JNI技術的實現。當程序中用到了Java API不提供的特殊系統環境,而跨進程操作又不能現實時;當訪問一些己有的本地庫,但又不想付出跨進程調用如效率、內存、數據傳遞方面的代價時;當Java程序中的一部分代碼對效率要求非常高,如算法計算、圖形渲染時,使用JNI技術將是不可避免的。

[1]劉正偉,文中領,張海濤.云計算和云數據管理技術[J].計算機研究與發展,2012(S1):26-31.

[2]周貴芳,方貴明.基于JMF的跨平臺視頻點播系統的設計與實現[J].計算機應用與研究,2007,24(4):230-236.

[3]Sylvain Ratabouil.Android NDK Beginner's Guide.Packt Publishing.2012.1.26.

[4]王家林,王家俊,王家虎.Android高級開發實戰:UI、NDK與安全[M].北京:電子工業出版社,2013.

[5]蔣挺宇,王鵬,楊樹.基于中間語言的JNI泄漏檢查[J].計算機研究與發展,2013,52(4):898-906.

[6]Kaspersky.Mobile malware evolution part 5[EB/OL].2012. 02.28.

[7]劉康,王宣銀.基于單片機的以太網絡接入系統的實現及網絡性能分析[J].工業儀表與自動化裝置,2014(1):33-35.

[8]陳宏希,鄒益民.基于Java的Jess功能函數擴展方法[J].工業儀表與自動化裝置,2015(1):65-69.

Application of JNI technology in the network interaction

DONG Wei-wei
(Wuhan Research Institute of postal and Telecommunications,Wuhan 430000,China)

Android is an operating system that runs on an open Linux kernel.The upper application of Android adopts the programming language of Java,and the underlying core library of it using C/C++language.Therefore,it's very convenient for developers to call various API by Android SDK to realize all kinds of functions.Besides,Android supports cross-platform and cross-language operation as well,so you can easily call any program written in other languages by JNI technology to meet a variety of developing needs.

Android development;JNI technology;cross-platform;NDK

TN915.2

A

1674-6236(2016)06-0125-03

2015-05-18稿件編號:201505153

董偉巍(1992—),女,湖北武漢人,工程師。研究方向:通信軟件。

猜你喜歡
程序語言功能
也談詩的“功能”
中華詩詞(2022年6期)2022-12-31 06:41:24
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
讓語言描寫搖曳多姿
“程序猿”的生活什么樣
關于非首都功能疏解的幾點思考
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
累積動態分析下的同聲傳譯語言壓縮
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
我有我語言
主站蜘蛛池模板: 亚洲无码精品在线播放| 欧美成人看片一区二区三区 | 国产成人亚洲综合A∨在线播放| 亚洲中文字幕在线精品一区| 国产精品香蕉在线观看不卡| 亚洲高清国产拍精品26u| 伊人久久福利中文字幕| 欧美亚洲一区二区三区导航| 91精品国产无线乱码在线| 亚洲乱码视频| 亚洲另类国产欧美一区二区| 色综合中文| 99久久人妻精品免费二区| 久久黄色影院| 国产在线小视频| 国产成人综合在线观看| 女人18毛片一级毛片在线 | 嫩草影院在线观看精品视频| 亚洲欧洲日韩国产综合在线二区| 午夜精品久久久久久久99热下载| 91精品人妻互换| 免费无码又爽又刺激高| 亚洲第一成年免费网站| 亚洲国产日韩欧美在线| 老司机精品一区在线视频| 国产91视频观看| 在线无码私拍| 40岁成熟女人牲交片免费| 久久精品亚洲热综合一区二区| 色哟哟国产成人精品| 国禁国产you女视频网站| 九九久久精品免费观看| 波多野结衣中文字幕一区二区| 亚洲无码视频喷水| 精品福利视频网| 一级毛片免费观看久| 国产欧美日韩资源在线观看| 成人av专区精品无码国产| 国产精品久久久久鬼色| 夜夜高潮夜夜爽国产伦精品| 中文字幕永久在线看| 亚洲国产成人麻豆精品| 无码AV动漫| 亚洲最大综合网| 在线精品自拍| 国产极品美女在线| 久久成人18免费| 秋霞国产在线| 一本大道AV人久久综合| 国产aaaaa一级毛片| 精品三级在线| 国产福利免费视频| 最新国语自产精品视频在| 在线免费不卡视频| 免费看美女毛片| 99久久婷婷国产综合精| 国产福利免费视频| 国产 日韩 欧美 第二页| 亚洲欧洲日韩综合| 精品伊人久久久香线蕉| 国产精品不卡片视频免费观看| 久久特级毛片| 欧美亚洲综合免费精品高清在线观看| 亚洲免费三区| 亚洲av片在线免费观看| 午夜国产大片免费观看| 成人一级黄色毛片| 国产va免费精品| 亚洲高清无在码在线无弹窗| 精品99在线观看| 亚洲欧洲一区二区三区| 免费一级无码在线网站| 亚洲av无码成人专区| 久久毛片网| 精品福利视频网| 无码福利日韩神码福利片| 99久久精品久久久久久婷婷| a级免费视频| 亚洲人成网线在线播放va| 久久亚洲国产一区二区| 国产SUV精品一区二区6| 精品91自产拍在线|