国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

國產(chǎn)平臺下Eclipse對JNI快速開發(fā)支撐的設(shè)計與實現(xiàn)

2019-10-08 05:07:46詹秋芳王巖
無線互聯(lián)科技 2019年14期

詹秋芳 王巖

摘? ?要:Eclipse作為一款Java IDE開發(fā)環(huán)境,受到越來越多程序員的喜愛。但是Eclipse對JNI開發(fā)的支持并不友好,很多操作都需要切換到控制臺上輸入命令來完成,并且不支持對Native函數(shù)的調(diào)試,這些不利因素無形中增加了JNI開發(fā)的成本與難度。文章基于國產(chǎn)平臺,系統(tǒng)研究了Eclipse插件開發(fā)技術(shù),根據(jù)JNI開發(fā)的特點,結(jié)合用戶實際需求,在Eclipse中分別實現(xiàn)了JNI的可視化開發(fā)以及調(diào)試開發(fā),從Java工程到C工程無縫銜接,界面友好、操作便利,實現(xiàn)了Eclipse環(huán)境下對JNI快速開發(fā)的支撐,增強了Eclipse IDE的功能,豐富了國產(chǎn)平臺的軟件生態(tài)環(huán)境,對于國產(chǎn)平臺的產(chǎn)業(yè)化發(fā)展具有重要的學術(shù)意義及應用價值。

關(guān)鍵詞:國產(chǎn)平臺;Java本地接口;集成開發(fā)環(huán)境;Java開發(fā)工具;C/C++開發(fā)工具

Eclipse作為一款Java IDE開發(fā)環(huán)境,受到越來越多程序員的喜愛。Java是一類解釋性語言,具有跨平臺執(zhí)行的特性,但是該特性勢必會有部分性能損耗,因此,在開發(fā)過程中,如果有實時性的要求,那么通常會采用面向底層、速度更快的語言來實現(xiàn),JNI技術(shù)就是可以實現(xiàn)Java調(diào)用另一種語言的函數(shù)[1]。但是使用過JNI開發(fā)的人都知道,目前,Eclipse IDE對JNI并沒有提供可視化開發(fā)手段,程序員需要啟動終端,手動敲入命令執(zhí)行部分代碼,最后,仍需切回到Eclipse IDE調(diào)用驗證,而且Eclipse IDE對JNI的調(diào)試也沒有提供好的解決方案。

針對這一現(xiàn)狀,本文將研究“Eclipse JNI快速開發(fā)支撐技術(shù)”的設(shè)計與實現(xiàn),通過Eclipse插件技術(shù),實現(xiàn)JNI開發(fā)的可視化以及JNI Native函數(shù)調(diào)試的一體化,滿足JNI開發(fā)的便捷性、實用性的需求,優(yōu)化Eclipse IDE環(huán)境。

1? ? 國產(chǎn)平臺

國產(chǎn)平臺主要是指國產(chǎn)硬件、國產(chǎn)基礎(chǔ)軟件以及其他國產(chǎn)應用軟件[2]。在基于增強國產(chǎn)平臺自主可控能力的共識下,大力推進國產(chǎn)平臺產(chǎn)業(yè)化發(fā)展,積極與產(chǎn)業(yè)上下游廠商密切合作,構(gòu)建完善的國產(chǎn)軟硬件生態(tài)系統(tǒng),包括芯片、硬件、軟件、整機系統(tǒng)各個環(huán)節(jié),將其應用于通用服務(wù)器、大數(shù)據(jù)、網(wǎng)絡(luò)安全、安全存儲、工業(yè)控制等領(lǐng)域[3]。目前,無論是國產(chǎn)硬件還是國產(chǎn)軟件,部分關(guān)鍵技術(shù)尚未掌握,自主核心技術(shù)難以為繼,既需要耗費大量精力解決硬件適配問題,又需要持續(xù)滿足應用開發(fā)單位對最新軟件開發(fā)工具的需要,還需要為用戶提供最新、最易用的應用軟件。國產(chǎn)平臺生態(tài)環(huán)境僅解決有無問題,離可用、好用都有一定的距離。

2? ? Eclipse及JNI開發(fā)介紹

Eclipse是一個集成開發(fā)環(huán)境,為用戶提供可視化的開發(fā)手段,該開發(fā)環(huán)境初衷主要支持Java等各種應用的開發(fā),可以采用插件的技術(shù)來增強Eclipse框架的支撐能力[4]。JNI是Java標準平臺中的一個重要功能,彌補了Java與平臺無關(guān)這一重大不足,在Java實現(xiàn)跨平臺的同時,也能與其他語言(如C,C++)的動態(tài)庫進行交互,給其他語言發(fā)揮優(yōu)勢的機會[5]。使用JNI進行開發(fā)的優(yōu)勢有以下幾點。

