矯豐霞 宋培培
【摘要】 Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動(dòng)設(shè)備。隨著Android系統(tǒng)的迅猛發(fā)展,它已經(jīng)成為全球范圍內(nèi)具有廣泛影響力的操作系統(tǒng)[1]。軟件包括客戶端和服務(wù)器端,屬于C/S結(jié)構(gòu)??蛻舳藢?shí)現(xiàn)于Android平臺(tái)的智能手機(jī)上,完成數(shù)據(jù)輸入、信息顯示的功能。服務(wù)器端由Linux主機(jī)作為服務(wù)器,負(fù)責(zé)數(shù)據(jù)的接收、處理和回傳以及通信服務(wù)。
【關(guān)鍵字】 Android Linux 編程軟件
一、需求分析和可行性分析
1、需求分析。對(duì)基于Android系統(tǒng)的C語言手機(jī)編程軟件的功能性需求分析如下:界面設(shè)計(jì)應(yīng)該簡(jiǎn)潔明了,使用戶操作方便。程序運(yùn)行的結(jié)果應(yīng)有清晰明確的顯示。操作按鈕和菜單設(shè)置合理。各模塊分區(qū)明確,相互切換方便。盡可能壓縮客戶端的大小。對(duì)基于Android系統(tǒng)的C語言手機(jī)編程軟件的非功能性需求分析如下:本論文研究開發(fā)的軟件是基于Android 2.2開發(fā),適用于Android 2.2及以上版本。安全性需求是在用戶沒有得到需要的結(jié)果時(shí)系統(tǒng)會(huì)盡可能的為用戶提供有用的錯(cuò)誤信息提示,使用戶可以很明確的知道錯(cuò)誤是出自何處該如何處理。
2、可行性分析。技術(shù)上的可行性可以從硬件的性能要求,軟件的性能要求和開發(fā)者自身技術(shù)要求等幾個(gè)方面去考慮。在硬件平臺(tái)方面:基于Android系統(tǒng)的C語言手機(jī)編程軟件的開發(fā)環(huán)境Eclipse可以基于Windows、Linux,具有良好的跨平臺(tái)兼容性。在軟件平臺(tái)方面:Android操作系統(tǒng)已經(jīng)成熟穩(wěn)定并且有大量的Android開發(fā)經(jīng)驗(yàn)。Android系統(tǒng)是一個(gè)開源的平臺(tái),對(duì)Java具有良好的兼容性。Java語言是一個(gè)非常成熟的面向?qū)ο笳Z言,它有著良好的可移植性、安全性,且支持可視化圖形界面[2]。
二、系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)
2.1系統(tǒng)架構(gòu)設(shè)計(jì)
基于Android系統(tǒng)的C語言手機(jī)編程軟件由客戶端和服務(wù)器組成,前臺(tái)和后臺(tái)實(shí)現(xiàn)分離,客戶端和服務(wù)器通過SOCKET進(jìn)行通信。系統(tǒng)架構(gòu)如圖1所示。
客戶端是在Android系統(tǒng)下實(shí)現(xiàn)用戶登錄及編寫代碼的功能,服務(wù)器是在Linux下使用GCC編譯器來編譯和運(yùn)行代碼,Mysql數(shù)據(jù)庫用來存儲(chǔ)用戶的用戶名和密碼以及代碼和運(yùn)行結(jié)果。
2.2 功能模塊設(shè)計(jì)
基于Android系統(tǒng)的C語言手機(jī)編程軟件應(yīng)具有如下功能:用戶可以在注冊(cè)登錄之后進(jìn)行個(gè)人設(shè)置操作,修改個(gè)人信息和登錄密碼。用戶可以編輯代碼,然后進(jìn)行編譯和運(yùn)行??梢詫?duì)代碼進(jìn)行保存,打開已經(jīng)保存過的代碼進(jìn)行修改。功能模塊如圖2所示。
三、系統(tǒng)實(shí)現(xiàn)
客戶端包含了一個(gè)編輯框,用來進(jìn)行C語言代碼的編寫,兩個(gè)按鈕實(shí)現(xiàn)編譯和運(yùn)行,菜單欄實(shí)現(xiàn)新建、保存、打開、退出。保存是將編寫完成的代碼以文本形式保存在本機(jī)上。打開是通過單項(xiàng)選擇消息框來選擇打開已經(jīng)保存的代碼。
客戶端與服務(wù)器socket連接:服務(wù)器端將端口打開,并將IP地址和傳輸所使用的協(xié)議進(jìn)行分配一個(gè)套接口的描述字及其所用的資源。int server_sockfd = socket(AF_INET, SOCK_STREAM, 0)。然后使用bind()將本地地址與套接字進(jìn)行捆綁,成功之后便可使用listen()來監(jiān)聽客戶端與服務(wù)器的連接情況。bind(server_sockfd, (struct sockaddr *)&server;_addr, sizeof(server_addr))。真正與客戶端連接是在accept()函數(shù)成功之后,accept(server_sockfd, (struct sockaddr *)&client;_addr,&len;)。在成功調(diào)用之后,從socket的等待連接隊(duì)列中抽取第一個(gè)連接,傳遞一個(gè)與socket同類的新的套接口并返回句柄。
數(shù)據(jù)處理:使用Linux的GNU編譯套件對(duì)數(shù)據(jù)進(jìn)行處理。對(duì)于數(shù)據(jù)回傳,即將編譯和運(yùn)行結(jié)果回傳到客戶端,首先要確定回傳的是哪一個(gè)文件夾,是error.txt還是sussess.txt,這里使用的是文件交換方法。選定之后,將文件寫入到buffer中,使用send回傳到socket。
四、結(jié)論
本設(shè)計(jì)主要完成的內(nèi)容是基于Android的編程軟件的設(shè)計(jì)與實(shí)現(xiàn)。包括在客戶端編輯代碼,保存和打開代碼以及將代碼發(fā)送到服務(wù)器端進(jìn)行編譯和運(yùn)行并將結(jié)果返回顯示到客戶端。雖然完成了基本的功能,但語法高亮等功能沒有實(shí)現(xiàn),還需不斷改進(jìn)完善。
參 考 文 獻(xiàn)
[1] 李剛:瘋狂Android講義[M],電子工業(yè)出版社,2013.3
[2] Bruce Eckel:Java編程思想[M],機(jī)械工業(yè)出版社,2013.8