Android平台应用软件开发

  • 格式:ppt
  • 大小:5.62 MB
  • 文档页数:7

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android平台应用软件开发 平台应用软件开发
主讲人:高焕堂
misoo.tw@gmail.com
2008年11月
1
PART-1: Android平台软件架构 平台软件架构
2
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组件组合而成的高阶服务。
应用程序范例: 应用程序范例:以MP4播放为例ຫໍສະໝຸດ Baidu
- 先选取影片
16
- 下载影片
17
- 播放影片
18
范例程序的状态变化图
19
内部进程(Process)的变化 的变化 内部进程
- 选取影片:FirstActivity物件在独立的 选取影片: 进程里执行。
20
- 下载影片 FirstActivity启动了 下载影片: LoadActivity(在同一个进程里执行) - LoadActivity使用到LoadService
31
Section 2.4: 手机安全管理机制


在传统计算机上,UID是跟随着「人」(例如 计算机的使用者或用户)。Android里的UID是 跟随着「软件」(例如Android应用程序)。 由于每个应用程序都有个UID,只有带着此 UID,才能存取该UID所涵盖的有关资料。所 UID UID 以如果AP-1与AP-2的UID不同,则在预设 (Default)情况下,双方都无法读取对方的资料。 这种分而治之的方式,可以减轻黑客软件的恶 意伤害资料,提升手机的安全性。
26
27

「意图」(Intent)本身是定义为一个类别(Class), 一个Intent物件表达一个目的(Goal)或期望 (Expectation),叙述其所期望的服务或动作、 与动作有关的资料等。Android则根据此Intent 物件之叙述,负责配对,找出相配的组件,然 后将 Intent物件传递给所找到的组件, Android的媒婆任务就完成了。
9
充分发挥应用架构平台之特性(续 : 充分发挥应用架构平台之特性 续):
当我们基于这个新观点时,就能擅用应用 框架的天职和特性,懂得应用框架是稳定 的,而组件层是柔软而易于抽换(PnP)的。 认识到Android 设计的本意:构成虚实相依 的美好架构。应用框架与OS/硬件层两者皆 是实的,不易(也最好不必)更动。而介于 其中的组件层则是虚的,扮演Adapter的角 色,来融合两旁的实的层级。才不违背 Android身为应用框架的本性和天职。
30
● 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物件进行高效率的通讯。
12
PART-2: Android应用软件开发要点 应用软件开发要点
Android应用程序的 种嫡系组件。 应用程序的4种嫡系组件 应用程序的 种嫡系组件。 Intent-based Programming。 。 跨进程的IPC沟通机制。 沟通机制。 跨进程的 沟通机制 手机安全管理机制。 手机安全管理机制。 Java与C/C++沟通的 沟通的JNI界面。 界面。 与 沟通的 界面 GCJ: 将.Jar编译为 编译为Libraries组件。 组件。 编译为 组件
3
Android开放平台的客制化 开放平台的客制化
新 Application
SubClass
SubClass
Linter TV
Buffer or Port
硬體
4
跨语言的Android 应用软件 跨语言的
新 Application Java 程式 SubClass C/C++程式 程式 Linter TV SubClass
13
Section 2.1: Android的4种嫡系组件 的 种嫡系组件 Android有4种一等公民 或暱称为嫡系亲 有 种一等公民 种一等公民(或暱称为嫡系亲 属),包括: ,包括: - Activity: 处理 互动的事情 处理UI互动的事情 - ContentProvider: 储存共享资料 - IntentReceiver: 接收讯息及事件处理 - Service:幕后服务 如硬件及 幕后服务(如硬件及 如硬件及Driver的服务 的服务) 的服务
21
- 下载完毕 下载完毕:LoadActivity结束了。 - LoadService可以持续执行。
22
- 播放影片: FirstActivity启动了 播放影片: VideoActivity(在独立的进程里) - 使用到System Process里的组件
23
- 结束播放: 画面回到FirstActivity 结束播放:
24
- 结束程序: 结束程序:
25
Section 2.2: Intent-based Programming。

