




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、基于Android平臺的串口通信實現(xiàn)摘要:串口在數(shù)據(jù)通信中應用廣泛,但AndridSDK指定使用Java作為第三方應用開發(fā)語言,這給語言實現(xiàn)串口應用帶來了困難。雖然GgleAndrid已經(jīng)發(fā)布了NDKNativeDevelpentKit,原生態(tài)開發(fā)包,支持開發(fā)者用/+語言開發(fā)Andrid程序,但目前官方提供的技術(shù)指導比擬簡單。通過開發(fā)一個Andrid下串口通信應用實例,詳細介紹了AndridNDK的開發(fā)流程,幫助開發(fā)人員快速的完成平臺搭建。關(guān)鍵詞:Andrid;NDK;JNI;SDK;串口中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2022)13-2983-03Seria
2、luniatinBasedAndridPlatfrJINZhi-yi,ZHANGJi(Vehilellege,TngjiUniversity,Shanghai202204,hina)Abstrat:Serialuniatinisidelyusedindatauniatin,buttheAndridSDKusestheJavalanguageasadesignatedthird-partyappliatindevelpent,hihakesitdiffiulttahieveserialappliatinsithlanguage.AlthughGgleAndridhasreleasedNDK(Na
3、tiveDevelpentKit)hihsupprtsthedevelpertdevelpAndridprgraith/+language,buttheffiialtehnialguidanehasbeenrelativelybrief.ThrughthedevelpentfserialuniatinunderanAndridplatfrasanappliatinexaple,artilegivesathrughlydesriptinftheAndridNDKdevelpentpressthatanhelpdevelpersquiklybuildplatfrs.Keyrds:Andrid;ND
4、K;JNI;SDK;serialAndrid是Ggle推出的基于Linux的開源操作系統(tǒng),是一個專門針對挪動設備設計的軟件平臺,包括操作系統(tǒng)、中間件和一些關(guān)鍵應用。它的軟件架構(gòu)包含四個層次,從高到低分別為應用層、應用框架層、系統(tǒng)運行層和linux內(nèi)核層,如圖1所示。每一個Andrid應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。Andrid發(fā)布初期,Ggle就表示其虛擬機Dalvik支持JNI編程方式,也就是第三方應用完全可以使用JNI調(diào)用自己的動態(tài)庫,但Ggle官方并沒有明確表示支持開發(fā)者使用這種方法。終于在2022年6月,GgleAndrid發(fā)布了NDK,它支持開
5、發(fā)者使用/+語言開發(fā)Andrid程序。作為AndridSDK的一個附加組件提供,開發(fā)者必須先安裝AndridSDK方可使用NDK。NDK的目的是為了增加代碼的重用性及加快程序的運行速度,這有利于開發(fā)者從其他系統(tǒng)上移植軟件到Andrid平臺。1AndridNDK簡介在Andrid上應用程序的開發(fā)大局部基于Java語言來實現(xiàn)。要使用或是+的程序或庫,就需要使用NDK來實現(xiàn)。NDK是NativeDevelpentKit的簡稱。它是一個工具集,集成了Andrid的穿插編譯環(huán)境,并提供了一套比擬方便的akefile,可以幫助開發(fā)者快速開發(fā)或是+的動態(tài)庫,并自動的將s動態(tài)庫和java程序打包成apk,在A
6、ndrid上運行。有兩個理由使用NDK:一是合理的重用現(xiàn)有的代碼;二是在程序中某些關(guān)鍵的局部進步執(zhí)行效率。AndridNDK目前作為AndridSDK的一個附加組件提供,開發(fā)者須先安裝AndridSDK方可使用NDK。在inds平臺下進展NDK開發(fā)通常會采用ygin。ygin是一套可以運行在inds平臺上的UNIX/Linux模擬器。運行ygin后會出現(xiàn)一個類似indsD的Shell環(huán)境界面,可以使用大局部Linux軟件和功能。使用它我們可以方便的在inds平臺編譯出Linux平臺的庫文件或應用程序。2安裝和配置NDK開發(fā)環(huán)境2.1安裝NDK首先要完好安裝SDK,盡量晉級至最新版本,文中使用2
7、.1版本的SDK。然后下載NDK,官網(wǎng)有三個版本分別是inds、aSX(intel)、Linux32/64(x86),下載后解壓即可使用。文中使用inds版本的NDK,版本為andrid-ndk-r5。將它解壓到某個目錄下,文中我們將NDK安裝到D:andridandrid-ndk-r5目錄中。2.2安裝ygin首先去ygin官網(wǎng)下載網(wǎng)絡安裝程序,下載下來以后點擊直接運行。安裝過程中最關(guān)鍵的是選擇需要安裝的包,為支持AndridNDK的開發(fā),選擇Default安裝后再安裝以下模塊autnf2.1、autake1.10、binutils、g-re、g4-re、gdb、pre、pre-devel、
8、GNUak。下面開場將AndridNDK配置到y(tǒng)gin中。運行ygin,修改ygin目錄下/he/usrnae的.bash_prfile文件,在文件尾部參加如下代碼,NDK=/ygdrive/d/andrid/andrid-ndk-r5exprtNDK然后重新啟動ygin。輸入d$NDK,假如輸出上面配置的/ygdrive/e/andrid-ndk-r5信息,那么說明環(huán)境變量設置成功了。接下來就可以用ygin來編譯我們的NDK代碼了。3AndridNDK開發(fā)實例開發(fā)實例是一個Andrid平臺上的收音機程序,該應用通過調(diào)用串口API與外圍收音機芯片通信,進而控制收音機芯片完成搜臺、顯示等功能。A
9、ndridNDK開發(fā)一般有以下步驟:1)JNI接口設計;2)使用/+實現(xiàn)本地方法;3)生成動態(tài)鏈接庫;4)將動態(tài)鏈接庫復制到Java工程,生成.apk文件。首先,創(chuàng)立一個NDK工程,然后在這個文件夾下建立jni和sr兩個目錄,jni用來存放我們的文件,sr是調(diào)用庫的Java接口文件。接著創(chuàng)立jni/SerialPrt.,該文件的主要作用是完成串口的翻開和關(guān)閉。關(guān)鍵代碼如下:JNIEXPRTjbjetJNIALLJava_andrid_serialprt_SerialPrt_pen(JNIEnv*env,jbjetthiz,jstringpath,jintbaudrate)/*peningdev
10、ie*/nsthar*path_utf=(*env)-GetStringUTFhars(env,path,ispy);LGD(peningserialprt%s,path_utf);fd=pen(path_utf,_RDR|_DIRET|_SYN);LGD(pen()fd=%d,fd);(*env)-ReleaseStringUTFhars(env,path,path_utf);/*nfiguredevie*/strutterisfg;fakera(fg);fsetispeed(fg,speed);fsetspeed(fg,speed);在文件中,函數(shù)名這樣定義:jbjetJNIALLJava
11、_andrid_serialprt_SerialPrt_pen,這個是JNI的標準,定義需要按照如下格式:Java_pakagenae_lassnae_ethdnae接著創(chuàng)立文件jni/Andrid.k.這個文件是我們本地代碼的akefile。文件內(nèi)容如下:LAL_PATH:=$(ally-dir)inlude$(LEAR_VARS)LAL_DULE:=serial_prtLAL_SR_FILES:=SerialPrt.LAL_LDLIBS:=-llginlude$(BUILD_SHARED_LIBRARY)LAL_PATH:=$(ally-dir)這句用來指定編譯的途徑通過調(diào)用宏y-dir獲
12、取到當前工作的途徑。inlude$(LEAR_VARS)LEAR_VARS這個變量是編譯系統(tǒng)提供的用來指明一個GNUakefile文件添加這句主要的目的是清理所有的LAL_XXX,比方LAL_DULE、LAL_SR_FILES等。在每個新模塊的開場處需要添加這句。LAL_DULE:=serial_prt這句定義了模塊名稱,將來編譯的庫或者可執(zhí)行程序就以此命名。假如編譯的是動態(tài)庫或者靜態(tài)庫,那么庫名就是libserial_prt.s或者libserial_prt.a。需要注意的是系統(tǒng)會在生成動態(tài)庫或者靜態(tài)庫的時候自動添加lib的前綴。LAL_SR_FILES:=SerialPrt.是列出需要編譯
13、的源碼文件名。這里不需要列出頭文件和被包含文件,因為編譯系統(tǒng)會自動為你添加。inlude$(BUILD_SHARED_LIBRARY)這句說明將來產(chǎn)生的庫是共享庫即動態(tài)鏈接庫。接著,我們就可以在ygin下編譯生成庫文件了。如圖2所示,進入到工程目錄下,運行ndk-build命令,生成了名為libserial_prt.s的文件。將該文件安裝到工程目錄下的libsareabi目錄中。然后在sr目錄下編寫的serialprt.java文件,該文件用于JNI接口調(diào)用。關(guān)鍵代碼如下:publilassSerialPrt/*pentheserialprt*/Fd=pen(devie.getAbsluteP
14、ath(),baudrate);privatenativestatiFileDesriptrpen(Stringpath,intbaudrate);publinativevidlse();statiSyste.ladLibrary(serial_prt);privatenativestatiFileDesriptrpen(Stringpath,intbaudrate)這句申明,帶有native關(guān)鍵字,說明該方法是本地方法。Syste.ladLibrary(serial_prt)這句就是用來加載我們的動態(tài)庫的。上面聲明方法的詳細實現(xiàn)就在我們加載的庫中。在完成了上述工作后,我們就可以針對詳細應用來
15、使用串口完成數(shù)據(jù)通信了。文中通過按鍵搜臺,并顯示出詳細頻段。界面布局采用xl文件來聲明,主要包括兩個Buttn和一個TextVie視圖。在Buttn上添加了按鍵響應,當按下Buttn時通過串口發(fā)送調(diào)頻信號。bfreard.setnlikListener(neVie.nlikListener()publividnlik(Viev)tryutputStrea.rite(+);utputStrea.rite(n);ath(IExeptine)e.printStakTrae(););TextVie用于接收串口信息,顯示調(diào)頻。prtetedvidnDataReEived(finalbytebuffer,
16、finalintsize)runnUiThread(neRunnable()publividrun()if(Reeptin!=null)Reeptin.setText(neString(buffer,0,size););同時添加了enu,當按下enu鍵時可以選擇退出或關(guān)于。verridepublibleannreateptinsenu(enuenu)enu.add(0,0,0,R.string.abut);enu.add(0,1,1,R.string.exit);returntrue;verridepublibleannptinsIteSeleted(enuIteite)intite_id=ite.getIteId();sith(ite_id)ase0:ase1:ainenu.this.finish();break;returntrue;編譯運行該工程,就可以生成apk文件了。將apk文件和libserial_prt.s安裝到Andrid平臺后,運行該應用程序,運行結(jié)果如下圖。4結(jié)論中國論文聯(lián)盟.Ll.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/IEC 24741:2024 EN Information technology - Biometrics - Overview and application
- 【正版授權(quán)】 ISO 24322:2024 EN Timber structures - Methods of test for evaluation of long-term performance - Part 1: Wood-based products in bending
- 【正版授權(quán)】 ISO 5284:2025 EN Conveyor belts - List of equivalent terms
- 【正版授權(quán)】 ISO 22915-1:2024 EN Industrial trucks - Verification of stability - Part 1: General
- 2025年度高新技術(shù)產(chǎn)業(yè)園區(qū)運營承包經(jīng)營合同
- 生物技術(shù)課程導入計劃
- 各行各業(yè)主管的共性與差異計劃
- 校外美術(shù)實踐基地建設計劃
- 老年醫(yī)學科醫(yī)生工作計劃
- 2025年灌裝機系列設備合作協(xié)議書
- 艾默生HipulseUPS操作手冊
- 愛心樹(繪本)
- NPI管理流程(精)
- 色卡 對照表 PANTONE-CMYK
- 深圳水管理體制改革的思考和建議
- 蘇教版六年級上冊計算題練習大全(經(jīng)典)
- 五金英語詞匯盤點
- 內(nèi)容講義說明案例nxt pop trainning
- 消毒供應中心打包區(qū)教學要點 ppt課件
- 現(xiàn)代科學技術(shù)概論復習重點
- 年“職工書屋”示范點申報材料(2篇總結(jié)匯報報告參考)
評論
0/150
提交評論