




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、手機(jī)軟件開發(fā)之a(chǎn)ndroid程序開發(fā)1手機(jī)軟件的運(yùn)行環(huán)境1.1概述手機(jī)可以被看作袖珍的計(jì)算機(jī)。它有cpu、存儲(chǔ)器(flash、ram)、輸入輸出設(shè)備(鍵 盤、顯示屏、usb和串口)。它還有一個(gè)更重要的i/o設(shè)備,那就是空中接口。手機(jī) 通過空中接口協(xié)議(例如gsm、cdma、phs等)和基站通信,既可以傳輸語音、也 可以傳輸數(shù)據(jù)。手機(jī)的cpu般不是獨(dú)立的芯片,而是基帶處理芯片的一個(gè)單元,也稱作cpu核?;?帶處理芯片是手機(jī)的核心,它不僅包含cpu核、dsp核這些比較通用的單元,還包含 通信協(xié)議處理單元o通信協(xié)議處理單元和手機(jī)協(xié)議軟件一起完成空中接口要求的通信功 能。隨著芯片技術(shù)的不斷發(fā)展,越來越
2、多的外圍電路可以被集成到基帶處理芯片中,例如 bap,即基帶模擬處理器。這樣手機(jī)才可能越做越小、越做越便宜。1.2單cpu和雙cpu很多手機(jī)只有一個(gè)cpu,也就是基帶處理芯片中的cpu核。在這個(gè)cpu上既要跑通 信協(xié)議,又要實(shí)現(xiàn)用戶界面(稱作ui或mmi) o當(dāng)然dsp會(huì)分擔(dān)一些計(jì)算量繁重的工 作,例如語音編解碼、安全層的各種算法等。在市場(chǎng)推動(dòng)下,手機(jī)功能在不斷發(fā)展。攝像頭、mp3.藍(lán)牙這些功能可以依靠硬件,對(duì) cpu的壓力還不是很大,但jqvq虛擬機(jī)、嵌入式瀏覽器等應(yīng)用軟件就會(huì)對(duì)cpu資源 有較高的要求。單cpu的首要任務(wù)是完成通信協(xié)議。通信協(xié)議軟件有著很精確的定時(shí)要求,如果這個(gè) cpu還要
3、兼顧很多應(yīng)用軟件的話,就難免吃力。于是雙cpu手機(jī)應(yīng)運(yùn)而生。顧名思義,雙cpu手機(jī)就是有兩個(gè)cpu的手機(jī),一個(gè)cpu專心把通信協(xié)'議做好,另 個(gè)cpu負(fù)責(zé)ui、java虛擬機(jī)、嵌入式瀏覽器等應(yīng)用功能。兩個(gè)cpu可以做在一個(gè) 芯片里面,也可以分開。市場(chǎng)上的實(shí)際情況是,很多手機(jī)設(shè)計(jì)公司(design house)沒有基帶處理芯片的開發(fā) 能力,他們購買國外公司的手機(jī)模塊,自己在外面再加一塊cpu。模塊跑通信協(xié)議, 自己加的cpu跑ui和應(yīng)用軟件,兩者通過串行口通信。很多design house也會(huì)購買 國外方案商的開發(fā)板級(jí)方案,自己做pcb、軟件上改改ui和外設(shè)驅(qū)動(dòng)。市場(chǎng)上的智能手機(jī)基本上全
4、是雙cpu方案,什么windows ces smartphone windowsmobilex symbian嵌入式linux全是運(yùn)行在第二塊cpu上的。這些商業(yè)操 作系統(tǒng)無法和無線通信協(xié)議軟件集成到一塊cfu上。雙cpu的手機(jī)功能比較多,但 它們一般體積大,耗電多,成本高。現(xiàn)在市場(chǎng)上的大部分手機(jī)還是單cpu的。目前的大部分手機(jī)應(yīng)用,例如jovo、brew、wap、郵件、攝像頭、閃存、mp3、藍(lán) 牙,在單cpu方案里都能實(shí)現(xiàn)。我認(rèn)為不管3g、4g如何發(fā)展,小巧、實(shí)用、低成 本的單cpu方案總會(huì)占據(jù)較大的市場(chǎng)份額。微軟在單cpu方案的手機(jī)市場(chǎng)還沒有立足 之地,又怎么談的上什么引領(lǐng)方向呢?本文主要
5、介紹單cpu手機(jī),大多數(shù)論述也適用于雙cpu方案的通信cpuo1.3 3g 和 4g3g和4g是指第三代、第四代無線通信技術(shù),對(duì)手機(jī)而言,它們改進(jìn)的是空中接口的 效率,空中接口能以更大的帶寬傳送數(shù)據(jù)。通過手機(jī)無線上網(wǎng)的速度會(huì)更快。這和話音 業(yè)務(wù)、手機(jī)應(yīng)用軟件沒有直接的聯(lián)系。當(dāng)然,手機(jī)的嵌入式數(shù)據(jù)業(yè)務(wù)由于更高的帶寬,會(huì)產(chǎn)生更多的可能性。不過這些可能性 的實(shí)現(xiàn)還是會(huì)受到手機(jī)輸入慢、顯示屏小等條件的制約。2手機(jī)軟件的組成2.1概述手機(jī)軟件和pc機(jī)軟件一樣從中斷向量表開始,因?yàn)楸容^小,看上去更加清晰。中斷向 量表的第一個(gè)跳轉(zhuǎn)指令當(dāng)然是跳到復(fù)位的處理程序,后面是中斷處理、錯(cuò)誤處 理的跳 轉(zhuǎn)指令。一上電,
6、手機(jī)就跳轉(zhuǎn)到復(fù)位的處理程序,開始檢查內(nèi)存、初始化c運(yùn)行環(huán)境, 然后創(chuàng)建第一個(gè)任務(wù)。這個(gè)任務(wù)會(huì)按順序創(chuàng)建、啟動(dòng)其它任務(wù)。絕大多數(shù)手機(jī)程序都 是多任務(wù)的,但也有一些小靈通的協(xié)議棧是單任務(wù)的,沒有操作系統(tǒng),它們的主程序輪 流調(diào)用各個(gè)軟件模塊的處理程序,模擬多任務(wù)環(huán)境。手機(jī)軟件可以粗略地分成啟動(dòng)模塊、操作系統(tǒng)、協(xié)議棧、數(shù)據(jù)業(yè)務(wù)、本地存儲(chǔ)、驅(qū)動(dòng)程 序、用戶界面和其它應(yīng)用。啟動(dòng)模塊前面已經(jīng)說過了,下面簡(jiǎn)單介紹其它部分。2.2操作系統(tǒng)操作系統(tǒng)在手機(jī)軟件只占很小一部分。它的主要功能就是提供多任務(wù)調(diào)度、通信機(jī)制。 有的操作系統(tǒng)會(huì)提供動(dòng)態(tài)內(nèi)存分配,定時(shí)函數(shù),但這些都不是必須的。例如需要?jiǎng)討B(tài)內(nèi) 存分配的模塊,可以自
7、己管理一個(gè)內(nèi)存池,這樣更易于隔離模塊和預(yù)測(cè)內(nèi)存需求。大多數(shù)手機(jī)的操作系統(tǒng)都是一個(gè)很小的內(nèi)核,例如rex、hios等。高通rex的源代碼 連c代碼加匯編也不過一千多行,編譯后不過是2、3k的代碼量。而一般手機(jī)軟件有 幾百到上千個(gè)源文件、超過一百萬行的代碼。2.3協(xié)議棧協(xié)議棧是手機(jī)軟件最復(fù)雜的部分,它的復(fù)雜性在于它和基帶處理芯片的設(shè)計(jì)密切相關(guān)。 只有具備芯片設(shè)計(jì)能力的企業(yè)才可能開發(fā)協(xié)議棧。協(xié)議棧會(huì)使用基帶處理芯片的所有資 源。2.4數(shù)據(jù)業(yè)務(wù)數(shù)據(jù)業(yè)務(wù)主要有兩種:在前一種,手機(jī)相當(dāng)于一個(gè)調(diào)制解調(diào)器,pc機(jī)通過手機(jī)上網(wǎng), 網(wǎng)絡(luò)協(xié)議全在pc機(jī)上,手機(jī)提供數(shù)據(jù)鏈路。另一種就是嵌入式數(shù)據(jù)業(yè)務(wù),手機(jī)內(nèi)部包 含t
8、cp/ip/ppp等協(xié)議,有時(shí)還要實(shí)現(xiàn)http和嵌入式瀏覽器。2.5本地存儲(chǔ)手機(jī)都有本地存儲(chǔ)功能,存儲(chǔ)電話本、短消息、用戶設(shè)定等。一般手機(jī)都有一個(gè)基于flash 的文件系統(tǒng)。早期的手機(jī)存儲(chǔ)是基于eeprom的。2.6驅(qū)動(dòng)程序硬件驅(qū)動(dòng)一般指外設(shè)驅(qū)動(dòng),不過有的外設(shè)已經(jīng)被集成到基帶處理芯片中了。驅(qū)動(dòng)程序包 括鍵盤、電源管理模塊、lcd、flash、rtc、串口、usb、sim卡或uim卡、射頻驅(qū)動(dòng)2.7用戶界面用戶界面(ui)又稱作人機(jī)界面(mmi),它負(fù)責(zé)和用戶的交互,在必要的時(shí)候調(diào)用其 它模塊的功能。除了手機(jī)的必備功能外,用戶界面也可能包含一些相對(duì)獨(dú)立的應(yīng)用程序, 例如日程表、游戲等。2.8其它
9、應(yīng)用其它應(yīng)用包括java虛擬機(jī)、wap瀏覽器、郵件軟件等,是一些比較大,又相對(duì)獨(dú)立 的應(yīng)用模塊。基本上講完了。大家肯定看得挺沒意思吧。這些程序和微軟的longhorn metedata有什么關(guān)系呢?手機(jī)程序絕大部分是用c語言寫的。但對(duì)于做應(yīng)用軟件的程序員要求具備面向?qū)ο?、設(shè)計(jì)模式的思維能力,然后用c語言實(shí)現(xiàn)岀來。高通的brew就是用c語言硬生生地模仿c+,弄出很多奇怪的宏。一般應(yīng)用軟件的開發(fā)不用這么死板,但對(duì)各種軟件設(shè)計(jì)方法的了解還是必要的。3手機(jī)的核心我術(shù)手機(jī)的核心技術(shù)是芯片和協(xié)議棧,兩者是密不可分的。芯片設(shè)計(jì)需要協(xié)議棧來驗(yàn)證,協(xié) 議棧必須充分發(fā)揮出芯片的功能。芯片的cpu核、dsp核都可以
10、買到現(xiàn)成的單元,但 通信協(xié)議部分就需要自己設(shè)計(jì)了。手機(jī)比較難做好的是耗電量、惡劣信號(hào)環(huán)境的性能等。4第三方軟件4.1原理“第三方軟件”這個(gè)詞的含義比較寬泛。本文用它來指代不是硬編碼在手機(jī)里,而是可 以通過數(shù)據(jù)線或網(wǎng)絡(luò)下載到手機(jī)上,可以裝載、運(yùn)行,也可以刪除的軟件。前面講到的軟件都是完整程序的各個(gè)部分。這些部分會(huì)被放到一起編譯,產(chǎn)生一個(gè)二進(jìn) 制文件,通過jtag 口(升級(jí)時(shí)可以用串口)下載到手機(jī)的flash中。手機(jī)一上電,就 會(huì)從指定地址開始運(yùn)行。這個(gè)地址的內(nèi)容就是跳轉(zhuǎn)到復(fù)位處理程序的跳轉(zhuǎn)指令。哈哈, 又講回頭了。第三方軟件是指手機(jī)可以通過數(shù)據(jù)線或者網(wǎng)絡(luò)下載一些可執(zhí)行文件到文件系統(tǒng)中。然后 有一
11、個(gè)裝載器可以執(zhí)行這些文件。這樣第三方就可以開發(fā)一些應(yīng)用程序,下載到手機(jī)中 來擴(kuò)充手機(jī)功能。這些可執(zhí)行文件現(xiàn)在主要有兩種格式:jovo程序和brew程序。jovo程序需要jovq 虛擬機(jī)裝載運(yùn)行。brew程序是一個(gè)很奇怪的東西,它實(shí)際就是用與編譯手機(jī)程序相同 的編譯器編譯出來的目標(biāo)代碼。這些目標(biāo)代碼必須是可以重新定位的,即不能包含全局 和靜態(tài)變量。裝載器將程序?qū)?zhí)行權(quán)傳給給brew程序,一種聽上去更安全的說法是調(diào)用brew程 序的入口函數(shù)。這個(gè)入口函數(shù)的位置在文件中是固定的。裝載器在調(diào)用brew程序的 入口函數(shù)時(shí)會(huì)傳入一個(gè)地址。通過這個(gè)地址,brew程序能夠順藤摸瓜,找到系統(tǒng)提供 的各種api的
12、地址,它通過這些api訪問手機(jī)的顯示、通信等功能。java程序基本上是平臺(tái)無關(guān)的,針對(duì)各種平臺(tái)設(shè)計(jì)的java虛擬機(jī)隔離了平臺(tái)的大部分 特性,除了廠家特意提供的一些oem功能。brew程序顯然是平臺(tái)相關(guān),換一個(gè)cpu, 就不認(rèn)識(shí)原來的目標(biāo)碼了。4.2其它除了 jovo、brew 夕卜,windows ces smartphones windowsmobile、symbian、嵌入式linux這些商業(yè)操作系統(tǒng)當(dāng)然可以提供各種創(chuàng)建第三方程序的方法。在 這些環(huán)境寫程序和在pc平臺(tái)寫程序很相近,基本上體會(huì)不到嵌入式編程的特點(diǎn),只是屏幕小 一些,輸入麻煩一些。這些第三方軟件不是必需的。手機(jī)在3g的市場(chǎng)中只
13、占了一個(gè)較小的部分,網(wǎng)絡(luò)是大頭。而第三方軟件相對(duì)于手機(jī)來說,所占的份額就更小了。程序員有一個(gè)嵌入式移動(dòng)開發(fā)的專欄,總在講這些手機(jī)第三方軟件的開發(fā)手機(jī)軟件只是嵌入式軟件的一部分。第三方軟件在嵌入式移動(dòng)開發(fā)中又能占到多少比重呢?5結(jié)束語需要說明:關(guān)于以后的市場(chǎng)究竟以單cpu手機(jī)為主,還是以雙cpu手機(jī)為主的問題, 我傾向于單cpu手機(jī),但這只是我個(gè)人觀點(diǎn)。實(shí)際市場(chǎng)會(huì)怎么發(fā)展,殊難預(yù)料。對(duì)于一個(gè)芯片兩個(gè)cpu核的方案,從軟件角度看我是很贊成的。將應(yīng)用軟件和協(xié)議軟 件分開,協(xié)議軟件可以更加穩(wěn)定,應(yīng)用軟件可以自由發(fā)展,使用大量在pc環(huán)境已經(jīng)成 熟的技術(shù)。android程序開發(fā)初級(jí)教程(一)開始hello
14、 android平臺(tái)簡(jiǎn)介令人激動(dòng)的google手機(jī)操作系統(tǒng)平臺(tái)-android正式發(fā)布了,這是一個(gè)開放源代碼的 操作系統(tǒng),內(nèi)核為linux.作為開發(fā)者,我們所關(guān)心的是這個(gè)平臺(tái)的架構(gòu)以及所支持的開發(fā) 語言。下面是這個(gè)平臺(tái)的架構(gòu)模型:applicationshomecontactsphonebrowsera尸plication frameworkmanager疇 f 綁viewnotrficationsystemmanagermanner嚴(yán)驚詡飛廠瞪需xmpp servicelibrariesandroid runtimesurface manager 1medinsqlitcframeworkc
15、ore librariesopengl|esfreelypewebkitmachinesglssllibc linux kernel齡“dm咯磐flash memorybinder (ipc)driverdriverusb driverkeypad driverwifi driveraudiopowerdriversm anagement這個(gè)平臺(tái)有以下功能:+ application framework:可重用的和可替換的組件部分,在這個(gè)層面上,所有的軟 件都是平等的。+ dalvik virtul machine:個(gè)基于 linux 的虛擬機(jī)。+ integrated browser: 一個(gè)
16、基于開源的webkit引擎的瀏覽器,在應(yīng)用程序?qū)印? optimized graphics:包含一個(gè)自定義的2d圖形庫和基于opengl es 1.0標(biāo)準(zhǔn)的 3d實(shí)現(xiàn)。+ sqlite:數(shù)據(jù)庫+ media support:通用的音頻,視頻和對(duì)各種圖片格式的支持(mpeg4, h.264, mp3,aac, amr, jpg, png, gif)+ gsm telephony: gsm 移動(dòng)網(wǎng)絡(luò),硬件支持。+ bluetooth, edge, 3g, ond wifi:都依賴于硬件支持。+ camera, gps, compass, and accelerometer:都依賴于硬件支持。+ r
17、ich development environment:包含一套完整的開發(fā)工具集,方便跟蹤調(diào)試,內(nèi)存檢測(cè)和性能測(cè)試,而且提供了 eclipse的插件。下面我們就來親身體驗(yàn)一下android程序的開發(fā)之旅。先介紹一下開發(fā)環(huán)境,下面是對(duì)系統(tǒng)及相關(guān)軟件的版本要求:操作系統(tǒng):windows xp or vistamac os x 10.4.8 or later (x86 only)linux (tested on linux ubuntu dapper drake)supported development environmentseclipseeclipse 32 3.3 (europa)an dr
18、oid development tools plugin (opti onol)other development environments or idesjdk 5 or jdk 6 (jre alone is not sufficient)not compatible with gnu compiler for java (gcj)apache ant 1.6.5 onoter for linux and mac, 1.7 or later for windows我使用eclipse 3.3 + jdk 1.6. + ant 1.7的組合。還有兩個(gè)重要的就是:android sdk 以及a
19、ndroid用于eclipse中的插件。android sdk 的下載鏈接:h卄p:/如果你是第一次使用這些軟件,請(qǐng)注意安裝順序和設(shè)置好環(huán)境變量。一般的順序是先 安裝jdk然后解壓ont壓縮包,然后設(shè)置java環(huán)境變量和ant環(huán)境變量,然后是 解壓an droid sdk,再設(shè)置android sdk的環(huán)境變量??傊褪前裫dk, ant, android sdk的路徑添加到path里。android for eclipse plug in在安裝過程很簡(jiǎn)單,通過網(wǎng)絡(luò)安裝插件就可以了,這個(gè)是 url: h卄ps:/dl-具體的配置過程,可以查看:h 卄 p: ndroid/intro/insto
20、lling.htnnl#otherides以下為一個(gè)hello android的開發(fā)步驟:創(chuàng)建一個(gè)項(xiàng)目:創(chuàng)建一個(gè)新項(xiàng)目是很簡(jiǎn)單的,只要你安裝了 eclipse插件,并且你的eclipse軟件版本在3.2或3.3,你就可以開始開發(fā)了。首先,看一下要?jiǎng)?chuàng)建,hello/ world11程序從高級(jí)層面上有哪些步驟:1, 通過 file -> new-> project 菜單,建立新項(xiàng)目“andoid project"2, 填寫新項(xiàng)目各種參數(shù)。3, 編輯自動(dòng)生成的代碼模板。盡此而已,我們通過下面的詳細(xì)說明來完成每個(gè)步驟。1, 創(chuàng)建一個(gè)新的android項(xiàng)目啟動(dòng)eclipse,選擇f
21、ile -> new -> project菜單,如果你安裝好了 android的eclipse插件,你將會(huì)在彈出的對(duì)話框中看到android project"的選項(xiàng)。選擇 t£android project”,點(diǎn)擊 next 按鈕。2,填寫項(xiàng)目的細(xì)節(jié)參數(shù).下面的對(duì)話框需要你輸入與項(xiàng)目有關(guān)的參數(shù):& new android project x這個(gè)表格中詳細(xì)介紹了每個(gè)參數(shù)的含義:project name:包含這個(gè)項(xiàng)目的文件夾的名稱。package name:包名,遵循java規(guī)范,用包名來區(qū)分不同的類是很重要的,例子 中用到的«,com.googl
22、e.ondroid,/你應(yīng)該按照你的計(jì)劃起一個(gè)有別于這個(gè)的路徑的名稱。activity name:這是項(xiàng)目的主類名,這個(gè)類將會(huì)是android的activity類的子類。一 個(gè)activity類是一個(gè)簡(jiǎn)單的啟動(dòng)程序和控制程序的類。它可以根據(jù)需要?jiǎng)?chuàng)建界面,但不是必須的。application name:個(gè)易讀的標(biāo)題在你的應(yīng)用程序上。在“選擇欄“的“use default locationh選項(xiàng),允許你選擇一個(gè)已存在的項(xiàng)目。3,編輯自動(dòng)生成的代碼。當(dāng)項(xiàng)目創(chuàng)建后,你剛才創(chuàng)建的helloandroid就會(huì)是包含下面的代碼.public class helloandroid extends activi
23、ty/* called when the activity is first created. */©overridepublic void oncreate(bundle icicle)super, on create(icicle);setcontentview(ro yout.moin);下面我們開始修改它構(gòu)建界面當(dāng)一個(gè)項(xiàng)目建立好以后,最直接的效果,就是在屏幕上顯示一些文本,下面是完成后的代碼,稍后我們?cè)谥鹦薪忉尅ublic class helloandroid extends activity /* called when the activity is first cre
24、ated. */©overridepublic void oncreate(bundle icicle) super.oncreate(icicle);textview tv = new textview(this);tv.settextf'hello, android");setc on tentview(tv);注意你還需要添加import android.widget.textview;在代碼開端處。在an droid程序中,用戶界面是由叫做views類來組織的。 一個(gè)view可以簡(jiǎn)單理 解為可以繪制的對(duì)象,像選擇按鈕,一個(gè)動(dòng)畫,或者一個(gè)文本標(biāo)簽(這個(gè)程序中)
25、,這個(gè)顯示文本標(biāo)簽的view子類叫做textview 如何構(gòu)造一個(gè)textview:texiview tv = new textview(this);textview的構(gòu)造參數(shù)是android程序的context實(shí)例,context可以控制系統(tǒng)調(diào)用,它提供了諸如資源解析,訪問數(shù)據(jù)庫等等。activity類繼承自context類,因?yàn)槲覀兊膆elloandroid是activity的子類, 所以它也是一個(gè)context類,所以我們能用“this“在textview構(gòu)造中。當(dāng)我們構(gòu)造完textview后,我們需要告訴它顯示什么:tv.settext("helloz android&quo
26、t;);這個(gè)步驟很簡(jiǎn)單,當(dāng)我們完成了這些步驟以后,最后要把textview顯示在屏幕上。setc on tentview(tv);activity的setcontentview()法指示出系統(tǒng)要用哪個(gè)view作為activity的界面,如 果一個(gè)activity類沒有執(zhí)行這個(gè)方法,將會(huì)沒有界面并且顯示白屏。在這個(gè)程序中,我們要 顯示文本,所以我們傳入已創(chuàng)建好的textviewo好了,程序代碼已經(jīng)寫好,下面看看運(yùn)行效果。運(yùn)行代碼:hello, android使用android的eclipse插件就可以很輕松的運(yùn)行你的程序,選擇run -> open rundiolog。你將會(huì)看到下面的對(duì)話
27、框©android applicatio:apache tomcat ©c/c+ local appl #eclipse applicatior ueclipse data tools 弓 generic server3 gen eric server(ex9 http preview3 j2ee preview 町java applet 廳 java applicatio n jvjunitjvjunit plug-in lest i-jython run &jython unittest 3 osgi framework 2? python coverage 乙
28、 fmhon runi丨fi ter matched 20 of 20create, manage and run configurationsandroid apphcationcon figure launch setti ngs from this dialog: press the 'new1 button io create a configuration of the selected type. 匸 press the duplicate* butt on to copy the selected configurati on.x press the 'delet
29、e1 butt on to remove the selected configuration. :; press the filter4 button to con figure filteri ng options. edit or view an existing configuration by selecting it.con figure lau nch perspective setti ngs from the perspadigs preference page.close下一步,高亮nandroicl application"標(biāo)簽,然后按下左上角的圖標(biāo)(就是像一片
30、紙帶個(gè)小星星那個(gè)),或者直接雙擊"android application'1標(biāo)簽,你將會(huì)看到一個(gè)新的運(yùn)行項(xiàng)目,名為hnew_configuration,create, manage, and run configurationsan droid applicationp g android applicationew_con figurat!9 apache tomcat 宦c/c+ local appl eclipse applicatior 0 eclipse data tools3 generic servergwnenc server!ex3 http preview
31、? j2ee previewhjava applettijava applicatio njujunitju ju nit plug-in test i-jython run jython unittest 出 osgi framework j pvthon coveraae difilter matched 21 of 21name: |newconfigurationbuncluse取一個(gè)可以表意的名稱,比如"hello, android1;然后通過browser按鈕選取你的項(xiàng)目 (如果你有很多個(gè)項(xiàng)目在eclipse中,確保你選擇要運(yùn)行的項(xiàng)目),然后插件會(huì)自動(dòng)搜索在你 的項(xiàng)目中的
32、activity類并且將所有找到的添加在"activity"標(biāo)簽的下拉列表中。我們只有 "hello, android11 一個(gè)項(xiàng)目,所以它會(huì)作為默認(rèn)選擇。點(diǎn)擊,apply”按鈕,下圖到這里,已經(jīng)完成了,你只需要點(diǎn)擊rury按鈕,然后android的模擬器將會(huì)啟動(dòng),你的應(yīng)用程序就會(huì)被顯示出來。©©w0kxnm&目6qizqhellor androids .iii cs 10:11 pmhello, android下次繼續(xù)介紹如何把界面的布局用xml表示以及使用命令行進(jìn)行編譯和運(yùn)行android 程序。將界面實(shí)現(xiàn)用xml編排你剛剛完成的h
33、ello, world'例子我們稱之為”程序化”的界面編排。意思就是 說構(gòu)建你的應(yīng)用程序界面是直接使用的源代碼。如果你已經(jīng)完成過很多界面程 序,你大概熟悉像此類的方式是多么脆弱:一個(gè)對(duì)布局小小的修改會(huì)對(duì)源代碼造成很頭疼的事情。如果忘掉與view的緊密結(jié)合,這個(gè)導(dǎo)致代碼出錯(cuò)和浪費(fèi)你的 調(diào)試時(shí)間的界面問題也會(huì)很簡(jiǎn)單。這就是為什么android提供了一種可替換的界面構(gòu)建方式:基于xml的布局文 件。最簡(jiǎn)單的解釋這個(gè)概念的方式就是展示一個(gè)例子。我們就用剛才創(chuàng)建的項(xiàng)目 來進(jìn)行演示,達(dá)到相同的界面效果。<?xml versionmi.tr encoding=,utf-8,?><t
34、extview xmlnsndroid-'h卄p:/schemqsondroiclcom/opk/es/ondro id"android:layout_width-'fill_parent"android jayoulheight-'tillparent"ondroicktextihello, androidh/>androidxml布局文件的大體的結(jié)構(gòu)很簡(jiǎn)單。它是一個(gè)標(biāo)簽的樹,任何一個(gè)標(biāo)簽 就是view類的名字。在這個(gè)例子中,它是一個(gè)很簡(jiǎn)單的只有一個(gè)元素的樹,一 個(gè)textviewo你可以使用任何繼承自view類的名字作為標(biāo)簽的名字
35、。包括 在你的代碼中自定義的view類。這個(gè)結(jié)構(gòu)可以很容易的構(gòu)建界面,它比你在源 代碼中使用的結(jié)構(gòu)和語法更簡(jiǎn)單。這個(gè)模式的設(shè)計(jì)靈感來自于web開發(fā)。就是 可以將界面和應(yīng)用程序邏輯分離的模式。含義屬性xmln s:android在這個(gè)例子中,也有些是xml的屬性,下面是他們的含義:這是xml命名空間的聲明,它是告訴android的工具, 你將要涉及到公共的屬性已被定義在xml命名空間。 在每一個(gè)android的布局文件的最外邊的標(biāo)簽必須有 這個(gè)屬性。android:layout_width這個(gè)屬性定義了在屏幕上這個(gè)view可用的寬度是多 少。android:layout_height這個(gè)屬性定義
36、了在屏幕上這個(gè)view可用的高度是多 少。an droid:text設(shè)置textview所包含的文本內(nèi)容,當(dāng)前設(shè)置為” hello, android” 信息以上就是一個(gè)xml布局文件的樣子,但是你需要放在哪里?它要放在你的項(xiàng)目 目錄的es/文件夾下。wresm是” resources”的縮寫,它是存放所有非代碼 資源的文件夾,包含象圖片,本地化字符串和xml布局文件。這些eclipse的插件已經(jīng)給你創(chuàng)建好了,在我們上面的例子中,我們沒有使用它。 在包瀏覽器中,展開©目錄的layout.并且編輯moin.xml,替換掉那個(gè)文本 內(nèi)容,然后保存?,F(xiàn)在,在包瀏覽狀態(tài),打開在代碼文件夾中名為
37、r.jovo的文件,你將看到下 面的內(nèi)容:public final class r public static final class q卄r ;public static final class drawable public static final int icon=0x7f020000;;public static final class layout public static final int main=0x7f030000;;public static final class string public static finai int app_name=0x7f040000;
38、 ;個(gè)項(xiàng)目的r.java文件是一個(gè)定義所有資源的索引文件。使用這個(gè)類就像使用 一種速記方式來引用你項(xiàng)目中包含的資源。這個(gè)有點(diǎn)特別的強(qiáng)大像對(duì)于eclipse 這類ide的代碼編譯特性,因?yàn)樗鼓憧焖俚?,互?dòng)式的定位你正在尋找的特定 引用。到目前需要注意的重要事情是叫做” layout的內(nèi)部類和他的成員變量” mainj, 插件會(huì)通知你添加一個(gè)新的xml布局文件,然后從新產(chǎn)生這個(gè)r.java文件, 比如你添加了新的資源到你的項(xiàng)目,你將會(huì)看到r.java也相應(yīng)的改變了最后重要的事情是你需要去修改你的helloandroid源代碼,去使用新的xml 布局你的界面。替換掉編碼式的界面模式。下面是你的新代
39、碼的樣子,你可以看 到,代碼變得更加簡(jiǎn)單了。public class helioandroid extends activity ©overridepublic void oncreate(bundle icicle) super, on create(icicle);setco ntentview(royout.moin);當(dāng)你做這些改變的時(shí)候,不要僅僅復(fù)制,粘貼到你的代碼中,嘗試去體驗(yàn)r.java的代碼編 譯特點(diǎn)。你會(huì)發(fā)現(xiàn)它對(duì)你有很大的幫助?,F(xiàn)在完成這些改變以后,你就可以重新運(yùn)行你的程序,然后你會(huì)發(fā)現(xiàn)兩種不同的界面編排方 式會(huì)產(chǎn)生同樣的效果。調(diào)試你的項(xiàng)目這個(gè)用于eclipse中的
40、android插件作為eclipse中的調(diào)試器也具有優(yōu)秀的兼容 性。要演示這些,讓我們制造一個(gè)bug在代碼中,改變你的helloandroid源 代碼象下面這樣:public class helloandroid extends activity ©overridepublic void oncreate(bundle icicle) super.oncreate(icicle);object o 二 null;o.tostring();set conten tview(ro yout.moin);這次簡(jiǎn)單的變化會(huì)引起一個(gè)nullpointerexception異常,如果你再次運(yùn)行程
41、序, 你將會(huì)看到屏幕要找到什么地方出錯(cuò),需要設(shè)置個(gè)斷點(diǎn)在你源代碼的object o二null;” 行后(你可以雙擊在eclipse中顯示行數(shù)的左部區(qū)域),然后選擇run -> debu g選擇最后一次的運(yùn)行加載。你的程序?qū)?huì)重起模擬器,但是這個(gè)時(shí)候它會(huì)掛 起,當(dāng)它走到你剛才設(shè)置的斷點(diǎn)的時(shí)候,在eclipse的調(diào)試模式視圖中,它就會(huì) 停止在你的代碼處。就像你可以在其他任意程序中做這個(gè)一樣。使用其它的ide工具創(chuàng)建項(xiàng)目調(diào)試你的項(xiàng)目這個(gè)用于eclipse中的android插件作為eclipse中的調(diào)試器也具有優(yōu)秀的兼容 性。要演示這些,讓我們制造一個(gè)bug在代碼中,改變你的helloandroid源 代碼象下面這樣:public class helloandroid extends activity /* called when the activity is first created. */©overridepublic void oncreate(bundle icicle) super
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025建筑工程拆除與補(bǔ)償合同
- 2025個(gè)人健身教練服務(wù)合同范本
- 電瓶轉(zhuǎn)讓合同協(xié)議書范本
- 現(xiàn)貨白糖購銷合同協(xié)議
- 班組帶考勤合同協(xié)議
- 電平車出租合同協(xié)議
- 電氣室內(nèi)安裝合同協(xié)議
- 電單車配件采購合同協(xié)議
- 現(xiàn)代汽車購車合同協(xié)議
- 電商跟快遞合作合同協(xié)議
- 血液科護(hù)士對(duì)輸血反應(yīng)的識(shí)別與處理
- 《工程材料基礎(chǔ)》課件
- 渠道施工課件
- 預(yù)防艾滋病宣傳教育主題班會(huì)
- Part1-2 Unit1 Travel 教案-【中職專用】高一英語精研課堂(高教版2021·基礎(chǔ)模塊2)
- 城市普通中小學(xué)校校舍建設(shè)標(biāo)準(zhǔn)
- 數(shù)字化時(shí)代的金融監(jiān)管
- 《瘋狂動(dòng)物城》全本臺(tái)詞中英文對(duì)照
- 金融風(fēng)險(xiǎn)傳染性研究
- 小學(xué)科學(xué)實(shí)驗(yàn)?zāi)夸?-6年級(jí)新教科版
- 成人體外心肺復(fù)蘇專家共識(shí)(2023版)解讀
評(píng)論
0/150
提交評(píng)論