Android的4种嫡系组件(即Activity、Service、 IntentReceiver和ContentProvider)之间如何 互相沟通呢?就像我们打手机去车行叫出租 车,而不是直接到街道上叫车。我们送给行 一个简讯或一通电话,表明我们的「意图」 (Intent),当车行经理接到此意图,就依据 你的意图的内含条件而去挑选最合适的出租 车,然后派遣它去接你。
8
充分发挥应用架构平台之特性(续 : 充分发挥应用架构平台之特性 续):
如果Android不更改,有如何移植到既有 的硬件和OS环境上呢? 为了延续自己的硬 件和OS平台,又希望Android的稳定,岂不 是硬碰硬了呢? 这可能是古典的嵌入式思 维所致,把系统视为三个层级:硬件、OS 和应用程序。然后把Android应用框架不是 归到应用程序层,不然就是归到系统层。 新的思维是:将应用框架视为独立的一层, 之上才是应用程序层。之下是可抽换的 C/C++组件层,更往下是OS和硬件。
10
Summary:衔接 与硬件的关键层 衔接AF与硬件的关键层
C/C++程式 程式 Linter TV
Buffer or Port
硬體
11
高焕堂 简介: 技术专长:从事软件开发长达30年,专精于物件导向 技术,及大型系统架构设计。近来,专研Google Android技术,并提供教育训练及技术顾问工作。 书籍出版:目前已经出版3本Android书籍,并将于 2008年12月出版第4本Android书籍。 教育训练:2008年 12月初将开 月初将开Android教育训练课 年 月初将开 教育训练课 程新班,详细请上网:www.misoo1.com 或 www.android1.net论坛。电话: (02)2739-8367 misoo.tw@gmail.com (高焕堂)
Buffer or Port
硬體
5
以汉堡比喻Android 平台架构 以汉堡比喻
芝麻:Android 應用程式 上層麵包:Android 框架 牛肉和 Cheese:框架與硬體 之間的 C/C++組件 底層麵包:硬體組件
6
与25年前的开放硬件架构比较 年前的开放硬件架构比较
IBM PC 主機板(25 年前) Google Android 手機軟體框架(2008)
14
它们必须宣告于AndroidManifest.xml里,如下: 里 如下: 它们必须宣告于
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.misoo.pkm"> <uses-permission xmlns:android="http://schemas.android.com/apk/res/android" android:name="android.permission.INTERNET"> </uses-permission> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".FirstActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".LoadActivity"> <intent-filter> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <service android:name=".LoadService" android:process=":remote"> <intent-filter> <action android:name="com.misoo.pkm.REMOTE_SERVICE" /> </intent-filter> </service> </application> </manifest> 15
28

因此,Intent物件扮演着媒体中介的角色,提供 「Client组件 Android Server组件」之间互 相沟通的相关信息,实现了Client组件与Server 组件之间『不知而亦能用』之效果,这又称为 疏结合(Loosely-coupled)效果。其创造了Server 组件抽换的自由度,这又称为PnP(Plug and Play)。
29
Section 2.3: 跨进程的 跨进程的IPC沟通机制 沟通机制

在Android里,一个Package可以含有多个 Activity,这些Activity可以在同一个进程 (Process)里执行;也可以在不同的进程里执 行。基于Linux的安全限制,以及进程的基 本特性(例如,不同进程的位址空间是独立 的),Activity-a与Activity-b在同一个进程里 执行时,两者沟通方便也快速。但是,当 Activity-a与Activity-b分别在不同的进程里执 行时,两者沟通就属于IPC跨进程沟通了, 不如前者方便,也慢些。
PC 外殼(25 年前) 台灣擅長的硬體組件(2008)
銜接於主機板的硬碟、鍵盤等(25 年前) 銜接 Android 框架與硬體的軟體組件 (25 年前台灣的麥當勞精神---深耕組件, 2008 年,一樣的精神,一樣風雲再現!)
7
充分发挥应用架构平台之特性
应用框架与传统AP或OS的区别在于:应 用框架顾名思义,就是要去框住应用程序的” 型”(Form),让应用程序能拥有共同的界面, 应用程序之间容易互通,与平台也容易互通, 更能在不同硬件上跑。既然要框住应用程序, 当然必须要完整而稳定才能支援各式各样的 应用程序。所以不宜对 Android 的界面与架 构进行各自为政的修改,否则就失去其身为 应用框架之身分、角色和意义了。