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
我有我語言
主站蜘蛛池模板: 国产成人精品一区二区三区| 亚洲高清无码精品| 丁香六月激情综合| 亚洲乱码视频| 88av在线| 日韩欧美国产中文| 免费人成在线观看成人片| 久久精品最新免费国产成人| 宅男噜噜噜66国产在线观看| 在线观看国产网址你懂的| 亚洲91精品视频| 欧美特级AAAAAA视频免费观看| 亚洲精品va| 在线观看免费人成视频色快速| AV不卡无码免费一区二区三区| 孕妇高潮太爽了在线观看免费| 日本欧美一二三区色视频| 国产国产人在线成免费视频狼人色| 一边摸一边做爽的视频17国产| AV在线天堂进入| 欧美成人综合在线| 精品成人免费自拍视频| 国产专区综合另类日韩一区| 天天操天天噜| 2048国产精品原创综合在线| 国产欧美日韩综合一区在线播放| 日韩成人午夜| 国产内射一区亚洲| 国产国模一区二区三区四区| 欧美色视频在线| 99九九成人免费视频精品| 国产成人一区二区| 国产成人综合日韩精品无码首页| 久久综合成人| 亚洲国产精品美女| 成人免费视频一区二区三区| 真实国产精品vr专区| 亚洲欧美在线看片AI| 国产精品女在线观看| 久久久91人妻无码精品蜜桃HD| 国产精品思思热在线| 国产高清不卡| 亚洲二三区| 第九色区aⅴ天堂久久香| 国产v精品成人免费视频71pao| 国产黑丝一区| 久久精品最新免费国产成人| 欧美激情福利| 国产精品真实对白精彩久久| 毛片久久久| 狠狠干欧美| 中文字幕无码电影| 国产精品福利导航| 中文字幕无码中文字幕有码在线| 国产精品免费入口视频| 亚洲人成网址| 国产办公室秘书无码精品| 高清免费毛片| 一级毛片不卡片免费观看| 香蕉99国内自产自拍视频| 欧美亚洲国产精品第一页| 国产激爽爽爽大片在线观看| 国产专区综合另类日韩一区| 69综合网| 国产一级毛片yw| 国产女人18毛片水真多1| 国产欧美精品午夜在线播放| 丰满人妻一区二区三区视频| 国产欧美日韩视频怡春院| 国产国模一区二区三区四区| 欧美视频二区| 国产欧美日韩视频怡春院| 国产精品美乳| 国产精品嫩草影院av| 亚洲熟妇AV日韩熟妇在线| 亚洲美女一区二区三区| 蜜臀av性久久久久蜜臀aⅴ麻豆| 中字无码av在线电影| 久久国产拍爱| 91丝袜在线观看| 九九热视频精品在线| 亚洲精品麻豆|