2.1? 運行效率提高

目前,國產(chǎn)平臺的CPU頻率明顯低于X86架構(gòu),當硬件性能暫時無法提升時,對于Java應用來說,實時性要求高的任務(wù)可以用C/C++語言來實現(xiàn),Java和C/C++之間可以采用JNI來實現(xiàn)通信,這樣也能比較好地解決Java應用效率低下的問題。

2.2? 內(nèi)存管理利用率高

Java的內(nèi)存全部由虛擬機來管理,C/C++語言由程序員來管理,可以靈活地操作內(nèi)存,內(nèi)存利用率會高很多。

2.3? 防破解

由于Native函數(shù)采用C/C++語言來實現(xiàn),會編譯成二進制機器代碼,所以對于產(chǎn)品的核心技術(shù)采用JNI來實現(xiàn),這樣不易破解。

如果使用了JNI,那么Java程序就喪失了跨平臺的優(yōu)點,對于JNI Native函數(shù)部分的代碼,不同平臺架構(gòu)往往需要重新編譯,所以Java應用程序是否使用JNI技術(shù)需要考慮業(yè)務(wù)需求,是效率優(yōu)先還是部署為重。

通常情況JNI開發(fā)的步驟如下:

(1)在Java文件中編寫Native調(diào)用接口,形如:

(2)定義對應的JNI Native函數(shù)的實現(xiàn)。

①通過命令javah,生成Native函數(shù)對應的頭文件(.h)。

②根據(jù)生成的頭文件(.h)創(chuàng)建一個對應的源文件(.cpp),文件中包含Native函數(shù)實現(xiàn),用戶可以在函數(shù)內(nèi)實現(xiàn)具體業(yè)務(wù)需求。

③編譯源文件(.cpp),生成與架構(gòu)相關(guān)的動態(tài)庫。

④在Java程序中通過JNI直接調(diào)用Native函數(shù)以驗證功能是否正常。

在上面的步驟中,①和③均需要切換到命令行終端上運行,②需要用戶手動創(chuàng)建和編輯源文件。由此可見,目前在Eclipse IDE環(huán)境下進行JNI開發(fā)異常繁瑣。本文提出的JNI快速開發(fā)支撐技術(shù),很好地解決了這個問題。

3? ? JNI快速開發(fā)支撐技術(shù)的實現(xiàn)方案

JNI快速開發(fā)支撐包括“可根據(jù)Native函數(shù)接口自動創(chuàng)建相應C/C++工程”“在Eclipse IDE環(huán)境中支持Java主程序?qū)ative函數(shù)的調(diào)試”兩部分。這兩部分功能均可作為一個獨立的程序模塊,采用Eclipse插件技術(shù)來實現(xiàn),能夠動態(tài)地添加和自由地刪除,比較方便集成到Eclipse IDE環(huán)境中。

3.1? JNI可視化開發(fā)

JNI可視化開發(fā)的功能可概括為:(1)由Native函數(shù)生成頭文件(.h)及源文件(.cpp)框架。(2)創(chuàng)建可生成動態(tài)庫的C/C++工程,且工程中需包含相應源文件。(3)C/C++工程編譯后得到的動態(tài)庫能夠被Java主程序自動加載。上述功能實現(xiàn)起來表現(xiàn)為一個連續(xù)且完整的過程,實現(xiàn)過程如圖1所示。

打開Eclipse工程瀏覽界面,用戶單擊Java文件時,通過菜單或按鈕,激活JNI可視化開發(fā)插件提供的Native函數(shù)的轉(zhuǎn)換功能,生成Native函數(shù)接口的頭文件(.h)。用戶可選擇生成的頭文件(.h),插件根據(jù)頭文件自動創(chuàng)建相應C/C++工程,且工程中包含相應源文件(.cpp)框架,該框架根據(jù)Native頭文件的函數(shù)聲明來實現(xiàn),用戶僅需實現(xiàn)業(yè)務(wù)邏輯即可。C/C++工程編譯后產(chǎn)生的動態(tài)庫文件生成到指定路徑下,原Java工程可自動加載該路徑下的動態(tài)庫。

3.2? JNI調(diào)試開發(fā)

