p [点这里下载]

Download Report

Transcript p [点这里下载]

Google Android
移动应用开发
宁夏大学新华学院
2012.3
Google Android
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 文件

Android 应用
Activity:活动

Android 应用程序中最基本的组件,应用程序中
一个Activity 通常就是一个单独的屏幕

每一个活动都被实现为一个独立的类,并且从活
动基类中继承而来,活动类将会显示由视图控件
组成的用户接口,并对事件做出响应

大多数的应用是由多个屏幕显示组成
Google Android
示例: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:显示运行中的设备
屏幕分辨率






入门级的:
主流的:
主流的:
moto特有的:
魅族 M9:
三星 Galaxy
QVGA(320x240)
HVGA(480x320)
WVGA800(800x480)
WVGA854(854x480)
960x640
Tab P1000:1024x600(7 寸屏)
基准分辨率: VGA(640x480)
 HVGA-L 或是 -P:横屏、竖屏
 模拟器的默认分辨率依 SDK 版本而不同

Android project 的目录结构

项目 HelloWorl :
文件夹 src
文件夹 gen
文件夹 Android 2.1-update1
文件夹 assets
文件夹 res
AndroidManifest.xml
default.properties
proguard.cfg
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 列表,编译器不会将没有被使用到的资源
编译进应用程序包中,以减少手机中的空间占用。

R:资源索引类
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 是 \androidsdk-windows\tools\lib\ 目录下的同名文件
的副本

proguard.cfg 是在Android SDK 升级到 2.3
版后才出现的,同样不需要手工修改
thanks