380 likes | 616 Views
智能手机应用开发. based on android 201 2 .5. 内容包括:. 1 、 Android 平台概述 2 、搭建 Android 开发环境 3 、第一个 Android 应用程序 4 、 Android 用户界面设计 5 、 Activity 、 Intent 、 Service 、 Broadcast Receiver 6 、 Android 中的数据存取 7 、 Android 实验设计. 用户界面. 数据存取. 平台综述 开发环境. 网络连接. 程序结构. 硬件访问. 图形编程. 课程结构.
E N D
智能手机应用开发 based on android 2012.5
内容包括: 1、Android 平台概述 2、搭建 Android 开发环境 3、第一个 Android 应用程序 4、Android 用户界面设计 5、Activity、Intent、Service、Broadcast Receiver 6、Android 中的数据存取 7、Android 实验设计
用户界面 数据存取 平台综述 开发环境 网络连接 程序结构 硬件访问 图形编程 课程结构 • 开放手机联盟(OHA) • Android 平台综述: • 平台介绍、开发者社区 • 开发环境: • 构建 Android 开发环境 • 应用程序: • 应用程序结构 • 典型应用: • 用户界面、图形编程 • 数据存取、网络连接 • 硬件访问
获取 Android 资料的途径 • http://developer.android.com • http://androidappdocs.appspot.com • 下载 sdk 等相关软件 • 查看文档 • 在线帮助 • 开发社区 • 国内需要代理才能访问 • http://www.android123.com.cn/ • news • sdk下载 • 开发FAQ、源码下载 • 移植
3、第一个 Android 应用程序 on android
Android 模拟器 • Android Emulator • 可模拟电话本、通话等功能 • 内置的浏览器和 Google Maps 都可以联网 • 可以使用键盘输入(不包括小键盘) • 可使用模拟器按键、键盘输入 • 可以使用鼠标单击、拖动屏幕进行操作
Android 模拟器 • Android 模拟器和真机的不同之处 • 不支持呼叫和接听实际来电,但可以通过控制台模拟电话呼入和呼出 • 不支持USB连接 • 不支持相机、视频捕捉 • 不支持音频输入,但支持输出 • 不支持扩展耳机 • 不能确定连接状态 • 不能确定电池电量水平和交流充电状态 • 不能确定 SD 卡的插入/弹出 • 不支持蓝牙 • 模拟器在上位机上产生的 .tmp 文件需要手工清理
Android 虚拟机 Dalvik • Dalvik 和标准 Java 虚拟机(JVM)首要差别 • Dalvik 基于寄存器,相对于基于数据栈的 JVM,能够更快的编译较大的应用程序 • Dalvik 和 JVM 运行环境的区别 • Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例 • 每一个 Dalvik 应用作为一个独立的 Linux 进程执行,可防止在虚拟机崩溃的时候所有应用都被关闭 • Dalvik 提供一个拥有较少限制许可证的平台
Android 中重要的包 • Android.app :提供高层的程序模型、提供基本的运行环境 • Android.content :包含各种的对设备上的数据进行访问和发布的类 • Android.database :通过内容提供者浏览和操作数据库 • Android.graphics :底层的图形库,可以将它们直接绘制到屏幕上. • Android.location :定位和相关服务的类 • Android.media :提供一些类管理多种音频、视频的媒体接口 • Android.net :提供帮助网络访问的类,超过通常的 java.net.* 接口 • Android.os :提供了系统服务、消息传输、IPC 机制 • Android.opengl :提供 OpenGL 的工具 • Android.provider :提供类访问 Android 的内容提供者 • Android.telephony :提供与拨打电话相关的 API 交互 • Android.view :提供基础的用户界面接口框架 • Android.util :涉及工具性的方法,例如时间日期的操作 • Android.webkit :默认浏览器操作接口 • Android.widget :各 UI 元素(多数可见)在应用程序屏幕中使用
Android 的文件格式 • java 文件:应用程序源代码 • android 本身相当一部分都是用 Java 编写而成 • android 的应用程序使用 Java 来开发 • class 文件:Java 编译后的目标代码 • Google 使用 Dalvik 来运行应用程序 • Android 的 class 文件是编译过程中的中间目标文件,需要链接成 dex 文件才能在 Dalvik 上运行
dex 文件:Android 平台上的可执行文件 • Dalvik 虚拟机执行的是 dex 格式字节码,并非 Java 字节码 • 在编译 Java 代码之后,通过 Android 提供的 Dx 工具可以将 Java 字节码转换成 dex 字节码 • Dalvik 针对手机应用、嵌入式 CPU 做过优化,可以同时运行多个 VM 实例而不占用过多系统资源
apk 文件:Android 上的安装文件 • apk 是 Android 安装包的扩展名,安装包内包含了与该 Android 应用程序相关的所有文件 • Android 将 AndroidManifest.xml 文件、应用程序代码(.dex文件)、资源文件和其他文件打成一个压缩包,即 .apk • apk 文件的本质是一个压缩包,一个工程只能打进一个 .apk 文件
Activity:活动 • Android 应用程序中最基本的组件,应用程序中一个Activity 通常就是一个单独的屏幕 • 每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对事件做出响应 • 大多数的应用是由多个屏幕显示组成
示例:Hello world! on android
HelloWorld • Eclipse 下自动生成 • new android project → HelloWorld
HelloWorld.java • Java 程序 package test.helloworld; import android.app.Activity; import android.os.Bundle; 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); } } 返回
R.java • Java 程序 /* AUTO-GENERATED FILE. DO NOT MODIFY. */ package test.helloworld; public final class R { public static final class attr { } public static final class drawable { public static final int icon=0x7f020000; } public static final class layout { public static final int main=0x7f030000; } public static final class string { public static final int app_name=0x7f040001; public static final int hello=0x7f040000; } } 返回
main.xml • 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_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> Resources 返回
strings.xml • xml 文件 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, everyone!</string> <string name="app_name">HelloWorld</string> </resources> 显示内容: Hello World, everyone!
AndroidManifest.xml • xml 文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=“http://schemas.android.com/apk/res/android” package="test.helloworld“ android:versionCode="1"android:versionName="1.0"> <uses-sdk android:minSdkVersion="7" /> <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> 返回
RUN RUN
模拟器运行 显示内容: Hello World, everyone!
命令行方式 • 首先启动模拟器 emulator -avd SDK_2.1_Update1_API_7 • 然后连接模拟器: telnet localhost 5554 • 接下来,就可以拨打电话: gsm call 10086 • 或者是发送短信: sms send 10086 messageform10086 • 另:adb kill-server:关掉现有 adb Server adb devices:显示运行中的设备
屏幕分辨率 • 入门级的: QVGA(320x240) • 主流的: HVGA(480x320) • 主流的: WVGA800(800x480) • moto特有的: WVGA854(854x480) • 魅族 M9: 960x640 • 三星 Galaxy Tab P1000:1024x600(7 寸屏) • 基准分辨率: VGA(640x480) • HVGA-L 或是 -P:横屏、竖屏 • 模拟器的默认分辨率依 SDK 版本而不同
Android project 的目录结构 文件夹 src 文件夹 gen 文件夹 Android 2.1-update1 文件夹 assets 文件夹 res AndroidManifest.xml default.properties proguard.cfg • 项目 HelloWorl :
Android project:src • 该文件夹是存放项目的源代码。新建项目时,系统生成了一个 HelloWorld.java 文件,它导入了两个类 android.app.Activity 和 android.os.Bundle,HelloWorld 类继承自 Activity 且重写了 onCreate 方法。 • @Override:在方法前面加上 @Override 系统可以帮助检查方法的正确性。 • 例如,public void onCreate(……){……} 这种写法是正确的,如果写成 public void oncreate(……){……} 这样编译器会报错——The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method,以确保你正确重写 onCreate 方法。如果不加 @Override,则编译器会认为是新定义了一个方法 oncreate,检测不出书写错误。
android.app.Activity 类:因为几乎所有的 Activity 都是与用户交互的,所以该类关注创建窗口,可以用方法 setContentView(View) 将自定义的 UI 放到 Activity 里面。 • 有两个方法是几乎所有的 Activity 子类都实现的: onCreate(Bundle):初始化 Activity,用布局资源(layout resource)调用 setContentView(int) 方法定义 UI(main.xml)。 onPause():处理当离开该 Activity 时要做的事情,用户做的所有改变应该在这里提交(通常 ContentProvider 保存数据)。
android.os.Bundle 类:从字符串值映射各种可打包(Bundle:捆绑)的(Parcelable)类型 • 例如该类提供了公有方法:public boolean containKey (String key),如果给定的 key 包含在 Bundle 的映射中返回 true,否则返回 false。
Android project:gen • 该文件夹下面有一个项目创建时自动生成并实时更新的 R.java文件,这个文件是只读的,不允许修改。 • R.java 文件中定义了一个类 R,类中包含很多静态类,且静态类的名字都与 res 中的一个名字对应,即 R 类定义了 res 目录下所有资源的索引。 • 通过 R.java 程序可以很快地查找到需要的资源,另外通过检查 R.java 列表,编译器不会将没有被使用到的资源编译进应用程序包中,以减少手机中的空间占用。
Android project:Android 2.1-update1 • 该文件夹下包含 Java 归档文件 android.jar,包含了构建项目所需的所有的 Android SDK 库和 APIs。 • 通过 android.jar 将应用程序绑定到 Android SDK 和 Android Emulator,这使得项目可以使用所有 Android 的库和包,并且可以在适当的环境中调试。 • 例如 HelloWorld.java 通过下面两行代码从 android.jar 导入了两个包: import android.app.Activity; import android.os.Bundle;
Android project:res • 资源目录,包含项目中的资源文件并将其编译进程序包中。向此目录添加资源时,会被 R.java 自动索引。 • res 中默认有三个子目录:drawabel、layout、values • drawabel:包含应用程序可以用的图标、图像文件(*.png、*.jpg) • layout:界面布局文件(main.xml)等 • values:项目中所需要显示的各种文字。可以存放多个*.xml文件,还可以存放不同类型的数据,如 arrays.xml、colors.xml、dimens.xml、styles.xml
Android project:assets • 该文件夹包含项目所需要使用到的诸如 mp3、视频文件,存放的也是资源文件。 • 与 res 文件夹存放的资源不同的是,assets 内的资源文件不会被 R 类索引,不能使用 R 的成员引用方式进行访问。
Android project:AndroidManifest.xml • 项目的总配置文件,存储整个项目的配置数据,记录了应用程序中所使用的各种组件,列出了应用程序所提供的功能,指出了应用程序使用到的服务(如电话、互联网、短信、GPS 等) • 应用程序添加新的 Activity 时,也需在此注册后才能调用 • AndroidManifest.xml包含如下设置: application、permissions、Activities、Intent filters 等
Android project:default.properties • 由 Android Tools 自动生成,不允许修改 • 文件中记录了项目中所需要的环境信息,比如Android API 的最低兼容版本等 • 项目 HelloWorld 的 default.properties 文件代码如下所示: # Project target. target=android-7
Android project:proguard.cfg • proguard 是 Java 类文件的压缩、优化、混淆器,用于删除没有用的类、字段、方法与属性,以使字节码达到最大程度地优化 • 作为配置文件,proguard.cfg 是 \android-sdk-windows\tools\lib\ 目录下的同名文件的副本 • proguard.cfg 是在Android SDK 升级到 2.3 版后才出现的,同样不需要手工修改