android入門到精通詳解第一篇Android系統(tǒng)結(jié)構(gòu)和SDK使用_第1頁
android入門到精通詳解第一篇Android系統(tǒng)結(jié)構(gòu)和SDK使用_第2頁
android入門到精通詳解第一篇Android系統(tǒng)結(jié)構(gòu)和SDK使用_第3頁
android入門到精通詳解第一篇Android系統(tǒng)結(jié)構(gòu)和SDK使用_第4頁
android入門到精通詳解第一篇Android系統(tǒng)結(jié)構(gòu)和SDK使用_第5頁
已閱讀5頁,還剩203頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

目第一篇Android系統(tǒng)結(jié)構(gòu)和SDK使 第1章Android的系統(tǒng)介 第2章AndroidSDK的開發(fā)環(huán) AndroidSDK的結(jié) AndroidSDK環(huán)境安 Android中建立工 第二篇Android應(yīng)用程序的概述和框 API參考文檔的使 第4章Android應(yīng)用程序示 第5章Android應(yīng)用程序的內(nèi) 使用am工具啟動Android應(yīng)用程 第三篇Android的UI系統(tǒng)實 第6章UI的基本外形和控 彈出 第7章控件(Widget)的使 網(wǎng)格(Grid)視圖 列表(List)視圖 使用Tab組織 第9章2D圖形接口的使 第10章OpenGL3D圖形的使 使用OpenGL圖形接口的程序結(jié)構(gòu) 第一Android系統(tǒng)結(jié)構(gòu)SDK使用1章Android的系統(tǒng)介紹 系統(tǒng)介Android是開發(fā)的基于Linux平臺的、開源的、智能操作系統(tǒng)。Android包括操作系統(tǒng)、中間件和應(yīng)用程序,由于源代碼開放,Android可以被移OHA(OpenHandsetAlliance,開放),為與33家公司聯(lián)手為Android移動平臺系統(tǒng)的發(fā)展而組建的。廠商也推出了幾款A(yù)ndroid,如下圖所示:G1、G2、HeroNexusOne圍繞在的Android系統(tǒng)中,形成了移植開發(fā)和上層應(yīng)用程序開發(fā)兩個不同的開發(fā)方面。廠商從事移植開發(fā)工作,上層的應(yīng)用程序開發(fā)可以由任何Android1.5以前的仿真環(huán)境,Android1.6以后的仿真器環(huán)境如下Android1.5Android1.6作為一個平臺,Android在技術(shù)上的優(yōu)勢主要有以下幾點完善SDK和文提供了豐富的文檔、資料。這Android系統(tǒng)的開發(fā)和運行在一個良好的軟件結(jié)構(gòu)和使用的工從宏觀的角度來看,Android是一個開放的軟件系統(tǒng),它包含了眾多的源代碼。從下至上,Android系統(tǒng)分成4個層次:3層次:JavaAndroid系統(tǒng)的架構(gòu)如圖所示第四層:Java應(yīng)用系系統(tǒng)第三層:Java框C/C++C/C++<-->第二層:本地框架和Java運行環(huán)<-->用戶空第一層:Linux操作系統(tǒng)及驅(qū)Android次主要由Java代碼實現(xiàn)。1層次和2層次之間Linux操作系統(tǒng)的角度來來看,是內(nèi)核空間與用戶空間的分界線,第1層次運行于內(nèi)核空間,第2、3、4層次運行于用戶空間2層次和第3層次之間,是本地代碼層和Java代碼層的用程序的開發(fā),第3層次以下的內(nèi)容是不可見的,僅考慮系統(tǒng)API即可。環(huán)境(Runtime),由虛擬機和Java基本類組成。除了軟件本身的代碼之外,Android還提供了一系列工具來輔助這些主要的工具包括也可用于將資源編譯到二進制的assets。用它把Android模擬器或設(shè)備上的應(yīng)用程序代碼和一個標準的調(diào)試器連接android工具:android工具是一個,用于創(chuàng)建和管理AndroidVirtualDevices(AVDs。AIDL工具(AndroidInterfaceDescriptionLanguage,Android接口描述語言,AIDL線程信息,截取模擬器或設(shè)備的屏幕畫面,還有的功能。dx:dx工具用于將.class字節(jié)碼(bytecode)Android字節(jié)碼(保存在.dex文件中)這個字節(jié)碼文件是給Android的Java虛擬機運行用的。Draw9-patch:Draw9-patch工具允許使用所見即所得(WYSIWYG)的編輯器輕松地創(chuàng)建NinePatch圖形。來模擬一個實際的Android系統(tǒng)的運行,使用模擬器非常適合調(diào)試和測試應(yīng)image(click(touch(geues3:3工具能夠方便地數(shù)據(jù)文件,這是一個標準命Traceview:這個工具可以將Android應(yīng)用程序產(chǎn)生的日志(tracelog)2AndroidSDK的開發(fā)環(huán) AndroidSDKAndroidSDKAndroidAndroid的SDK開發(fā)環(huán)境使用預(yù)編譯的內(nèi)核和文件系統(tǒng),了Android軟AndroidSDK插AndroidSDK在IDE環(huán)境中使用的組織結(jié)構(gòu)如圖插運行仿運行仿工文示例代底層映開發(fā)環(huán)本機JAVA工AndroidIDE(,在Android開發(fā)者的上可以直接各個版本的SDK。AndroidSDKandroid-sdk-{主機系統(tǒng)}_{體系結(jié)構(gòu)}_{版本例如,Android提供SDK的幾個文件包如下所示android-sdk-windows-android-sdk-linux_x86-android-sdk-windows-android-sdk-linux_x86-SDK add-ons:附加的包platforms中包含了AndroidSDK版本的中,包含系統(tǒng)映像,工data/images/:包含默認的Android磁盤映像,包括了系統(tǒng)映像(Androidsystemsamples/Android的開發(fā)環(huán)境中,根據(jù)它skins/tools/:特定平臺的工具;Anydevelopmenttoolsthatarespecifictotheplatformversion.APIAndroid2Android3Android4Android5Android6Android7APIAndroid2Android3Android4Android5Android6Android7Eclipse集成環(huán)境的一個插件。Eclipse集成環(huán)境功能,使得生成和調(diào)試Android應(yīng)用程序既容易又快速。AndroidSDK環(huán)境安AndroidSDKWindows版本需要以下的Eclipse集成開發(fā)環(huán)Android其中ADT和AndroidSDK可以到Android開發(fā)者的去,或者安裝亦可,ADT的功能如下所示:可以從EclipseIDE內(nèi)部其他的Android開發(fā)工具。例如,ADT可以讓你直接從EclipseDDMS工具的很多功能——屏幕截圖、管理端口轉(zhuǎn)發(fā)forardingWizard新Android應(yīng)用程序所需的最基本文件編寫有效的XMLEclipse環(huán)境中使用AndroidSDKJDKJava環(huán)境 EclipseEclipseEclipse可以使用,但是沒有得到Android的驗證。如果使用Eclipse3.4,可以去eclipse-SDK-3.4-win32.zip包;如果使用Eclipse3.5,可以去eclipse-SDK-3.5.1-win32.zip包。這個包不需要安裝,直接解壓縮即可,解壓縮后執(zhí)行其中的eclipse.exe文件。Android工具和文檔等。得到AndroidSDK,可能使用到兩種方式:AndroidSDK的包AndroidSDK的包AndroidSDK1.6之前的版本AndroidSDK,AndroidSDK1.5,AndroidSDK1.6可以直接從Android開發(fā)者中得到,每個SDK包含Linux、Windows和MAC三個版本。在Windows環(huán)境中,使用 的版本,例如:android-sdk-windows-1.5_r2.zip android-sdk-windows-1.6_r1.zip,這個包通常用幾百M的大小。目前Android系統(tǒng)推薦使用的方式軟件升級獲得Android包第一步:獲得android-sdk_r04-從Android開發(fā)者上,獲取AndroidSDK的相關(guān)包android-sdk_r04-windows.zip,這個包比實際的Android的SDK要小得多,只有20多M,其中包含了一個Setup可執(zhí)行程序,獲取完整的SDK是通過這個可執(zhí)行程序獲得的。解壓縮這個包,獲得AndroidSDK的基本 第二步:運行SDKSetup.exe程序,實際的Android運行程序,AndroidSDK的,出現(xiàn)SDK的界面AndroidSDKApply接受全部(AcceptAll)表示安裝所有的內(nèi)容。文檔一般安裝成的版本。選擇后,安裝程序?qū)⒁来伟惭b各個組過程中,每個組件將首先被放置到temp中,以一zip包的形式存在。完成后,得到完整的AndroidSDK。2.2.4(1).Eclipse3.4(Ganymede)中第一步:啟動Eclipse選擇“Help”>“SoftwareUpdates...”準備安裝插Eclipse3.4框框Eclipse3.4點擊右側(cè)自上而下的第3個按鈕,“AddSite...”準備在“AddSite”框中,輸入Android插件的路徑 另外的式是點擊Archive?按鈕,這樣可以不使用網(wǎng)絡(luò),直接指定磁盤中的ADT包(目前的版本是ADT-0.9.5.zip)。Tools選擇到“DeveloperTools”中,Eclipse3.4AndroidDDMS然后點擊“Install...”按鈕,繼續(xù)運行,如圖所示Eclipse3.4AndroidDDMSNext將出現(xiàn)框Eclipse3.4Android選擇接受(accept)并且Finish完成安裝之前的配置,后面的將進入安裝的Android組件的階段。安裝的過程要經(jīng)過尋找依賴和安裝兩個階段,如圖所示Eclipse3.4現(xiàn)ADT已經(jīng)被安裝。2.2.4(2).Eclipse3.5(Galileo)中件Eclipse3.5第二第二步:出現(xiàn)軟件升級框圖Eclipse3.5的軟件升級 點擊右側(cè)自上而下的第3個按鈕,“AddSite...”準備Eclipse3.5ADT在“AddSite”框中,輸入Android插件的路徑 另外的式是點擊Archive?按鈕,這樣可以不使用網(wǎng)絡(luò),直接指定磁盤中的ADT包(的版本是ADT-0.9.5.zip)。第四步:回到軟件升級框,workwith的路徑變?yōu)榱?/android/eclipse/,后面的列表變?yōu)榱恕癉eveloperTools”,AndroidAndroidDevelopmentEclipse3.5AndroidDDMS選中后,點擊Finish將出現(xiàn)安裝的詳細信息的框,如圖所示Eclipse3.5Android選擇Next進行下一Eclipse3.5Android選擇接受(accept)并且Finish完成安裝之前的配置,后面的將進入安裝的Android組件的階段。安裝的過程如圖所示:Eclipse3.5Android現(xiàn)ADT已經(jīng)被安裝。2.2.5.Eclipse中配Android進入ADTEclipse環(huán)境后,選擇“Window”>“Preference”,從左側(cè)的列表中選擇Android項:EclipseAndroidSDK左側(cè)的Android選項是由于安裝了AndroidSDK而出現(xiàn)的SDK設(shè)置SDKLocation中,點擊“Browse”?按鈕;選擇 ,點擊“OK”按鈕 中運行仿真器環(huán)Android虛擬設(shè)為了運行一個Android仿真器的環(huán)境,首先需要建立Android虛擬設(shè)出現(xiàn)“AndroidSDKandAVDDeviceManager”窗口,界面如圖所示:AndroidSDKAVD的情況下點擊右側(cè)的New選擇建立一個虛擬設(shè)備。建立新的Android虛擬設(shè)備的窗口為CreatenewAVD,如Android虛擬設(shè)備的建立包含了以下的一些選項(Name(argetSDSDSD卡映像文件,SD卡映像文件是使用mksdcard工具建立的。皮膚(Skin):這里皮膚的含義其實是仿真器運行尺寸的大小,默認的尺寸有P(320x480,HVGA-運行虛擬在“AndroidSDKandAVDDeviceManager”窗口中,選擇一個設(shè)備,點擊除了使用右側(cè)的模擬鍵盤之外,也可以使PC機的鍵盤來進行模擬真實設(shè)按鍵之間的映射關(guān)系如下表所示仿真器的虛擬按 鍵盤的按 F2orupStar(右軟按鍵 Shift-F2orPage Call/dial Hangup/endcall Power Audiovolumeup KEYPAD_PLUS,Ctrl-Audiovolumedown KEYPAD_MINUS,Ctrl-Camera Ctrl-KEYPAD_5,Ctrl-

KEYPAD_7,Ctrl-KEYPAD_9,Ctrl- 切換Code 臨時進 DPad DPadcenter Onionalpha的增加和減少 Android仿真器啟動虛擬設(shè)備之后,默認就可以使用主機的網(wǎng)絡(luò)作為自己的網(wǎng)絡(luò)、使用主機的音頻設(shè)備作為自己輸出。Android中的工在仿真器環(huán)境中,可以使用集成的Android相關(guān)工具。使用的方法是WindowShowViewOther選項,可以開Android的各個工具。調(diào)用的過程選擇Android工具的框如圖所示 控制)、FileExplore(文件瀏覽)、Heap(堆內(nèi)存)、Logcat、ResourceLogcat實際上是一個運行在目標系統(tǒng)的工具,也就是一個Linux令行程序,這是界面種是帶有GUI的效果。Logcat的窗口中記錄的信息也就是實際的(tag)、Log內(nèi)容(Message)等項目。Logcat窗口可以設(shè)置Log的過濾器(Filter),這樣可以僅僅獲得自己需要Log信息,其他的信息命令行程序logcat,位于目標文件系統(tǒng)中該工具位于system/bin中Logcat的使用方法如下所示##logcat[options]logcat工具的選項如下所 -f 輸出到文件,在默認情況下是標準輸-r -n 設(shè)置循環(huán)log的最大數(shù)目,默認為-v<format>log的打印格式,<format>是下面的briefprocesstagthreadrawtimethreadtime 清除所有l(wèi)og并退 得到所有l(wèi)og并退出(不阻塞- 得到環(huán)形緩沖區(qū)的大小并-b 請求不同的環(huán)形緩沖區(qū)('main'(默認)、'radio'、-Blog輸出到二使用仿真器控選擇EmulatorControl選項可以開啟仿真器的控制框,它的界面如下示Android它甚至可以模擬打,發(fā)的過程。例如在 ingnumber中輸入電話號碼,然后點擊Call按鈕。這是仿真器的運行界面如圖所示:Android接受的程序已經(jīng)被調(diào)用起來,這里顯示的1-234-56,也是在仿模 的界面顯示如下所示Android命令行工adb、mksdcard有一Android的工具需要在命令行的環(huán)境中運行,只是可以選擇Windows的開始->運行,鍵入cmd并確定,進入命令行的界面中運行。主要令行工具adbmksdcard等。命令行的工具AndroidSDKtools中,使用命adb(AndroidDebugBridge,Android調(diào)試橋)是Android的主要調(diào)試工具,將出現(xiàn)s提示符,這就是Android所運行的Linux系統(tǒng)中的s終端,可以在這個s提示符后執(zhí)行Android系統(tǒng)提供的Linux命令。lsAndroid系統(tǒng)根:#ls-drwxrwxrwt 2009-06-1502:17drwxrwx 2009-06-1502:18 2009-06-1502:17lrwxrwxrwx2009-06-1502:17etc->drwxr-xr-x2009-05-2802:16drwxr-xr-x1970-01-0100:00drwxr-x1970-01-0100:00dr-xr-xr-x1970-01-0100:00-rwxr-x90751970-01-0100:00-rwxr-x16771970-01-0100:00-rwxr-x1065681970-01-0100:00-rw-r--r--1181970-01-0100:00drwxrwx--x2009-05-2802:49 1970-01-0100:00drwxr-xr-x2009-06-1502:18Android根中的主要文件夾與目標系統(tǒng)的out/target/product/generic/root內(nèi)容相對應(yīng),此etc、proc等Android啟動后自動建立的,system映像被掛接到根文件系system中,data映像被掛接到根文件系統(tǒng)data中1174032811740328c003aa1cafe0d08cS808264c01654b4afe0c45cS111546bluetooth547174041168 548 c008e3f4afe0c584S/system/bin/voldc0192c20afe0cdecS/system/bin/debuggerdffffffffafe0caccS/system/bin/rildc008e3f4afe0c584Sffffffffafe0c45cS/system/bin/mediaserverc008de04afe0d25cS/system/bin/dbus-daemonc01f3b04afe0c1bcS/system/bin/installdapp_46455459719212964ffffffffafe0d3e4S#psPPIDVSIZERSS 1 280188c008de040000c74cS2000S3200S4200S5200S200S200S200S200S200S200S200S200S200S200S200S1 c00ae7b0afe0d1dcS1 ffffffff0000e8f4Sffffffffafe0c45cSsystem10570417584ffffffffafe0d3e4Sapp11338019492ffffffffafe0d3e4Sapp9539213228ffffffffafe0d3e4S9516413376ffffffffafe0d3e4Sapp9770014264ffffffffafe0d3e4Sapp9413212624ffffffffafe0d3e4S afe0c1bcR從系統(tǒng)的進程中可以看到,系120號進程為父進程。init是系統(tǒng)運行的1個進程Android根目下init可執(zhí)行程序,這是一個用戶空間的進程。kthreadd是系統(tǒng)2號進程,這是一個內(nèi)核進程,其他內(nèi)核進程都Zygote、/system/bin/sh、/system/bin/mediaserver等進程是被init運行起來的,等進程代表的是應(yīng)用程序進程,它們的父進程都是zygote。adbinstalladb使用adb安adbinstalladb使用adb在主機和目標機之間傳送文件的方法為adbadbpush{host_path}adbpull{target_path}mksdcard[-llabel]<size>mksdcard[-llabel]<size>其后面可以跟K、M、G等參數(shù),file是磁盤映像的文件名稱,這個文件也就是在mksdcard的一個使用的示例如下所示mksdcardmksdcard128M這表示建立了一個大小為128M,名稱為sdcard.imgFat32磁盤映像文件使用設(shè)備Device工具可以用于進一步控制仿真器的運行狀況,在其中可以查看功能。Device工具的窗口如圖所示:AndroidAndroid中建立工建立工建立Android工程步驟如下:選擇選擇“Android”>“AndroidProject”,點擊“Next”按鈕thecontentsfortheproject 中需要具有AndroidManifest.xml文件??梢允褂肧DK的platforms/android-XXX/samples中的各個子 這是SDK自帶的示例程序,例如,使用oActivity示例程序。點擊“Finish”按鈕,工程將被建立查看和編輯各個文查看AndroidManifest.xml文件的情況,如圖所示AndroidManifest.xml中的內(nèi)容。瀏覽布局文件,如圖所示瀏覽布局文件是一個更有用的功能,可以直觀地查看程序的UI布局,點程序沒有運行的情況下直接查看和組織目標UI界面。查看各個value文件和建立數(shù)值,如圖查看各個Java源代碼文件Java構(gòu)。IDE的源代碼環(huán)境開發(fā)JAVA程序,還具有自動修正、自動增加依賴包、運行工或者“DebugAs”來運行和調(diào)試工程:Android開始運行后,在IDE下層的控制臺(console)中,將出現(xiàn)目標運行的信息,可以獲取目標運行的信息。出現(xiàn)類似的Log信息 oActivity]Android oActivity]adbisrunning oActivity]Performingcom.example.android. activitylaunch runningcompatibleAVD'HVGA'[[[[[[oActivity]DeviceAPIversionis4(Android1.6)oActivity.apkontodevice'emulator-5554' oActivityondevice oActivity oActivity程在運行的一個仿真設(shè)備的時候,可以進一步通過選擇“RunAs”中的“RunConfigurations”進行進一步的配置。啟動后的界面如圖所示:在Target中可以選擇啟動的時候使用的設(shè)備。第二Android應(yīng)用程序的概述和框架3Android應(yīng)用層程序的開發(fā)方 API應(yīng)用程序開發(fā)的結(jié)Android預(yù)應(yīng)用程Android應(yīng)用程序開發(fā)是Android開發(fā)中最上面的一個層次,它們構(gòu)建在類,Android預(yù)應(yīng)用程應(yīng)用程應(yīng)用程應(yīng)用程應(yīng)用程系統(tǒng)Android框架層軟硬件抽象硬件抽象 Android仿真器圖AndroidAndroid系統(tǒng)本身內(nèi)置了一部分標準應(yīng)用(也包括內(nèi)容提供者),在仿真器(包括SDK環(huán)境和源代碼環(huán)境)中已經(jīng)包含這些內(nèi)置的程序。用戶自行開發(fā)的應(yīng)用程序Android內(nèi)置的應(yīng)用層程序包位于同一個層次,在默認的Android系統(tǒng)中。API參考文檔的使在開Android應(yīng)用程序時可SDK中提供的參考文檔,其內(nèi)容Reference中ClassIndex(類索引包索引根據(jù)字母順序列Android的各個包,每個包中包含若干個類、接口根據(jù)包索引,每一個包中包含的主要內(nèi)容大致如下所示Interfaces(接口類Classes(類Enums(枚舉值Exceptions(異常每個包中包含的內(nèi)容,基本上是Java語言中標準的內(nèi)容Android的參考文檔中的類AndroidAPI的主要組成部分,主要參考根據(jù)類索引,每一個類中包含的主要內(nèi)容大致如下所示Overview(概覽Constants(常量Constructors(構(gòu)造方法例如,Activity類的幫助文檔的前面的信息如下所publicpublicextendsimplementsComponentCallbacksKeyEvent.CallbackLayoutInflater.FactoryView.OnCreateContext ListenerWindow.Callback???KnownDirectSubclassesActivityGroup,AliasActivity,ExpandableListActivity,KnownIndirectLauncherActivity,PreferenceActivity,從Activity類中可以看出,類的幫助文檔主要包含以下一些 sa個類只有一個唯一的父類Activity類在android.appandroid.view.ContextThemeWrapper,并且ActivityGroup,ListActivity等幾個類直接繼承。被LauncherActivity等幾個類間接繼承。Class(類的介紹(常量的列表Inherited(繼承的常量的列表,按Class(類的介紹(常量的列表Inherited(繼承的常量的列表,按照繼承類的順序Public(公共的構(gòu)造函數(shù)Public(公共方法的列表Protected(保護方法的列表Inherited(繼承方法的列表,按照繼承類的順序(詳細的介紹(詳細的介紹類的幫助中一般只列出了自己的常量、方法、XML屬性等,對于繼承得到的內(nèi)容(包括方法和常量),按照繼承的順序列出。由于JAVA類是單向繼承,某些與UI內(nèi)容相關(guān)的類的幫助文檔有一些特殊,主要區(qū)別是包含了XMLattributes(XML屬性)一類。XMLAttributes(XML屬性)出現(xiàn)在AndroidManifest.xml或者布局文件中(*.xml)的屬性。例如Button類的參考文檔的主要內(nèi)容如下所示extends???android.widget.ButtonKnownDirectSubclassesCompoundButtonAbuttonwithtwostates,checkedandKnownIndirectSubclassesXMLSeeButtonAttributes,TextViewAttributes,ViewInheritedXMLFromclassandroid.widget.TextViewFromclassandroid.view.ViewInheritedConstantsPublicConstructorsInheritedMethodsButton類的頭部信息和普通的類基本相同,但是包含XMLattributes一個項目,在這里ButtonAttributes,TextViewAttributes,ViewAttributes,根據(jù)類的繼承關(guān)系可以得知,這個啟示是自己的屬性、父類的屬性(Button類的父類是android.widget.TextView)、祖父類的屬性(Button類的祖父類是XMLAttributes項目的Fromclassandroid.widget.TextView和Fromclass性名稱)RelatedMethod(相關(guān)方法)Description(描述)幾個項目。例如,TextView的幾個屬性如下所示 Texttodisplay. Textcolor.android:text等表示了屬性在XML文件中的名稱,setText()等表示了在源文件中使用的方法,最右側(cè)的內(nèi)容是這個屬性的描述PackageIndex→android→android.R.styleable中列出了一些類的XML屬性TextView屬性的相關(guān)內(nèi)容如下所示publicpublicstaticfinalintIfset,specifiesthatthisTextViewhasatextualinputmethodandshouldautomaticallycapitalizewhattheusertypes.Thedefaultis"none".MustbeoneofthefollowingconstantConstantValue 0Don'tautomaticallycapitalizeanything. 1Capitalizethefirstwordofeachsentence. 2Capitalizethefirstletterofeveryword.characters3Capitalizeeverycharacter.ThiscorrespondstotheglobalattributeresourcesymbolConstantValue:44使用的還是名稱。整數(shù)值是Android內(nèi)部運作使用的。XML屬性有些是在布局文件中使用的,也AndroidManifest.xml中使用的,或者在其他的XML文件中使用。在AndroidManifest.xml中使用的屬性。publicstaticfinalint[]publicstaticfinalint[]Attributesthatcanbe oftheintent-filtertag.SeeaddAction(String)formoreinformation.IncludesthefollowingAttributeSeeAlsoAttributeSummary中的android:name 的內(nèi)容是AndroidManifest.xml中的Action可以使用的android:name屬性。例如,View.OnClickListener的幫助信息前面的內(nèi)容如下所示publicstaticinterfacepublicstaticinterfaceKnownIndirectSubclasses接口在android.view這個包中。對于一個接口,IndirectSubclasses的含義(implements)這個接口PublicvoidonClick(Viewv)CalledwhenaviewhasbeenView.OnClickListener的幫助信息后面的PublicvoidonClick(Viewv)Calledwhenaviewhasbeen這些方法是要求接口的實現(xiàn)者來實現(xiàn)的,如果一個類實現(xiàn)了View.OnClickListene這個接口,其中就必須要有這個接口的onClick()函數(shù)4Android應(yīng)用程序示 oActivity程序的運oActivity是一個簡單的Android應(yīng)用程序,其工程文件名稱oActivityAndroid的源代碼和SDK中,都包含了這個包oActivity的圖標和運行情況如圖所 上顯示“o,World!”字符串。 的源文件結(jié) 樹的方式如下所示| (工程管理文件| (工程描述文件| (資源文件 |-- `- (布局文件 `-- ` (字串資源文件| (Java源代碼文件`--`--`--`--`- AndroidManifest.xml文件,這是另一個工程, Android.mkLOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_MODULE_TAGS:=#Onlycompilesourcejavafilesinthisapk.LOCAL_SRC_FILES:=$(callall-java-files-under,src)LOCAL_PACKAGE_NAMEAndroid.mkAndroid的工程管理文件,這個文件只在源代碼開發(fā)的時候使用SDK的開發(fā)中不需要LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_MODULE_TAGS:=#Onlycompilesourcejavafilesinthisapk.LOCAL_SRC_FILES:=$(callall-java-files-under,src)LOCAL_PACKAGE_NAMELOCAL_SDK_VERSIONLOCAL_SDK_VERSION:=currentinclude$(BUILD_PACKAGE)#Usethefollowingincludetomakeourtestapk.Android.mk文件是Android編譯過程中通用的工程管理文件,本地程序、本地庫和Java程序包都使用這個文件。這個文件僅僅在基于源代碼開發(fā)的情況的內(nèi)容是使用include$(BUILD_PACKAGE)表示從當(dāng)前 編譯Java應(yīng)用程序包。LOCAL_PACKAGE_NAME定義的是這個程序的APK包的名稱。LOCAL_MODULE_TAGS表示這個包的類型。這個包LOCAL_MODULE_TAGS定義成samples,這APK包, 中的Android.mk文件,本例中也就是tests 文<?xmlversion="1.0"encoding="utf-<manifest <application o,<activity <?xmlversion="1.0"encoding="utf-<manifest <application o,<activity <intent-<action<category</intent-application(表示應(yīng)用程序)中包含了一個activity(表示活動?;顒邮菓?yīng)用程序中的一個組件,一個應(yīng)用程序中也可以包含若干個組件。包名定義為com.example.android.oactivity,表示將從src目錄的com/example/android/oactivity中尋找程序中的Java源代碼?;顒用Q將被定義為oActivity,表示活動的代碼是上述源代碼中的oActivity.java文件。intent-filter中的內(nèi)容指定了程序的啟動方式,這里category中的ent.category.LAUNCHER表示活動將Android的桌面(Android默認的桌面程序名稱也是LAUNCHER)上出現(xiàn)。pn的nbl"面的文字以及活動啟動后上面的標題文字是一致的。本例沒有指定圖標,所以桌面<activityandroid:name=" <intent-<action<category</intent-在AndroidManifest.xml文件中為一個活動指定label()和icon<activityandroid:name=" <intent-<action<category</intent-android:label指定為字符串、android:icon指定為圖標后,將使用中對稱的文件作為圖標(本例中將使用icon_name.png)activityapplicationandroid:labelandroid:icon等屬性,由于活動是程序的單元,且應(yīng)用可以包含多個活動,因此程序首先將使用activity中的這些,如果沒有則使用上一級的application中的定義源代碼文oActivity工程只有一個源代碼文 oActivity.java,位于這個工程下的 oactivity中,內(nèi)容如下所示packagecom.example.android. importandroid.app.Activity;importpublic oActivityextends{public oActivity(){}

定義包引入包含的布局文

publicvoidonCreate(BundlesavedInstanceState)onCreate()方 o_activity);//使 }}}這里的類oActivity繼承實現(xiàn)了Android系統(tǒng)API提供的活動類(Activity),使setContentView(R.layout.o_activity)指定了當(dāng)前活動的布局,這里表示將從res/layout中找到o_activity.xml文件作為本例的布局文件使布局文<?xmlversion="1.0"encoding="utf- <?xmlversion="1.0"encoding="utf- "@string/o_activity_text_text",這個值在另外的資源文件中被定義,本例就是其他資源string.xml是本例中的一個資源文件,其內(nèi)容如下<?xml<?xmlversion="1.0"encoding="utf-<stringo,oWorld!,oActivity的編譯結(jié)在Android的SDK環(huán)境開發(fā)中,oActivity工程經(jīng)過編譯后,SDK環(huán)境下開發(fā)生成的所有目標文件均在當(dāng)前工程中,包含assets、bin、gen等。gen中,包含了以類的層次關(guān)系為結(jié)構(gòu)的資源文件。例如,/example/android/oactivity中的R.java就是oActivity中的資源文件。在 子包含了經(jīng)過編譯后的各Java類,以.class為后綴bin中包含的classes.dex文件是編譯后的Dalvik虛擬機上運行的Java的字節(jié)碼文件,生成的oActivity.apk文件是最終的APK文件,可以在兼容的AndroidAPI的目標系統(tǒng)中安裝,進而運行程序。oActivity.apk經(jīng)過解壓縮后,包含了下面的一些內(nèi)容 |--META- |-- |-- `--| |-- `-- `-- 的程序的運SkeletonApp是Android中一個應(yīng)用程序的框架,這個程序 復(fù)雜一些,這個程序的運行結(jié)果如圖SkeletonApp容,菜單的功能和兩個按鈕時是相同的,點擊菜單按鈕將出現(xiàn)菜單,菜單是Android中的標準組件。 的源文件結(jié) | |-- `-- |-- ` `-- | | ` | (Java源代碼文件`--`--SkeletonApp中,資源resvalues中除strings.xml文colors.xml文件的內(nèi)容如下<?xml<?xmlversion="1.0"encoding="utf-<!--RetrievedviaResources.getColor()andfriends.--<color<!--RetrievedviaResources.getDrawable()andfriends.--<drawable styles.xml文件的內(nèi)容如下<?xml<?xmlversion="1.0"encoding="utf-<style<item<item<item<stylename="TextAppearance"<style<item res還包含了 <Buttonandroid:id="@+id/back"style="@style/ActionButton"android:text="@string/back"/><ImageViewandroid:id="@+id/image"<ImageViewandroid:id="@+id/image"android:src="@drawable/violet"/><Buttonandroid:id="@+id/clear"style="@style/ActionButton"android:text="@string/clear"android:textColor="@color/red"/>布局顏色可以作為字體的顏色,style/ActionButton作為按鈕的樣式,drawable/semi_black表示了背景的內(nèi)容,drawable/violet表示violet.jpg作為圖像的內(nèi)容。例如根據(jù)上面styles.xmlJAVA源代碼SkeletonActivity.java中構(gòu)建了菜單、按鈕的動作等功能SkeletonApp的編譯結(jié)Android中程序的編譯結(jié)構(gòu)基本類似,SkeletonApp的應(yīng)用程序包SkeletonApp.apk經(jīng)過解壓縮后,包含了下面的一些內(nèi)容 |--META- |-- |-- `--| |-- |-- `-- (保持原狀的文件 `-- ` `--5Android應(yīng)用程序的內(nèi) 應(yīng)用程序的概念性描每一個應(yīng)用程序?qū)⒈痪幾g成Android的一個Java應(yīng)用程序包(*.apk)。Android系統(tǒng)本身是基Linux操作系統(tǒng)運行的,因Android應(yīng)用程序也運行于Linux環(huán)境中,它們具有以下的特點:應(yīng)用程序的組成部一般情況下,Android應(yīng)用程序由以下4種組件活動(Activity廣播(BroadcastReceiver服務(wù)(ServiceProvider一個Android應(yīng)用程序是一個包(Package),包中可能包含一個或者多Android組件(component)活動活動是最基本Android應(yīng)用程序組件,在應(yīng)用程序中,一個活動通常就是一個單獨的用戶界面。每一個活動都被實現(xiàn)為一個獨立的類,并且從活動每一個活動在界面上可以包含按鈕、文本框等多種可視的UI元素。廣播服務(wù)正在從列表中歌曲的器在運行。內(nèi)容提供者(Content應(yīng)用程序的生命周Android進程的重要性分級,可以理解成執(zhí)行的優(yōu)先級。Android進程的類型包括(按重要性分級排序前臺(Foreground)進;進程有一個正在運行 BroadcastReceiver(它BroadcastReceiver.onReceive()方法正在執(zhí)行進程有一個ServiceService的某個方法(Service.onCreate或者可見(Visible)進它有一個可以被用戶從屏幕上看到的Activity,但不臺——其服務(wù)(Service)進看到,但它們做的事情卻是用戶所關(guān)心的(例如:MP3回放或網(wǎng)絡(luò)數(shù)(Background)進程擁有一個當(dāng)前用戶看不到的Activity(它onStop()方法被調(diào)用),這些進程對用戶體驗沒有直接的影響。如果它們正確執(zhí)行Activity生命周期,系統(tǒng)可以在有很多這樣的進程在運行,因此要將這些進程保LRU列表中,以確保當(dāng)內(nèi)空(Empty)進及運行情況考慮,可以關(guān)注Android的各種組件相對應(yīng)的生命周期?;顒覣ndroid中最重要、最基礎(chǔ)的組件,用戶在界面上看到的一個個可以切換的屏幕界面就是Android中的活動?;顒拥纳芷谌鐖D1所示。onCreate()、onStart()和onResume()這3個方法被依次調(diào)用,活動對應(yīng)的界面出現(xiàn)在屏幕上。(Foreground(Background動轉(zhuǎn)入運行。如果活動變?yōu)椴豢梢?,還將調(diào)用onStop()方法。在轉(zhuǎn)入后臺時,onStop()是否被調(diào)用取決于活動是否被完,在新的活動有透明復(fù),這時onResume()方法將被調(diào)用,活動重新轉(zhuǎn)入前臺運行。活動完全退出的情景:當(dāng)使用回退(Bck)按鈕退出活動時,oe方法將被調(diào)用,活動關(guān)閉。如果系統(tǒng)缺少內(nèi)存時,也會殺死(kl)的服務(wù)可以長時間運行,它的特點是沒有可視化界面,服務(wù)的生命周期如圖所示(Service)和onStart()這兩個方法將被調(diào)用,服務(wù)會在運行直到退出,退出時將調(diào)用e廣播的生命周廣播有一個單一的回調(diào)方法onReceive(),當(dāng)廣播消息到達時廣播只有在這個方法的執(zhí)行過程中才處于活動狀態(tài),當(dāng)onReceive()返回后,廣播將不再處于活動狀態(tài)。廣播的功能類似于一個回調(diào)函應(yīng)用程序包含的各個文AndroidManifest.xmlJava源代碼:按照Java包的方式來組織 結(jié)構(gòu),包括各個Java類的源代資源文件:包含XML文件、、原始數(shù)據(jù)文件等,其中表示界面情況的在編Android應(yīng)用程序的過程中,Java源代碼使用SunJDKJava編譯成Java字節(jié)碼文件(多個后綴名為.class的文件),這一步驟和標準的(單一文件classes.dex)AndroidManifest.xml文件經(jīng)Android打包工具(aapt)處理后形成二進制格式AndroidManifest.xml文件,實質(zhì)的內(nèi)容與以前相同。述文件、Java源文件、資源文件Android應(yīng)用程序的三個部分;在編譯之前的工程中是這三個部分,在編譯之后APK包依然是由這三個部分組成的。Android應(yīng)用程序的編譯過程如圖所JavaJavadxaapt根aapt根aapt包的MetaAPKClassDexAndroid如圖所示,Android源文件經(jīng)過了標準Java編譯器的編譯,又經(jīng)過了dxdex文件(classes.dex)是一個單一文件,將工程中所有Java源代碼文件對應(yīng)機將運行這些dey文件。如果應(yīng)用程序包文件不發(fā)生變化,dey文件不會被重新生成;在應(yīng)用程序包發(fā)生更新的情況下,將重新由dex生成dey。Android和標準JAVA開發(fā)的JAR包最大的不同在于,標準JAVA字節(jié)碼是每個文件一個Clash文件,而Android中的一個包將生成一個Dex文件。am工具啟Android除了在GUI界面中啟動應(yīng)用程序之外,在Android令行終端(可以使adbs進行連接)也可以使用am工具啟動應(yīng)用程序am命令的基本使用方法如下usage:usage:am[start|broadcast|instrument]amstart-DINTENTambroadcastaminstrument[-r][-e<ARG_NAME><ARG_VALUE>][-p<PROF_FILE>][-w]<COMPONENT>[-a[-a<ACTION>][-d<DATA_URI>][-t<MIME_TYPE>][-c<CATEGORY>[-c<CATEGORY>]...][-e|--es<EXTRA_KEY><EXTRA_STRING_VALUE>...][--ez<EXTRA_KEY><EXTRA_BOOLEAN_VALUE>...][-e|--ei<EXTRA_KEY><EXTRA_INT_VALUE>...][-n<COMPONENT>][-f<FLAGS>]使用URI的格式,使用-n指定組件。amstartn包名}/{包名}.活動啟動Android設(shè)置工具令如下所示##amstart-n 啟動Android計算器程序令如下所示##amstart-n 啟動Android機程序令如下所示#-啟動Android照相機程序令如下所示##amstart-n 啟動Android機程序令如下所示##amstart-n 啟動Android音樂瀏覽器令如下所示##amstart-n 啟動Android瀏覽器令如下所示##amstart-n 啟動Android網(wǎng)絡(luò)瀏覽器等令如下所示##amstart-n 器都在Music包中,照相機和機都在Camera包中。#amstart-n#amstart-n#amstart-ncomfile:///a.mp3.android.music.MediaPlaybackActivity-.android.music.MediaPlaybackActivity- #amstart-n .android.camera.MovieView-d 視頻播放、圖片瀏覽等功能。com.android.music.MediaPlaybackActivity、com.android.camera.MovieView和com.android.camera.ViewImage分別是對應(yīng)的應(yīng)用程序。##ent.action.VIEW-dfile:///a.mp3-taudio/*#ent.action.VIEW-dfile:///b.mp4-t/*#ent.action.VIEW-dfile:///c.jpg-timage/*這里使用的是am-a參數(shù),表示執(zhí)行一個動作,后面的audio/*、/*和來打開對應(yīng)的音樂、和文件。6章UI的基本外形和控制 彈出AndroidUI系統(tǒng)的知識結(jié)構(gòu)如下圖所示 使用 鍵盤事運動事屏幕間跳框菜樣 OpenGL3D接 圖AndroidUII系統(tǒng)地使用,首先是由應(yīng)用程序來控制屏幕上元素的外觀和Inod方面,包含了基本的控件控制,鍵盤事件響應(yīng),窗口間跳轉(zhuǎn)、框、菜單、樣GUI系統(tǒng)所具有的通用內(nèi)容??丶突臼录捻懙膬?nèi)容。對于Android應(yīng)用程序,控件稱為View。Android中,在處理UI中的各種元素的時候,兩個程序中的要點為得到布局文件(XML)圖控件事件的響應(yīng)事件響應(yīng)方<activity<activityandroid:name="TestEvent1"<intent-<action<category</intent-本例定義了一個Android<LinearLayout<LinearLayoutxmlns:android="http://sandroid:layoutwidth="fillparent"<TextViewandroid:id="@+id/text1"android:layoutwidth="wrapcontent"android:layoutgravity="center"android:text="@string/text1"/><Buttonandroid:id="@+id/button1"android:layoutwidth="80sp"android:layoutgravity="center"<Buttonandroid:id="@+id/button2"android:layoutwidth="80sp"android:layoutheight="wrapcontent"為View后,顯示的內(nèi)容就如上圖所示,只是行為還沒有實現(xiàn)。packagepackageimportandroid.os.Bundle;importandroid.widget.Button;importandroid.view.View;importandroid.util.Log;publicclassTestEvent1extendsActivityprivatestaticfinalStringTAG="TestEvent1";publicTestEvent1(){}publicvoidonCreate(BundlefinalTextViewTextTextView)findViewById(R.id.text1);獲得柄finalButtonButton1=(Button)findViewById(R.id.button1);finalButtonButton2=(Button)findViewById(R.id.button2);Button1.setOnClickListener(newButton1.setOnClickListener(newOnClickListener(){//publicvoidonClick(View{}Button2.setOnClickListener(new{publicvoidonClick(Viewv){}}}這里使用的R.id.button1id是對應(yīng)的。實際上,在布局文android:id這一項也可以正常顯示,但是如果需要在代碼中根據(jù)Button控件的setOnClickListener()設(shè)置了其中的點擊行為,這個方法的參的功能,在點擊的函數(shù)中,將通過Text的句柄對其進行控制。使用findViewById()獲取布局文件(XML)使用setOnXXXListener()SetOnXXXListener()等函數(shù)是android.view.View類的函數(shù),各種控件(voidvoidsetOnClickListener(View.OnClickListenervoidsetOnFocusChangeListener(View.OnFocusChangeListenerl);voidsetOnKeyListener(View.OnKeyListenerl);voidsetOnLongClickListener(View.OnLongClickListenerl);voidsetOnTouchListener(View.OnTouchListenerl);行為。這些函數(shù)的參數(shù)都是所對應(yīng)的android.view.View類中的方法。并通過OnClickListener()等定制句柄的行為。第二種響應(yīng)方功能。本例中使用的是另外的式實現(xiàn)。packagepackageimportandroid.os.Bundle;importimportandroid.widget.Button;importandroid.view.View;importandroid.util.Log;publicclassTestEvent2extendsActivityimplementsOnClickListener//實現(xiàn)相關(guān)的接口privatestaticfinalStringTAG"TestEvent2";privateTextViewmText;privateButtonmButton1;privateButtonpublicTestEvent2()}publicvoidonCreate(BundlemText=(TextView)findViewById(R.id.text1);mButton1=(Button)findViewById(R.id.button1);mButton1.setOnClickListener(this);//設(shè)置 mButton2=(Button)findViewById(R.id.button2);mButton2.setOnClickListener(this);//設(shè)置 }publicpublicvoidonClick(View{Log.v(TAG,"onClick()"); caseR.id.button1:caseR.id.button2:}}}onClick()setOnClickListener()將其設(shè)置到按鈕中的參數(shù)就是this,表示了當(dāng)前的活動。(mext樣就可以在類的各個函數(shù)中都能獲得這個句柄進行處理。這和上法是有區(qū)別存TextView的句柄。第三種響應(yīng)方importandroid.util.Log;publicclassimportandroid.util.Log;publicclassTestEvent3extendsprivatestaticfinalStringTAG="TestEvent3";privateTextViewmText; = publicTestEvent3()}publicvoidonClick(View{}}publicvoidonClick(View{}}publicvoidonCreate(BundlemText=(TextView)finalButtonmButton1=(Button)findViewById(R.id.button1);finalButtonmButton2=(Button)mButton1.setOnClickListener(mListener1);//設(shè) 者的mButton2.setOnClickListener(mListener2);//設(shè) 者的}}鍵盤事件的響理是響應(yīng)之間在程序中使用鍵盤的內(nèi)容。本例需要實現(xiàn)的內(nèi)容是通過鍵盤來控制屏幕上的一個的Alpha值,使用上鍵和右鍵增加的Alpha值,使用下鍵和左鍵減少的Alpha值。顯示內(nèi)容如下所 圖按鍵事件的響應(yīng)本例的布局文件testkeyevent.xml<LinearLayoutxmlns:android="http://s <TextViewandroid:id="@+id/alphavalue"<ImageViewandroid:id="@+id/image" packagepackageimportandroid.app.Activity;importimportandroid.util.Log;importandroid.view.KeyEvent;importandroid.view.View;importandroid.widget.TextView;publicclassTestKeyEventextendsActivityprivatestaticfinalStringTAG="TestKeyEvent";privateImageViewmImage;privateTextViewmAlphavalueText;privateintmAlphavalue;protectedvoidonCreate(Bundle{super.onCreate(savedInstanceState);mImage=(ImageView)findViewById(R.id.image);mAlphavalueText=(TextView)findViewById(R.id.alphavalue);mAlphavalue=100;mAlphavalueText.setText("Alpha="+mAlphavalue*100/0xff+}publicbooleanonKeyDown(intkeyCode,msg){Log.v(TAG,"onKeyDown:keyCode="+keyCode);Log.v(TAG,"onKeyDown:String="+msg.toString());switch(keyCode)caseKeyEvent.KEYCODEDPADUP:caseKeyEvent.KEYCODEDPADRIGHT:mAlphavalue+=20;caseKeyEvent.KEYCODEDPADDOWN:caseKeyEvent.KEYCODEDPADmAlphavalue-=20;}if(mAlphavalue>=0xFF)mAlphavalue=0xFF;if(mAlphavalue<=0x0)mAlphavalue=0x0;mAlphavalueText.setText("Alpha="+mAlphavalue*100/0xff+"%");returnsuper.onKeyDown(keyCode,msg);}}函數(shù),其參數(shù)intkeyCode為按鍵碼,KeyEventmsg表示按鍵事件的消息(其中包含上面打出的logVERBOSE/TestKeyEvent(771):onKeyDown:keyCode=VERBOSE/TestKeyEvent(771):onKeyDown:keyCode=20VERBOSE/TestKeyEvent(771):onKeyDown:String=KeyEvent{action=0code=20repeat=0meta=0scancode=108finalfinalint //finalintgetFlags() //獲得標志finalintgetKeyCode() //獲得按鍵碼finalintgetRepeatCount() finalintgetScanCode() //獲得掃描碼運動事件的處publicbooleanonTouchEvent(MotionEventevent)publicpublicbooleanonTouchEvent(MotionEventevent)publicbooleanonTrackballEvent(MotionEventevent)本例介紹另外觸摸屏事件的程序,這個程序在UIpackagepackageimportandroid.app.Activity;importandroid.os.Bundle;importandroid.util.Log;importpublicclassTestMotionEventextendsActivityprivatestaticfinalStringTAG="TestMotionEvent";TextViewm

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論