免费预览已结束,剩余35页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,android平台應用軟體開發,2010年11月,2,part-1: android平台軟體架構,3,linux核心:android依賴linux 2.6來提供核心的服務,例如記憶體管理、進程(process)管理、執行緒(thread)管理等。 android runtime:java語言層級的virtual machine。 libraries:android裡已經提供的c/c+庫存組件(或稱模組)。例如,sqlite資料庫系統、opengl 3d繪圖系統等。 應用框架(application framework, 簡稱af):這是結合applications與libraries的幕後主架構,讓libraries組件能不斷地為applications所重複使用(reuse)。 應用程式(applications):依據user的期望而將af的組件及libaraies組件組合而成的高階服務。,4,android開放平台的客製化,5,跨語言的android 應用軟體,6,以漢堡比喻android 平台架構,7,與25年前的開放硬體架構比較,8,充分發揮應用架構平台之特性,應用框架與傳統ap或os的區別在於:應用框架顧名思義,就是要去框住應用程式的”型”(form),讓應用程式能擁有共同的介面,應用程式之間容易互通,與平台也容易互通,更能在不同硬體上跑。既然要框住應用程式,當然必須要完整而穩定才能支援各式各樣的應用程式。所以不宜對 android 的介面與架構進行各自為政的修改,否則就失去其身為應用框架之身分、角色和意義了。,9,如果android不更改,有如何移植到既有的硬體和os環境上呢? 為了延續自己的硬體和os平台,又希望android的穩定,豈不是硬碰硬了呢? 這可能是古典的嵌入式思維所致,把系統視為三個層級:硬體、os和應用程式。然後把android應用框架不是歸到應用程式層,不然就是歸到系統層。新的思維是:將應用框架視為獨立的一層,之上才是應用程式層。之下是可抽換的c/c+組件層,更往下是os和硬體。,充分發揮應用架構平台之特性(續):,10,當我們基於這個新觀點時,就能擅用應用框架的天職和特性,懂得應用框架是穩定的,而組件層是柔軟而易於抽換(pnp)的。認識到android 設計的本意:構成虛實相依的美好架構。應用框架與os/硬體層兩者皆是實的,不易(也最好不必)更動。而介於其中的組件層則是虛的,扮演adapter的角色,來融合兩旁的實的層級。才不違背android身為應用框架的本性和天職。,充分發揮應用架構平台之特性(續):,11,summary:銜接af與硬體的關鍵層,12,高煥堂 簡介: 技術專長:從事軟體開發長達30年,專精於物件導向技術,及大型系統架構設計。近來,專研google android技術,並提供教育訓練及技術顧問工作。 書籍出版:目前已經出版3本android書籍,並將於2008年12月出版第4本android書籍。 教育訓練:2008年 12月初將開android教育訓練課程新班,詳細請上網: 或 論壇。電話: (02)2739-8367 (高煥堂),13,part-2: android應用軟體開發要點,android應用程式的4種嫡系組件。 intent-based programming。 跨進程的ipc溝通機制。 手機安全管理機制。 java與c/c+溝通的jni介面。 gcj: 將.jar編譯為libraries組件。,14,section 2.1: android的4種嫡系組件,android有4種一等公民(或暱稱為嫡系親屬),包括: activity: 處理ui互動的事情 contentprovider: 儲存共享資料 intentreceiver: 接收訊息及事件處理 service:幕後服務(如硬體及driver的服務),15,它們必須宣告於androidmanifest.xml裡,如下: ,16,應用程式範例:以mp4播放為例,先選取影片,17,下載影片,18,播放影片,19,範例程式的狀態變化圖,20,內部進程(process)的變化,選取影片:firstactivity物件在獨立的 進程裡執行。,21,下載影片: firstactivity啟動了loadactivity(在同一個進程裡執行) loadactivity使用到loadservice,22,下載完畢:loadactivity結束了。 loadservice可以持續執行。,23,播放影片: firstactivity啟動了videoactivity(在獨立的進程裡) 使用到system process裡的組件,24,結束播放: 畫面回到firstactivity,25,結束程式:,26,section 2.2: intent-based programming。, android的4種嫡系組件(即activity、service、intentreceiver和contentprovider)之間如何互相溝通呢?就像我們打手機去車行叫計程車,而不是直接到街道上叫車。我們送給行一個簡訊或一通電話,表明我們的意圖(intent),當車行經理接到此意圖,就依據你的意圖的內含條件而去挑選最合適的計程車,然後派遣它去接你。,27,28, 意圖(intent)本身是定義為一個類別(class),一個intent物件表達一個目的(goal)或期望(expectation),敘述其所期望的服務或動作、與動作有關的資料等。android則根據此intent物件之敘述,負責配對,找出相配的組件,然後將 intent物件傳遞給所找到的組件,android的媒婆任務就完成了。,29, 因此,intent物件扮演著媒體仲介的角色,提供 client組件 android server組件之間互 相溝通的相關資訊,實現了client組件與server 組件之間不知而亦能用之效果,這又稱為 疏結合(loosely-coupled)效果。其創造了server 組件抽換的自由度,這又稱為pnp(plug and play)。,30,section 2.3: 跨進程的ipc溝通機制, 在android裡,一個package可以含有多個activity,這些activity可以在同一個進程(process)裡執行;也可以在不同的進程裡執行。基於linux的安全限制,以及進程的基本特性(例如,不同進程的位址空間是獨立的),activity-a與activity-b在同一個進程裡執行時,兩者溝通方便也快速。但是,當activity-a與activity-b分別在不同的進程裡執行時,兩者溝通就屬於ipc跨進程溝通了,不如前者方便,也慢些。,31, android的binder system負責高效率的ipc(跨 進程之溝通)。 binder系統是在native層的c/c+組件。java 應用程式(如activity體系之類別)是透過jni介面 去呼叫binder系統(或稱組件)。 binder類別體系的物件內含有proxy和stub標準 的遠距溝通結構,由servicemanager在client端 誕生一個proxy物件,給讓client端(如activity)能 透過ibinder介面或由aidl語言所定義的介面來 呼叫proxy物件,再由proxy來與c/c+層的遠距 service物件進行高效率的通訊。,32,section 2.4: 手機安全管理機制, 在傳統電腦上,uid是跟隨著人(例如電腦的使用者或用戶)。android裡的uid是跟隨著軟體(例如android應用程式)。 由於每個應用程式都有個uid,只有帶著此uid,才能存取該uid所涵蓋的有關資料。所以如果ap-1與ap-2的uid不同,則在預設(default)情況下,雙方都無法讀取對方的資料。這種分而治之的方式,可以減輕駭客軟體的惡意傷害資料,提升手機的安全性。,33, 由於手機系統的安全性越來越受重視,android 的結構具有高度安全性的優勢。例如,activity 與service在不同的進程裡執行,activity能依賴 intent去請求android啟動所需要的service。 在service類別裡,可以做權限的檢查。例如下 圖:,34,當service確認了對方的善意,才將ibinder 介面參考傳給activity,讓activity使用 binder(實質的service)的服務了。,35,section 2.5: java與c/c+溝通的jni介面, jni是java native interface的縮寫。自從java1.1開始,jni就是java平台上的一種標準介面規範,它讓java程式能與c/c+等語言所寫的程式互相溝通。jni並非違章建築,向android的binder system內部也使用jni介面。,36, 許多硬體廠不斷推出創新的硬體功能,c組件透 過迅速汰舊換新,發揮硬體的新功能,不斷改善 應用程式效能。只要維持jni介面的穩定,c組件 的迅速汰舊換新並不會毀掉既有的java程式,卻 能結合硬體效能,促進硬體快速創新。jni就扮 演這個穩定介面的角色,而且是一個極為重要的 角色。,37,section 2.6: gcj: 將.jar編譯為libraries組件, gcj可以將java程式碼編譯為.o目的程式碼。例如,從sourceforge網站: http:/sourceforge.jp/projects/qrcode 下載了qrcode.jar 程式檔。此時可選擇: 1. 直接在android的java程式裡直接含入 qrcode.jar。 2. 動手將此qrcode.jar重新以c語言改寫之。 3. 使用gcj將qrcode.jar編譯為.o程式碼,以及連結為.so,最後放進android模擬器裡。,38, 這gcj途徑帶給android開發者許多益處: 各式各樣的.jar模組,都能迅速成為android平台上的應用程式組件。 java程式師對c程式師的依賴減輕了。 3. 由於android應用程式將ui部分分離開來,大多可單純由java程式來擔任,而幕後的服務(例如qrcode.jar)就沒有ui的成分,這對gcj而言更容易轉譯為.o目的程式,可減
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 31126.3-2026纺织品全氟及多氟化合物的测定第3部分:燃烧-离子色谱法
- 2026文明督导面试题及答案
- 2026物业形象岗面试题及答案
- 2026乡村特色文化面试题及答案
- 2026小主播招聘面试题及答案
- 食品生产企业防止污染措施制度
- 2026年小学一年级上册数学单位换算专项突破练习卷含答案
- 2026年城市公园改造工程合同二篇
- 【教学设计】17《爬天都峰》
- 人事培训处年终工作个人总结
- 2026学年河南省南阳市二年级数学期末提升重点试题(详细参考解析)详细答案和解析
- 2025年审计岗招聘考试《审计基础知识》真题附答案
- 广东省佛山市2025-2026学年高一下学期期末考试生物试卷
- 2025~2026学年宁夏银川市永宁县永宁中学高一年级第二学期期中考试化学试卷
- 农产品质量安全检测机构考核评审员考试题及答案
- 2026年湖南省中考英语真题含答案
- 2026基层血液透析室(中心)建设与服务指南学习解读课件
- 2026形势与政策教学课件-开放共赢 强贸兴邦
- 2026年市场监督管理局招聘考试笔试试题及答案解析
- 《神经外科临床诊疗指南(2025版)》
- 矿产勘查地质学课件
评论
0/150
提交评论