厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日 Android手机开发 厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
纲要 Android概述 平台架构 重要组件 开发环境介绍 Hello World! Demo演示
Android概述 Android 手机操作系统是2007年11月5日由 美国Google公司基于Linux整合开发的嵌入 式系统,后开源并由后由开放手机联盟Open Handset Alliance)开发。在全世界范围内, Moto、HTC(多普达)、联想、三星等众多 公司都已经推出Android手机产品和上网本 产品,而且有越来越多加速上升的趋势。
Android大事件 2005 2007 2008 Google收购了成立仅22个月的高科技企业Android 9月22日,谷歌正式对外发布第一款Android手机——HTC G1 9月23日,谷歌发布Android1.0
Android大事件 2009 2010 2011 2012 4月3日,Android1.5正式发布 5月19日,Google正式对外发布Android2.2智能操作系统 12月7日,Google正式发布Android2.3操作系统 2011 2月2日,Android3.0正式发布 2月3日,谷歌发布了专用于平板电脑的Android 3.0蜂巢系统 10月19日,谷歌正式发布Android 4.0操作系统 2012 1月4日,Android Market上的应用程序数量突破40万个,每4个月增加10万个应用程序 3月1日,Google对外宣布,Android Market的累计下载量已经突破130亿次
纲要 Android概述 平台架构 重要组件 开发环境介绍 Hello World! Demo演示
平台架构
Linux核心层 Android基于Linux 2.6提供核心系统服务,例如:安全、 内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬 件细节而为上层提供统一的服务。
Libraries类库层 Android包含一个C/C++库的集合,供Android系 统的各个组件使用。这些功能通过Android的应 用程序框架(application framework)暴露给开 发者。 系统C库——标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备 媒体库——基于PacketVideo的OpenCORE。这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、 H.264、 MP3、 AAC、 AMR、JPG、 PNG 界面管理——管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层 LibWebCore——新式的Web浏览器引擎,驱动Android 浏览器和内嵌的web视图 SGL——基本的2D图形引擎 3D库——基于OpenGL ES 1.0 APIs的实现。库使用硬件3D加速或包含高度优化的3D软件光栅 FreeType ——位图和矢量字体渲染 SQLite ——所有应用程序都可以使用的强大而轻量级的关系数据库引擎
Android Runtime 核心库:提供大部分在Java编程语言核心类库中 可用的功能 虚拟机:专为移动设备优化过的虚拟机,每一个 Android应用程序是Dalvik虚拟机中的实例
Application Framework 通过提供开放的开发平台,Android使开发者能 够编制极其丰富和新颖的应用程序。 简化组件软件的重用;任何一个应用程序都可以 发布它的功能块并且任何其它的应用程序都可以 使用其所发布的功能块(不过得遵循框架的安全 性限制)
Application应用层 Android装配一个核心应用程序集合,包括电子 邮件客户端、SMS程序、日历、地图、浏览器、 联系人和其他设置等 所有应用程序都是用Java编程语言写的 开发我们自己的手机应用,r u ready?
纲要 Android概述 平台架构 重要组件 开发环境介绍 Hello World! Demo演示
Broadcast Receivers(广播接收器) 重要组件 Services(服务) Broadcast Receivers(广播接收器) Notifications(通知) …… Intents(意图) Content(内容) Activities(活动) 应用程序的显示层。每一个画面对应于你的应用程序,将会是Activity类的扩展。Activity使用Views去构建UI来显示信息和响应用户的行为。就桌面开发而言,一个Activity相当于Form Android应用程序中不可见的“工人”。 Service组件运行时不可见,但它负责更新的数据源和可见的Activity,以及触发通知。它们常用来执行一些需要持续运行的处理。类似于windows的系统服务 用户通知的框架。Notification用来在不需要焦点或不中断它们当前Activity的情况下提示用户。它们是Service或 Broadcast Receiver获得用户注意的首选方式。例如,当设备收到文本信息或外部来电时,它通过闪光,发声,显示图标或显示对话框信息来提醒你。
Broadcast Receivers(广播接收器) 重要组件 Services(服务) Broadcast Receivers(广播接收器) Notifications(通知) …… Intents(意图) Content(内容) Activities(活动) Intent广播的“消费者”。通过创建和注册一个Broadcast Receiver,应用程序可以监听符合特定条件的广播的Intent。Broadcast Receiver 会自动的启动你的Android应用程序去响应新来的Intent。Broadcast Receiver是事件驱动程序的理想手段。 提供共享的数据存储。Content Provider(内容提供器)用来管理和共享应用程序的数据库。在应用程序间,Content Provider是共享数据的首选方式。这意味着,你可以配置自己的Content Provider去存取其他的应用程序或者通过其他应用程序暴露的Content Provider去存取它们的数据。Android设备本身包含了几个Content Provider来访问像联系人信息等有用的数据库。 简单的消息传递框架。使用Intent,你可以在整个系统内广播消息或者给特定的Activity或者服务来执行你的行为意图。系统会决定那个(些)目标来执行适当的行为。
重要java 包 android.app :提供高层的程序模型、提供基本的运行环境 android.content 包含各种的对设备上的数据进行访问和发布的类 android.database :通过内容提供者浏览和操作数据库 android.graphics :底层的图形库,包含画布,颜色过滤,点,矩形,可以将他们 直接绘制到屏幕上. android.location :定位和相关服务的类 android.media :提供一些类管理多种音频、视频的媒体接口 android.net :提供帮助网络访问的类,超过通常的java.net.* 接口 android.os :提供了系统服务、消息传输、IPC机制 android.opengl :提供OpenGL的工具,3D加速 android.provider :提供类访问Android的内容提供者 android.telephony :提供与拨打电话相关的API交互 android.view :提供基础的用户界面接口框架 android.util :涉及工具性的方法,例如时间日期的操作 android.webkit:默认浏览器操作接口 android.widget:包含各种UI元素(大部分是可见的)在应用程序的屏幕中使用
常见界面控件 TextView EditText Button ImageButton Checkbox RadioButton Spinner ListView TabHost
常见布局 LinearLayout 线性布局 RleativeLayout 相对布局 TableLayout 表格布局 垂直、水平 RleativeLayout 相对布局 相对于另一个控件或容器的布局 TableLayout 表格布局 类似于html中的table布局 FrameLayout 帧布局 AbsoluteLayout 绝对布局 FrameLayout对象好比一块在屏幕上提前预定好的空白区域,可以将一些元素填充在里面,如图片。所有元素都被放置在FrameLayout区域的最左上区域,而且无法为这些元素制指定一个确切的位置,若有多个元素,那么后面的元素会重叠显示在前一个元素上
纲要 Android概述 平台架构 重要组件 开发环境介绍 Hello World! Demo演示
开发环境搭建 安装JDK(需要1.5+) 安装Eclipse 安装Android SDK 安装Eclipse插件ADT(Android Development Tools) 重启Eclipse,配置android SDK路径
安卓模拟器 安卓模拟器(AVD): Android 为开发人员提供了可以在电脑上直接调试应 用程序的虚拟设备 AVD(Android Virtual Device)。 使用 AVD可以方便地对应用程序进行调试 演示AVD创建过程,并启动
程序调试DDMS DDMS 是 Dalvik Debug Monitor Service的简称, 主要功能是监控应用程序的运行并打印日志、模 拟电话打入与接听、模拟短信的收发、虚拟地理 位置等。有了 DDMS 的帮助,可以大大降低应用 程序的测试成本。
纲要 Android概述 平台架构 重要组件 开发环境介绍 Hello World! Demo演示
Hello world ! 新建Android工程 选择支持的android版本 确认 源代码 编译后的class 资源文件夹 图像文件 src/ java原代码存放目录 gen/ 自动生成目录 gen 目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。 这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的xml界面文件、图标与常量,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了界面、图标、常量等各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。 res/ 资源(Resource)目录 在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图标或常量 res/drawable 专门存放图标文件 res/layout 专门存放xml界面文件,xml界面文件和HTML文件一样,主要用于用户界面显示 res/values 专门存放应用使用到的各种常量,作用和struts中的国际化资源文件一样。 AndroidManifest.xml 功能清单文件 这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity 图像文件 布局文件 字符串资源 功能清单文件
源代码 文件位置:Src/com.huaxia.Helloworld.java 代码: public class Helloworld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
布局文件 Res/layout/main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> 采用类似于HTML一样的布局文件,将展现和代码分离 LinearLayout (线性布局)、AbsoluteLayout(绝对布局)、RelativeLayout(相对布局)、TableLayout(表格布局)、 FrameLayout(帧布局)
字符串资源 Res/values/strings.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, 华夏!</string> <string name="app_name">Helloworld</string> </resources> 类似于struts的国际化资源文件。 借助于apktool等工具,可以对非汉化版的apk包中的values目录下的资源文件进行汉化后重新打包,完成程序汉化
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.huaxia" android:versionCode="1" android:versionName="1.0"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Helloworld" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 应用程序申请的权限,在安装过程中会提示用户
运行效果
谢谢欣赏