android作品
Ⅰ 移動開發基礎教程:Android是什麼 安卓開發
Android是基於Linux內核的操作系統,是谷歌公司在2007年11月5日公布的手機操作系統,早期由谷歌開發,後由開放手持設備聯盟(Open Handset Alliance)開發。它採用了軟體堆層(software stack,又名以軟體疊層)的架構,主要分為三部分。底層Linux內核只提供基本功能;其他的應用軟體則由各公司自行開發,部分程序以Java編寫。
一、簡介
BlackBerry和iPhone都提供了受歡迎的、高容量的移動平台,但是卻分別針對兩個不同的消費群體。BlackBerry是企業業務用戶的不二選擇。但是,作為一種消費設備,它在易用性和 「新奇特性」 方面難以和iPhone抗衡。Android則是一個年輕的、有待開發的平台,它有潛力同時涵蓋行動電話的兩個不同消費群體,甚至可能縮小工作和娛樂之間的差別。
如今,很多基於網路或有網路支持的設備都運行某種Linux內核。這是一種可靠的平台:可經濟有效地進行部署和提供支持,並且可直接作為面向部署的良好的設計方法。這首攜鏈些設備的UI通常是基於HTML的,可通過PC或Mac瀏覽器查看。但並不是每個設備都需要通過一個常規的計算設備來控制。想像一下傳統的家用電器,例如電爐、微波爐或麵包機。如果您者孫的家用電器由Android控制,並且有一個彩色觸摸屏,會怎麼樣?如果電爐上有一個Android UI,那麼操控者甚至可以烹飪點什麼東西。
二、Android術語
在Eclipse環境中開發Android應用程序需要了解Eclipse環境和Android平台的知識。了解以下術語會有助於用Eclipse插件開發Android應用程序。
Open Handset Alliance
這是一個由谷歌公司主導的組織,它由許多公共和私人組織組成。
Android
這是Open Handset Alliance的主打產品。它是一種針對移動設備的開放源碼操作環境。
模擬器
模擬另一個系統的軟體工具—這常常是在個人計算機(IBM、Mac、Linux)上運行的一個環境,它模擬另一個環境,比如移動計算設備。
Linux
一種開放源碼的操作系統內核,許多計算平台都使用這種操作系統,包括伺服器、桌面計算機、網路設備和移動計算設備。Android在Linux內核上運行。
Dalvik Virtual Machine
Dalvik VM是Android產品組合中的一種操作環境,它在運行時解釋應用程序代碼。Dalvik VM與Java VM相似,但是兩者不兼容。
三、Android簡史
Android平台是Open Handset Alliance的成果,Open Handset Alliance 組織由一群共同致力於構建更好的行動電話的公司組成。這個組織由谷歌領導,包括移動運營商、手持設備製造商、零部件製造商、軟體解決方案和平台提供商以及市場營銷公司。從軟體開發的觀點看,Android正處在開源領域的中心位置。
市場上第一款支持Android的手機是由HTC製造並由T-Mobile供應的G1。這款隱山設備從設想到推出花了大約一年的時間,惟一可用的軟體開發工具是一些實行增量改進的SDK發行版。隨著G1發行日的臨近,Android團隊發布了SDK V1.0,用於這個新平台的應用程序也浮出水面。
為了鼓勵創新,谷歌舉辦了兩屆「Android Developer Challenges」,為優勝的參賽作品提供數百萬美金的獎勵。G1 問世幾個月之後,隨後就發布了Android Market,它使用戶可以瀏覽應用程序,並且可以將應用程序直接下載到他們的手機上。經過大約 18 個月,一個新的移動平台進入公眾領域。
四、Android平台
Android平台被稱為一個產品組合,因為它是一系列組件的集合,包括:
基於Linux內核的操作系統 Java編程環境 工具集,包括編譯器、資源編譯器、調試器和模擬器 用來運行應用程序的Dalvik VM
Android有豐富的功能,因此很容易與桌面操作系統混淆。Android是一個分層的環境,構建在Linux內核的基礎上,它包括豐富的功能。UI 子系統包括:
窗口 視圖 用於顯示一些常見組件(例如編輯框、列表和下拉列表)的小部件。
Android包括一個構建在WebKit基礎上的可嵌入瀏覽器,iPhone 的Mobile Safari瀏覽器同樣也是以WebKit為基礎。
Android提供多種連接選項,包括WiFi、藍牙和通過蜂窩(cellular)連接的無線數據傳輸(例如GPRS、EDGE 和3G)。Android應用程序中一項流行的技術是鏈接到谷歌地圖,以便在應用程序中顯示地址。Android軟體棧還提供對基於位置的服務(例如GPS)和加速計的支持,不過並不是所有的Android設備都配備了必需的硬體。另外還有攝像支持。
過去,移動應用程序努力向桌面應用程序看齊的兩個領域分別是圖形/媒體和數據存儲方法。Android通過提供對2D和3D圖形的內置支持,包括OpenGL 庫,解決了圖形方面的挑戰。由於Android平台包括流行的開源SQLite 資料庫,因此緩解了數據存儲的負擔。圖1顯示一個簡化的Android軟體層次結構。
五、應用程序架構
如前所述,Android運行在Linux內核上。Android應用程序是用Java編程語言編寫的,它們在一個虛擬機(VM)中運行。需要注意的是,這個VM並非您想像中的JVM,而是Dalvik Virtual Machine,這是一種開源技術。每個Android應用程序都在Dalvik VM的一個實例中運行,這個實例駐留在一個由Linux內核管理的進程中,如下圖所示。
Android應用程序由一個或多個組件組成:
活動
具有可視UI的應用程序是用活動實現的。當用戶從主屏幕或應用程序啟動器選擇一個應用程序時,就會開始一個動作。
服務
服務應該用於任何需要持續較長時間的應用程序,例如網路監視器或更新檢查應用程序。
內容提供程序
可以將內容提供程序看作資料庫伺服器。內容提供程序的任務是管理對持久數據的訪問,例如SQLite資料庫。如果應用程序非常簡單,那麼可能不需要創建內容提供程序。如果要構建一個較大的應用程序,或者構建需要為多個活動或應用程序提供數據的應用程序,那麼可以使用內容提供程序實現數據訪問。
廣播接收器
Android應用程序可用於處理一個數據元素,或者對一個事件(例如接收文本消息)做出響應。
Android應用程序是連同一個AndroidManifest.xml文件一起部署到設備的。AndroidManifest.xml包含必要的配置信息,以便將它適當地安裝到設備。它包括必需的類名和應用程序能夠處理的事件類型,以及運行應用程序所需的許可。例如,如果應用程序需要訪問網路 — 例如為了下載一個文件 — 那麼manifest文件中必須顯式地列出該許可。很多應用程序可能啟用了這個特定的許可。這種聲明式安全性有助於減少惡意應用程序損害設備的可能性。
六、所需工具
開始開發Android應用程序的最簡捷的方式是下載AndroidSDK 和EclipseIDE。Android開發可以在微軟Windows、Mac OS X 或Linux上進行。
本文假設您使用的是Eclipse IDE和用於Eclipse的Android Developer Tools插件。Android應用程序是用Java語言編寫的,但是是在Dalvik VM(非Java虛擬機)中編譯和執行的。在Eclipse中用Java語言編程非常簡單;Eclipse 提供一個豐富的Java環境,包括上下文敏感幫助和代碼提示。Java 代碼通過編譯後,Android Developer Tools 可確保適當地將它打包,包括AndroidManifest.xml 文件。
雖然沒有Eclipse和Android Developer Tools插件也可以開發Android應用程序,但是那樣就需要熟悉Android SDK。
AndroidSDK 是作為一個ZIP文件發布的,可以將該文件解壓到硬碟上的一個目錄中。由於有多個SDK更新,建議有意識地組織開發環境,以便在不同的SDK安裝之間輕松地切換。
SDK 包括:
android.jar
Java 歸檔文件,其中包含構建應用程序所需的所有的Android SDK 類。
documention.html和docs目錄
本地和網上提供的SDK文檔。這些文檔的主要形式為JavaDocs,以便於在SDK中導航大量的包。文檔還包括一個高級開發指南和Android社區的鏈接。
Samples目錄
Samples子目錄包含各種應用程序的源代碼,包括ApiDemo,該應用程序演示了很多API。這個示例應用程序可以作為Android應用程序開發的良好起點。
Tools目錄
包含所有用於構建Android應用程序的命令行工具。最常用、最有用的工具是adb實用程序(Android Debug Bridge)。
usb_driver
該目錄包含將開發環境連接到支持Android的設備(例如G1或Android Dev 1解鎖開發手機)所需的驅動程序。只有Windows平台的開發人員才需要這些文件。
Android應用程序可以在實際的設備上運行,也可以在Android SDK 附帶的Android Emulator上運行。圖 3 顯示Android Emulator 的主屏幕。
七、Android Debug Bridge
adb實用程序支持一些可選命令行參數,以提供強大的特性,例如復制文件到設備或從設備復制文件。可以使用shell命令行參數連接到手機本身,並發送基本的shell命令。圖 4 顯示在通過USB線連接到Windows筆記本電腦的一個實際設備上運行的adb shell命令。
在這個shell環境中,可以:
顯示網路配置,網路配置可顯示多個網路連接。注意這多個網路連接:
lo是本地或loopback連接。
tiwlan0是WiFi連接,該連接由本地DHCP伺服器提供一個地址。
顯示PATH環境變數的內容。
執行su命令,以成為超級用戶。
將目錄改為/data/app,其中存放用戶應用程序。
列出包含某個應用程序的目錄。Android應用程序文件實際上是歸檔文件,可通過WinZip之類的軟體查看。擴展名為apk。
發出ping命令,查看Google.com是否可用。
從相同的命令提示符環境中,還可以與SQLite 資料庫交互,啟動程序以及執行許多其他系統級任務。想像一下您正在連接到電話,因此這是非常了不起的功能。
Ⅱ 《Android系統級深入開發》pdf下載在線閱讀,求百度網盤雲資源
《Android系統級深入開發》(韓超//梁泉)電子書網盤下載免費在線閱讀
資源鏈接:
鏈接:
書名:Android系統級深入開發
作者:韓超//梁泉
豆瓣評分:6.2
出版社:電子工業出版社
出版年份:2011-2
頁數:372
內容簡介:《Android系統級深入開發:移植與調試》是一本全面介紹Android系統級開發的作品,全書以移植和調試為重點。Android具有一個龐大的軟體系統,任何開發者都難以掌握系統的每一個細節。因此,如何高效地理解和開發系統,就成了Android系統級別工程師面對的主要問題。《Android系統級深入開發:移植與調試》作者以實際的開發經驗為基礎,以軟體工程思想為指導,完成了《Android系統級深入開發:移植與調試》。《Android系統級深入開發:移植與調試》介紹了從Android開源工程到一個基於實際硬體產品中的主要工作,一方面讓讀者清晰把握各個子系統的架構,另一方面讓讀者把握移植這個開發核心環節的要點。
讀者對象:Linux開發人員、移動設備開發人員、Android系統框架層和底層開發人員、有意圖深入學習Android的人員、手機研發的公司。
作者簡介:移動系統開發資深工程師,在Android領域具有完備的知識和前沿的技術,長期從事一線開發工作。韓超是中國大陸地區較早參與Android系統開發的人員之一,也是中國大陸的Androidin(機鋒網)開發社區的核心成員和重要組織者之一;也曾經引領大陸各種相關技術人員進入Android領域,並組織參與國內外的相關枝術交流。
Ⅲ C#開發Android應用實戰的作品目錄
目 錄第1章 Android、移動設備和Marketplace簡介 11.1 產品比較 11.1.1 .NET Framework 21.1.2 Mono 31.1.3 Mono for Android 41.1.4 開發工具 61.2 移動開發 61.2.1 解決支持問題 71.2.2 設計問題 71.3 Android 81.3.1 Android發展簡史 81.3.2 為Android編寫基於Web的應用程序 91.3.3 為Android編寫本機應用程序 91.3.4 Android開發問題 91.3.5 Android SDK工具 111.3.6 Android開發成本 111.4 跨平台替代方案 121.4.1 其他跨平台工具 121.4.2 選擇跨平台工具時的注意事項 121.5 小結 15第2章 Mono for Android簡介 172.1 開始開發前的准備工作 172.1.1 Mono的含義 172.1.2 Mono for Android的含義 182.1.3 使用Mono for Android的原因 182.1.4 在使用Mono for Android時需要權衡的事項 202.1.5 Mono for Android開發環境需要的其他工具 212.2 利用Mono for Android進行Visual Studio開發 242.2.1 一般設置 242.2.2 生成Hello Android 252.2.3 日誌記錄 282.2.4 調試 292.2.5 測試 292.2.6 部署 302.3 使用MonoDevelop進行Monofor Android開發 302.3.1 一般設置 302.3.2 構建Hello Android 312.3.3 日誌記錄 322.3.4 調試 332.3.5 測試 332.3.6 部署 332.4 小結 34第3章 了解Android/Mono for Android應用程序 353.1 Android應用程序的含義 363.1.1 Android應用程序的構建基塊 373.1.2 組件之間的通信:Android意圖 463.2 綁定組件:Android清單 483.2.1 Android清單的基礎知識 483.2.2 通過Visual Studio為Mono forAndroid編輯清單 513.3 小結 53第4章 規劃和構建應用程序用戶界面 554.1 成功構建移動UI的指導原則 554.2 構建Android UI 564.2.1 視圖 564.2.2 設計表面 574.3 選擇控制項布局 574.3.1 AbsoluteLayout 584.3.2 FrameLayout 594.3.3 LinearLayout 594.3.4 RelativeLayout 614.3.5 TableLayout 624.3.6 優化布局 644.4 設計自己的用戶界面控制項 644.4.1 TextView 664.4.2 EditText 664.4.3 AutoCompleteTextView 664.4.4 Spinner 674.4.5 Button 694.4.6 CheckBox 694.4.7 RadioButton和組 694.4.8 Clock 724.4.9 Picker 724.4.10 Image 754.4.11 虛擬鍵盤 804.5 控制菜單 824.5.1 菜單系統介紹 834.5.2 菜單 834.5.3 子菜單 854.5.4 上下文菜單 864.5.5 將菜單定義為資源 874.6 獨立於解析度的UI 904.6.1 支持各種屏幕資源 904.6.2 使用Android Market支持 924.6.3 多個屏幕解析度的最佳做法 924.7 構建用戶界面:手機和平板電腦示例 934.8 小結 98第5章 使用數據 995.1 使用SQLite 995.1.1 建立資料庫 1005.1.2 建立表 1015.1.3 使用SQL語句 1025.2 升級策略 1045.2.1 就地升級 1045.2.2 復制數據 1055.3 特定於Android的資料庫選項 1055.4 使用遠程數據 1075.4.1 訪問企業服務 1085.4.2 使用SOAP 1095.4.3 使用基於REST的Web服務 1135.4.4 使用JSON 1145.4.5 利用POST發送數據 1185.5 使用LINQ和XML檢索數據 1195.6 以負責任的態度使用Web服務 1215.7 使用遠程SQL Server資料庫 1225.8 小結 124第6章 將數據綁定到控制項 1256.1 Mono for Android中的數據綁定 1266.1.1 數據適配器的含義 1266.1.2 適配器視圖的含義 1276.1.3 這三項彼此之間的關聯方式 1276.1.4 使用適配器視圖和大型數據集 1286.1.5 進一步探究適配器 1306.1.6 使用本機適配器 1306.1.7 進一步探究適配器視圖 1316.1.8 使用本機適配器視圖 1326.2 使用游標 1326.2.1 使用游標填充Spinner 1326.2.2 使用帶有Gallery的游標 1406.3 使用列表 1476.3.1 在列表中顯示簡單數據 1486.3.2 使用Android的ListAdapter 1506.3.3 使用自定義列表適配器來自定義ListView 1526.3.4 處理ListView事件 1586.3.5 首選項屏幕 1606.3.6 嵌套導航 1636.3.7 分組列表 1656.3.8 在網格中顯示數據 1696.4 小結 174第7章 使用文件系統和應用程序首選項 1757.1 使用文件系統 1757.1.1 文件系統類型和結構 1767.1.2 QuickEdit示常式序:使用文件存儲的例子 1807.2 使用應用程序首選項 1867.2.1 應用程序首選項類型 1867.2.2 創建自己的應用程序首選項 1877.2.3 首選項程序 1887.2.4 偵聽首選項的更改 1947.2.5 處理XML 1957.3 小結 196第8章 針對設備硬體編程 1978.1 使用感測器 1978.1.1 引用感測器管理器 1988.1.2 感測器支持 1988.1.3 訪問感測器 1988.1.4 使用感測器 1998.1.5 了解感測器類型值 2008.2 對加速度的響應 2028.2.1 使用XYZ坐標系 2028.2.2 對加速計進行編碼 2038.3 構建電子羅盤 2038.4 振動 2088.5 網路連接 2098.5.1 ConnectivityManager 2098.5.2 檢查用戶通信首選項 2098.5.3 檢查BackgroundDataSetting的更改 2108.5.4 檢查當前網路配置 2118.5.5 創建網路連接通知 2118.5.6 WifiManager 2118.6 Bluetooth管理器 2168.7 在應用程序中啟用語音識別功能 2188.8 獲取建議路線規劃指示 2198.9 小結 225第9章 使用多媒體——音頻、視頻和照相機 2279.1 Android媒體類 2279.2 播放音頻和視頻 2299.2.1 媒體播放器支持的格式 2299.2.2 音頻播放編程 2309.2.3 視頻播放編程 2339.2.4 控制播放 2379.2.5 管理播放輸出 2379.3 錄制音頻和視頻 2379.3.1 使用意圖來錄制視頻 2389.3.2 使用媒體記錄器 2419.4 圖像和使用照相機 2449.4.1 使用意圖拍照 2449.4.2 控制照相機 2479.4.3 管理照相機設置和圖片選項 2479.5 向媒體存儲器添加新媒體 2539.5.1 使用媒體掃描程序 2549.5.2 向存儲器添加新媒體 2559.6 語音識別 2559.7 小結 257第10章 與其他應用程序和庫通信 25910.1 Android應用程序集成 25910.1.1 打開瀏覽器 25910.1.2 打開電子郵件 26210.1.3 打電話 26310.1.4 發送Text/SMS消息 26410.1.5 在Maps應用程序中打開位置 26610.1.6 打開YouTube視頻 26710.1.7 開放市場 26710.2 應用程序集成 26810.2.1 與HootSuite以及其他Twitter應用程序的簡單集成 26810.2.2 配置意圖過濾器 26910.2.3 處理傳入的意圖請求 27010.3 與聯系人進行集成 27010.3.1 顯示聯系人詳細信息 27310.3.2 選擇聯系人 27410.3.3 創建新聯系人 27510.3.4 創建新聯系人或者添加到現有的聯系人 27610.4 小結 277第11章 開發後台服務和非同步代碼 27911.1 服務生命周期 28011.1.1 創建第一個服務 28011.1.2 服務的優先順序排序 28311.2 使用線程進行非同步處理 28411.2.1 手動線程 28411.2.2 利用System.Threading.Tasks 28611.2.3 帶有IntentService的隱式線程 28811.3 與UI進行通信 28911.3.1 使用Binder和服務連接方法 28911.3.2 使用廣播接收器方法 29211.3.3 使用靜態事件方法 29511.4 通知用戶 29811.4.1 通過警報和IntentService來調度意圖 30011.4.2 使用C2DM來推送消息 30111.5 小結 310第12章 畫布和繪制資源類型:構建自定義Android圖形 31112.1 在Mono for Android中使用圖形 31212.2 使用Canvas對象 31312.2.1 圖形基元 31412.2.2 Canvas對象 31512.2.3 Paint對象 31612.2.4 Bitmap對象 31712.2.5 組合在一起 31712.2.6 選擇最佳方法 33712.3 2D圖形庫 33812.4 使用繪制資源類型 33912.4.1 作為XML資源的繪制資源類型 33912.4.2 簡單和復合的繪制資源類型 34012.4.3 繪制資源類型的實際應用 34012.5 小結 354第13章 使用位置信息 35713.1 理解位置的基本知識 35813.1.1 確定位置 35813.1.2 基於位置的數據中斷 35913.1.3 使用基於位置的服務 35913.1.4 在模擬器上配置基於位置的應用程序 35913.2 選擇一個位置提供程序 36113.2.1 確定哪些提供程序可供使用 36113.2.2 根據標准查找位置提供程序 36113.3 地理編碼 36313.3.1 前向地理編碼 36313.3.2 反向地圖編碼 36513.4 構建接近警報 36613.5 使用Google Maps 36813.5.1 獲取開發/調試MD5指紋 36913.5.2 獲取生產/發布MD5指紋 36913.5.3 創建基於地圖的活動 36913.5.4 在布局文件中創建地圖 37113.5.5 使用覆蓋的MapView控制器 37213.6 小結 374第14章 國際化和本地化 37514.1 選擇本地化策略 37614.2 更新語言和區域設置 37814.3 了解Android本地化機制 37914.3.1 設置默認資源 38014.3.2 添加本地化支持 38014.3.3 選擇資源的詳細過程 38114.4 支持多語言 38214.4.1 利用Strings.xml文件 38214.4.2 翻譯文本 38314.4.3 翻譯控制項文本 38614.5 本地化其他資源 38714.6 Strings.xml的高級用法 39114.6.1 字元串數組 39114.6.2 復數 39114.6.3 字元串替換 39214.7 使用格式轉換 39414.7.1 格式化日期 39514.7.2 格式化數字和貨幣 39514.8 小結 396第15章 在Mono for Android、MonoTouch和WindowsPhone7之間共享代碼 39715.1 三大平台概述 39715.1.1 Mono for Android 39715.1.2 MonoTouch 39815.1.3 Windows Phone 7 39915.2 使用類庫來分離代碼 40015.2.1 使用預處理器指令 40015.2.2 Mono for Android 40115.2.3 Windows Phone 7 40215.2.4 MonoTouch 40215.3 每種平台上可用的程序集 40215.4 一個通用的類庫 40515.4.1 Mono for Android 40715.4.2 MonoTouch 40815.4.3 Windows Phone 7 40915.5 匯總:創建一個跨平台應用程序 41015.6 小結 422第16章 准備並向Market發布應用程序 42316.1 准備應用程序 42416.1.1 測試應用程序 42416.1.2 找到關鍵的測試區域 42516.1.3 用於測試的工具 42616.1.4 與同事和用戶一起進行測試 43316.2 向Android Market發布應用程序 43416.2.1 對應用程序進行版本控制 43416.2.2 創建最終版本 43516.2.3 為應用程序簽名 43716.2.4 上傳到Android Market 44116.3 小結 442第17章 Android平板電腦 44517.1 分析Android平板電腦市場 44517.2 設計平板電腦UI 44617.3 使用操作欄 44717.3.1 刪除操作欄 44817.3.2 向操作欄添加項目 44917.3.3 使用應用程序圖標 45217.3.4 向堆棧上方導航 45317.3.5 添加並使用操作項 45317.3.6 創建選項卡式界面 45417.4 使用片段控制部分屏幕 45517.4.1 創建片段 45717.4.2 更多片段 46117.5 小結 469附錄A 針對開發人員的一些提示以及Mono for Android的未來前景 471
Ⅳ 基於android系統的手機游戲的開發
如果你有興趣為Android平台開發游戲,有很多你需要了解的東西。如果你有過游戲開發經驗,那麼轉移到移動平台上來將不是特別困難。你主要只需學習其架構以及API就行了。如果你是一名游戲開發新手,我總結了一張列表,上面有你必需知道的東西,供你起步用。這些知識適用於很多類型的游戲,包括動作類、策略類、模擬類和益智類。Android是一個基於Java的環境。這對初學者來說是個好消息,因為相對於C,Java被廣泛認為是一門更容易上手的語言,它是移動開發的規范。Google也做了一件出色的工作,它將API文檔化並提供示例代碼供使用。其中有個叫做APIDemos的示例幾乎展示了所有API的功能。如果你熟悉Java並且用過Eclipse,要讓你的第一個應用跑起來那是相當簡單。如果你以前從沒寫過代碼,在你前進路上還要學習很多,但別氣餒。
獲取SDK
新手上路的第一步便是獲取AndroidSDK(軟體開發工具包)。SDK里有一個核心類庫,一個模擬器,一些工具和示例代碼。我強烈建議使用Eclipse和AndroidEclipse插件。如果你玩Android的話,EclipseIDE對Java開發者來說很好用。如果這是你第一次開發Java項目,你可能會需要下載全套JDK,它裡麵包括簽名和部署你的應用程序的一些工具。
學習應用程序架構
別急著一頭扎進開發的海洋里,理解Android應用程序架構是很重要的。如果你不學一下,你設計出來的游戲在線下將很難調試。你將需要理解、Activities、Intents以及它們怎樣相互聯系。Google提供了很多有用的架構信息。真正重要的是要理解為什麼你的游戲需要多於一個的Activity,以及什麼才是設計一個有良好用戶體驗的游戲。要理解這些,首先要了解什麼是Activity生命周期。
學習Activity生命周期
Activity生命周期由Android操作系統來管理。你的activity創建、恢復、暫停、銷毀都受操作系統的支配。正確處理這些事件是很重要的,這樣應用程序才能表現良好,做用戶認為正確的事。在你設計你的游戲之前了解所有這些是如何工作的是件好事,因為以後你可以為自己節省調試時間和昂貴的重新設計時間。對大多數應用來說,默認的設置將工作正常,但對於游戲,你可能需要考慮將標志打開。當設置為默認時,Android在它認為合適時會創建activity的新實例。對於游戲來說,你可森余能只需要一個游戲activity的實例。這對於你要怎樣管理事務的狀態有些影響,但對於我來說,這解決了一些資源管理的問題,應予以考慮。
主循環
根據你寫的游戲的類型敏春賣,你可能需要也可能不需要一個主循環。如果你的游戲不依賴於時間或者它僅僅對用戶所做的加以回應,並且不做任何視覺上的改變,永遠等待著用戶的輸入,那麼你就不需要主循環。如果你寫的是動作類游戲或者帶有動畫、定時器或任何自動操作的游戲,你應該認真考慮下使用主循環。
游戲的主循環以一個特定的順序通常盡可能多的在每秒鍾內「滴答」提醒子系統運行。你的主循環需要在它自己的線程里運行,原因是Android有一個主用戶界面線程,如果你不運行自己的線程,用戶界面線程將會被你的游戲所阻塞,這會導致Android操作系統無法正常的更新任務。執行的順序通常如下:狀態,輸入,人工智慧,物理,動畫,聲音,錄像。
更新狀態意思是管理狀態轉換,例如游戲的結束、人物的選擇或下一個級別。很多橋逗時候你需要在某個狀態上等上幾秒鍾,而狀態管理應該處理這種延遲,並且在時間過了之後設置成下一個狀態。
輸入是指用戶按下的任何鍵、對於滾動條的移動或者用戶的觸摸。在處理物理之前處理這些是很重要的,因為很多時候輸入會影響到物理層,因而首先處理輸入將會使游戲的反應更加良好。在Android里,輸入事件從主用戶界面線程而來,因此你必須寫代碼將輸入放入緩沖區,這樣你的主循環可以在需要的時刻就從緩沖區里取到它。這並非難事。首先為下一個用戶輸入定義一個域,然後將或函數設為接到一個用戶動作就放到那個域里,有這兩步就夠了。如果對於給定游戲的狀態,這是一個合法的輸入操作,那麼所有輸入需要在那一刻做的更新操作都已經定下來了,剩下來就讓物理去關心怎樣響應輸入吧。
人工智慧所做的類似於用戶在決定下一個要「按」哪個按鈕。學習怎樣寫人工智慧程序超出了這篇文章的范圍,但大體的意思是人工智慧會按照用戶的意圖來按按鈕。這些也有待物理去處理和響應吧。
物理可能是也可能不是真正的物理。對於動作類游戲來說,關鍵點是要考慮到上一次更新的時間、正在更新的當前時間、用戶輸入以及人工智慧,並且決定它們朝著什麼方向發展和是否會發生沖突。對於一個你可視化地抓取一些部件並滑動它們的游戲來說,物理就是這個游戲中滑動部件或者使之放入合適的位置的部分。對於一個小游戲來說,物理即使這個游戲中決定答案是錯還是對的部分。你可能將其命名為其他東西,但每個游戲都有一個作為游戲引擎的紅肉部分(譯者註:可能是主體部分的意思),在這篇文章里,我把這部分稱為物理。
動畫並非像在游戲里放入會動的gif圖片那樣簡單。你需要使得游戲能在恰當的時間畫出每一幀。這並沒有聽起來那麼困難。保留一些像isDancing、danceFrame和那樣的狀態域,那樣動畫更新便能決定是否可以切換到下一幀去了。動畫更新真正做的事就那麼多。真正來顯示動畫的變化是由錄像更新來處理的。
聲音更新要處理觸發聲音、停止聲音、音量變化以及音調變化。正常情況下當寫游戲的時候,聲音更新會產生一些傳往聲音緩沖區的位元組流,但是Android能夠管理自己的聲音,因而你的選擇將是使用SoundPool或者MediaPlayer。它們都需要小心處理以免出錯,但你要知道,因為一些底層實現細節,小型、低比特率的聲音文件將帶來最佳的性能和穩定性。
錄像更新要考慮游戲的狀態、角色的位置、分數、狀態等等,並將一切畫到屏幕上。如果使用主循環,你可能需要使用SurfaceView,並做一個「推」繪制。對於其他視圖,視圖本身能夠調用繪制操作,主循環不必處理。SurfaceView每秒產生的幀數最多,最適合於一些有動畫或屏幕上有運動部件的游戲。錄像更新所要做的工作是獲取游戲的狀態,並及時地為這個狀態繪制圖像。其他的自動化操作最好由不同的更新任務來處理。
3D還是2D?
在開始寫游戲之前,你要決定是做3D的還是2D的。2D游戲有一個低得多的學習曲線,一般更容易獲得良好的性能。3D游戲需要更深入的數學技能,並且如果你不在意的話會有性能問題產生。如果你打算畫比方框和圓圈更復雜的圖形,還需要會使用3DStudio和Maya那樣的建模工具。Android支持OpenGL用來3D編程,並且在OpenGL方面有很多很好的教程可供學習。
建立簡單、高質量的方法
上手時,要確保你整個游戲不要就用一個龐大而冗長的方法。如果你遵循我上面描述的主循環模式,這將相當簡單。每個你寫的方法應當完成一個非常特定的任務,並且它就應該無差錯地那樣做。舉例來說,如果你需要洗一副紙牌,你應該寫一個「」的方法,並且該方法就應該只做這一件事。
這是一個適用於任何軟體開發的編碼實踐,但對於游戲開發來說這尤為重要。在一個有狀態的、實時的系統里,調試將變得非常困難。使你的方法盡量的小,一般的經驗法則是每個方法有且僅有一個目的(譯者註:完成且僅完成一個功能)。如果你要為一個場景用編程方式畫一個背景,你可能需要一個叫做「」的方法。諸如此類的任務能夠很快完成,因而你可以按照搭積木的方法來開發你的游戲,而你能夠繼續添加你要的功能,並且不會使得這一切難以理解。
最重要的是效率!
性能是任何游戲的主要問題。我們的目標是使得游戲的反應越快越好,看起來越流暢越好。某些方法如Canvas.drawLine比較慢。並且要將屏幕大小的點陣圖畫到主畫布上,每一幀都是代價昂貴的。如何權衡對於達到最佳性能很有必要。確保管理好你的資源,使用技巧來以最少量的CPU資源完成你的任務。如果性能不好的話,即使是最好的游戲玩起來也沒勁。人們一般對於游戲卡或者響應慢幾乎難以容忍。
提示和技巧
看一下SDK中的示例LunarLander。它使用SurfaceView,這對於一個每秒需要處理最多幀的游戲來說是合適的。如果你要做3D,示例中有GLView可以處理3D顯示的很多初始化工作。對LightRacer來說,我不得不優化把所有東西都畫出來這種方法,否則幀率將會大大地降低。我只在視圖初始化的時候把背景畫進一個點陣圖里一次。路徑放在它們自己的點陣圖里,隨著車手的前進而更新。這兩個點陣圖在每一幀里都被畫進主畫布中去,車手畫在頂端,到最後會有一個爆炸。這種技術使得游戲運行在一個可以玩的程度。
如果適用的話,使得你的點陣圖的大小精確等於你打算畫到屏幕上的大小,這也是個好的實踐。這么做了以後就需要縮放,可以節省CPU資源。
在游戲中始終一致的點陣圖配置(如RGBA8888)。這將會通過減少不同格式之間轉換的時間來節省圖形庫的CPU時間。
如果你決定開發3D游戲但沒有3D方面的知識,你需要挑選一兩本3D游戲編程方面的書並學習線性代數。你最少要理解點積、叉積、向量、單元向量、法線、矩陣和變換。這方面我遇到的最好的書是叫《3D游戲編程和計算機圖形學數學》。
聲音文件要小而且低比特率。需要載入的越少,載入速度越快,游戲所需內存越少。
聲音使用OGG文件,圖片使用PNG文件。
確保釋放所有媒體播放器,當Activity銷毀時空出所有的資源。這能保證垃圾收集器清除了所有東西,也能保證在兩次游戲開始之間沒有內存泄露。
加入Android谷歌小組,尋求社區支持。這里有人可以在開發過程中給你幫助。
最重要的是,花時間測試再測試,確保每一小部分都如你所願地工作。改善游戲是整個開發中最耗時最困難的部分。如果你匆匆將其推向市場,你很可能會使用戶們失望,你會感到你的努力都白費了。你不可能使所有人都喜歡你寫的東西,但你至少要盡量發布你最高質量的作品。
Ⅳ 怎麼在android應用商店發布作品
在Android應用商店上傳APP,簡單來說,分為幾步:
1、找到應用商店網址
你要上傳到哪個應用商店,請搜索相關網址,並找到開發者注冊入口。
小米應用商店:小米開放平台
豌豆莢應用商店:豌豆莢開發者中心
2、注冊開發者賬號
在上面注冊開發者賬號後才能上傳APP。
3、上傳APP
注冊賬號後,上傳你的APP,不過需要等待應用商店的審核。
4、等待審核
在應用商店審核時,如果應用商店方面有提出疑問,需要做回答或修改APP。
5、APP上線
審核通過後,APP在應用商店上線。