JNI調(diào)試開發(fā)是指在Eclipse IDE環(huán)境下,Java主程序調(diào)試運行到Native函數(shù)時,能夠自動啟動GDB進程調(diào)試Native C/C++函數(shù)主體,并且在IDE環(huán)境中提供堆棧、變量、寄存器等調(diào)試信息顯示窗口供用戶診斷。JNI調(diào)試開發(fā)包括調(diào)試環(huán)境設(shè)置模塊、調(diào)試通信模塊以及調(diào)試信息顯示模塊。調(diào)試環(huán)境設(shè)置模塊需要設(shè)置C/C++源文件位置、C/C++動態(tài)庫和調(diào)試信息路徑以及GDB Attach模式設(shè)置等。調(diào)試通信模塊實現(xiàn)Java調(diào)試器與GDB調(diào)試進程之間的通信。調(diào)試信息顯示模塊用來顯示變量、寄存器、加載模塊以及堆棧信息。

如果沒有安裝JNI調(diào)試開發(fā)插件,那么在調(diào)試Java主程序時,遇到Native函數(shù)的調(diào)用,通常情況下調(diào)試流程是沒有辦法進入到Native C/C++函數(shù)主體內(nèi)部的。在JNI調(diào)試開發(fā)插件的支撐下,調(diào)試運行到Native函數(shù)調(diào)用處時,將會啟動GDB進程,并且附加到正在調(diào)試運行的Java主程序進程空間中[6]。GDB進程在啟動的同時,會加載已經(jīng)配置好的Native C/C++函數(shù)的動態(tài)庫及調(diào)試信息,定位Native C/C++函數(shù)的源文件。加載完成后,GDB進程暫停在Native C/C++函數(shù)入口處,此時,可激活相應的調(diào)試堆棧,調(diào)試狀態(tài)將會從Java主程序空間切換到Native C/C++函數(shù)空間,此時,Java主程序處于等待狀態(tài)。接著,可以遵循GDB的調(diào)試命令調(diào)試Native C/C++函數(shù)主題。Native C/C++函數(shù)調(diào)試結(jié)束后,需要斷開GDB進程與Java主程序的連接,調(diào)試狀態(tài)會重新返回到Java主程序上,此時,Java主程序?qū)ative C/C++函數(shù)的調(diào)試過程才結(jié)束。帶有Native函數(shù)的Java主程序調(diào)試流程如圖2所示。

4? ? 結(jié)語

本文重點論述了在國產(chǎn)平臺下Eclipse集成開發(fā)環(huán)境對JNI快速開發(fā)支撐技術(shù)的實現(xiàn)方案。首先,介紹了當前國產(chǎn)平臺下的軟件生態(tài)環(huán)境現(xiàn)狀。其次,指出了目前JNI開發(fā)的現(xiàn)狀,提出了JNI快速開發(fā)支撐方案,滿足JNI開發(fā)的便捷性、實用性的需求,對繁榮國產(chǎn)平臺的產(chǎn)業(yè)化發(fā)展具有重要的學術(shù)意義及應用價值。

[參考文獻]

[1]任俊偉,林東岱.JNI技術(shù)實現(xiàn)跨平臺開發(fā)的研究[J].計算機應用研究,2005(7):180-184.

[2]程健,吳蔚.國產(chǎn)計算平臺在指揮控制系統(tǒng)中的應用研究[J].自動化與信息工程,2011(3):41-44.

[3]倪光南.發(fā)展自主可控的信息技術(shù)和產(chǎn)業(yè)[J].電子產(chǎn)品世界,2015(10):25-26.

[4]張旻,麥先根,賈璐.Eclipse插件開發(fā)技術(shù)淺探[J].航空計算技術(shù),2006(6):17-18.

[5]董偉巍.JNI技術(shù)在網(wǎng)絡(luò)交互中的應用[J].電子設(shè)計工程,2016(6):125-127.

[6]蘭利東,喬永強.GDB遠程調(diào)試環(huán)境的設(shè)計與實現(xiàn)[J].單片機與嵌入式系統(tǒng)應用,2005(10):22-25.

自治县| 左云县| 莲花县| 罗田县| 新巴尔虎左旗| 卢氏县| 嘉荫县| 南部县| 镇赉县| 玉门市| 安图县| 资阳市| 隆尧县| 昆山市| 舞钢市| 六盘水市| 溧水县| 潜山县| 仙游县| 龙海市| 乌拉特中旗| 当雄县| 达孜县| 乡城县| 鹿邑县| 五河县| 万荣县| 玛多县| 平江县| 石台县| 宣武区| 南乐县| 广西| 宁乡县| 丰原市| 六安市| 自贡市| 托里县| 娱乐| 东海县| 镇江市|