`
deaboway
  • 浏览: 53430 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

用Eclipse开发和调试Android应用程序(二)

阅读更多
二、 创建 Android Eclipse 工程

请参考小生的《Android SDK 2.3与Eclipse最新版开发环境搭建(三)》,博文地址:http://deaboway.iteye.com/blog/983554

三、 工程结构详细解析

1. 工程结构

在Eclipse的Java透视图中,可以看到工程的Package Explorer如下图:




具体包括:

src 文件夹 - 包含示例应用程序的包,即org.deaboway.test。

R.java - Android Developer Tools 自动创建这个文件,它提供访问 Android 应用程序的各种资源所需的常量。后面会详细讨论 R 类与资源之间的关系。

HelloAndroidWorld.java - 应用程序的主活动类的实现。

Referenced libraries - 包含 android.jar,这是 Android SDK 中的 Android 运行时类的 jar 文件。

res 文件夹 - 包含应用程序的资源,包括:

· drawable - 图标:这个文件夹包含图形文件,比如图标和位图。

· layout - 布局文件:这个文件夹包含表示应用程序布局和视图的 XML 文件。

· values - 字符串:这个文件夹包含 strings.xml 文件。这是为应用程序实现字符串本地化的主要方法。

AndriodManifest.xml - 示例应用程序的部署描述符。

default.properties 和proguard.cfg – 从2.3版本以后,android sdk 本身包含proguard,可以通过正常的编译方式也能实现代码混淆,我们可以看到android-sdk-windows\tools\下面多了一个proguard文件夹。防止反编译工具进行反编译,保证代码安全。

2. 主类分析

这个示例应用程序由一个Activity(活动)组成,即HelloAndroidWorld。正如前面提到的,HelloAndroidWorld类是在HelloAndroidWorld.java 文件中实现的。

    package org.deaboway.test;

    import android.app.Activity;

    import android.os.Bundle;

    import android.widget.TextView ;

    public class HelloAndroidWorld extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

    super .onCreate(savedInstanceState);

    // TextView textView = new TextView(this);

    // textView.setText("Hello Android World!");

    // setContentView(textView);

    setContentView(R.layout.main );

    }

    }

在这个源代码片段中,要注意几点:

    HelloAndroidWorld 是一个普通的 Java 类,包含包和导入语句。
    HelloAndroidWorld 扩展 android.app 包中的 Android 基类 Activity。
    onCreate() 方法是这个活动的入口点,它接受一个 Bundle 类型的参数。Bundle 类本质上是 map 或 hashmap 的包装器。在这个参数中传递构造活动所需的元素。这里暂时不讨论这个参数。
    setContentView() 负责用 R.layout.main 参数创建主 UI。R.layout.main 是应用程序资源中主布局的标识符。

3. R.java文件

R.java 文件是在构建时自动创建的,所以不要手工修改它,因为所有修改都会丢失。本实例的R.java文件内容如下:

    /* AUTO-GENERATED FILE. DO NOT MODIFY.

    *

    * This class was automatically generated by the

    * aapt tool from the resource data it found. It

    * should not be modified by hand.

    */

    package org.deaboway.test;

    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;

    }

    }

R 类包含一些匿名子类,每个子类包含前面描述的各种资源的标识符。注意,这些类都是静态的。

请注意 R.layout.main 代表的元素。这个标识符代表由 main.xml 定义的布局。在活动的 onCreate 方法中可以使用这个值:setContentView(R.layout.main)。这就是在运行时把特定的活动(这里是HelloAndroidWorld)和特定的布局(主布局)联系在一起的方法。

4. main.xml文件

本示例应用程序包含一个活动和一个视图。应用程序包含一个名为 main.xml 的文件,它代表活动的主 UI 的视觉方面。

注意,在 main.xml 中没有指定在哪里使用这个布局。这意味着,如果需要的话,可以在多个活动中使用它。

    "1.0" encoding="utf-8" ?>

    "http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="@string/hello"

    />

这是最简单的布局,其中只有一个垂直的线性布局,这意味着所有元素排成一列。这里有一个 TextView 元素,它与其他开发环境中的标签类似。TextView 代表不可编辑的静态文本。

注意,每个视图元素(比如这个示例中的 LinearLayout 和 TextView)都有属于 Android 名称空间的属性。一些属性是所有视图元素都有的,比如 android:layout_width 和android:layout_height。这些属性可以采用的值是:

fill_parent - 使视图元素占满可用的空间。也可以认为这就是 “拉伸”。

wrap_content - 这个值让 Android 把元素一个接一个地排列,不进行拉伸。

5. AndroidManifest.xml文件

AndroidManifest.xml 文件是 Android 应用程序的部署描述符。这个文件列出应用程序中包含的所有Activity(活动)、ContentProvider(内容提供程序)、BroadcastReceiver(广播接收器)与Service(服务),以及应用程序支持的 IntentFilter。下面是这个示例应用程序的完整的 AndroidManifest.xml 文件。

    "1.0" encoding="utf-8" ?>

    "http://schemas.android.com/apk/res/android"

    package="org.deaboway.test"

    android:versionCode="1"

    android:versionName="1.0" >

    "@drawable/icon" android:label="@string/app_name" >

    ".HelloAndroidWorld"

    android:label="@string/app_name" >

    "android.intent.action.MAIN" />

    "android.intent.category.LAUNCHER" />

    这里指定了源文件中的包名。采用与 Java 源文件和导入语句相似的模式。 标记的实际作用是 “导入” 这个包中的类。在这个文件中,所有非完全限定的类都属于 package 属性指定的包。
    标记的一个属性引用了应用程序的一个资源。请注意 drawable 标识符前面的 @ 符号。这里的意思是,在应用程序资源的 drawable 文件夹中寻找名为 “icon” 的资源。
    标记包含以下属性和值:
        android:name表示实现这个活动的 Java 类。
        android:label 是应用程序的名称。注意,它来自一个字符串资源。string.xml 文件包含应用程序的本地化字符串。
        表示应用程序中可用的 IntentFilter。这是 Android 应用程序中最常见的 IntentFilter。这个过滤器的实际意思是,它实现 “主” 操作(也就是入口点),而且它位于 OS 的启动器中。这意味着可以在 Android 设备上像启动其他应用程序一样,从应用程序主列表中启动它。

四、 应用程序调试

要想检查正在运行的应用程序中发生了什么情况,就需要查看正在运行的 Dalvik VM。在 Eclipse 中,选择 Window > Open Perspective > Other。在出现的对话框中选择 DDMS。这会在 Eclipse 中打开一个新的透视图,其中有许多有趣的窗口。

DDMS 为IDE和Emultor(or GPhone)架起来了一座桥梁。Developer可以通过DDMS看到目标机器上运行的进程/线程状态:可以让Eclipse程序连接到开发机上运行;可以看进程的heap信息、logcat信息、进程分配内存情况;可以像目标机发送短信、发送地理位置信息以及打电话;可以像gdb一样attach 某一个进程调试。

下面简要介绍一下 DDMS 透视图中提供的资源:

1. Devices

Device 中罗列了Emulator中所有的进程,选项卡右上角那一排按钮分别为:Debug the selected process调试进程、Update Heap更新进程堆栈信息、Dump HPROF file检查HPROF(Heap/CPU Profiling Tool)文件、Cause GC调用垃圾回收、更新进程Update Threads、Start Method Profiling开始方法分析、Stop Process停止某个进程,和Screen Capture抓取 Emulator目前的屏幕。当你选中某个进程,并按下调试进程按钮时,如果eclipse中有这个进程的代码,那就可以进行源代码级别的调试。有点像 gdb attach。图片抓取按钮可以把当前android的显示桌面抓到你的机器上,也是非常有用。





这里可以查看到所有与DDMS连 接的终端的详细信息,以及每个终端正在运行的APP进程,每个进程最右边相对应的是与调试器链接的端口。因为Android是基于Linux内核开发的操 作平台,同时也保留了Linux中特有的进程ID,它介于进程名和端口号之间。

DDMS监听第一个终端App进程的端口为8600,APP进程将分配8601,如果有更多终端或者更多APP进程将按照这个顺序依次类推。DDMS通过8700端口(”base port”)接收所有终端的指令。

2. Emulator Control

通过这个面板的一些功能可以非常容易的使测试终端模拟真实手机所具备的一些交互功能,比如:接听电话,根据选项模拟各种不同网络情况,模拟接受SMS消息和发送虚拟地址坐标用于测试GPS功能等。





Telephony Status: 通过选项模拟语音质量以及信号连接模式。

Telephony Actions: 模拟电话接听和发送SMS到测试终端。

Location Control: 模拟地理坐标或者模拟动态的路线坐标变化并显示预设的地理标识,可以通过以下3种方式:

· Manual: 手动为终端发送二维经纬坐标。

· GPX: 通过GPX文件导入序列动态变化地理坐标,从而模拟行进中GPS变化的数值。

· KML: 通过KML文件导入独特的地理标识,并以动态形式根据变化的地理坐标显示在测试终端。

如:在Emulator Control\Telephony Actions 中输入如上图内容“Android 中文”,单击发送后,在Android模拟器中打开Messaging,看到下面的短信:




3. 文件管理器

显示文件系统信息。File Explorer非常有用:它可以把文件上传到Android、或者从Android上下载文件下来、也可以进行文件删除操作。选项卡右上角有上传、下载、删除三个按钮。一般情况下,File Explorer会有如下三个目录:data、sdcard、system。

· data对应手机的RAM,会存放Android OS 运行时的Cache等临时数据(/data/dalvik-cache目录);没有root权限时apk程序安装在/data/app中(只是存放apk 文件本身);/data/data中存放Android中所有程序(系统apk+第三方apk)的详细目录信息。

· mnt是mount,挂装的意思,mnt目录下的 sdcard对应sd卡。

· system对应手机的ROM,OS以及系统自带apk程序等存放在这里。

用户应用程序部署在 /data/app 目录中,而 Android 内置的应用程序部署在 /system/app 目录中。





4. Threads、Heap、Allocation Tracker

Threads视图列出当前进程的所有线程。

Heap视图展示一些堆的状态,在垃圾回收其间更新。当选定一个虚拟机时, VM Heap视图不能显示数据,可以点击右边面包上的带有绿色的”Show heap updates”按钮,然后在点击”Cause GC “实施垃圾回收更新堆的状态。

在Allocation Tracker视图里,我们可以跟踪每个选中的虚拟机的内存分配情况。点击”Start Tracking”后点击”Get Allocations “就可以看到。

例如,为了查看Garbage Collection信息:点击 [Start Tracking]按钮 -> 保持程序运行一段时间后 ->点击[Get Allocations] 按钮,凭借得到的Allocations信息可以通过Line Number准确找到哪里的代码出现了问题。





5. LogCat

LogCat 是一个日志文件,它记录 VM 中发生的活动。应用程序可以通过 Log.i(tag,message); 在这个日志文件中添加自己的日志项,其中的 tag 和 message 都是 Java 字符串。Log 类属于android.util.Log 包。





6. Console

Android输出的信息,加载程序等信息。



  • 大小: 38.4 KB
  • 大小: 46.1 KB
  • 大小: 31.5 KB
  • 大小: 20 KB
  • 大小: 59.7 KB
  • 大小: 41.8 KB
  • 大小: 67.3 KB
  • 大小: 56 KB
分享到:
评论

相关推荐

    用Eclipse开发和调试Android应用程序

    现在,我们已经可以使用Eclipse来创建和开发Android应用程序,本文将仍以Hello Android World工程来深入解析Eclipse中Android工程的结构以及调试。同时,顺带介绍Android中的核心组件及其生命周期,以及设计理念。

    用 Eclipse 开发 Android 应用程序

    本教程介绍如何在 Eclipse 环境中进行 Android 应用程序开发,包括两个示例应用程序。第一个示例是一个基本的应用程序,涉及构建和调试的所有阶段。第二个应用程序示例涉及比较复杂的 Android 特性,包括联系人搜索...

    在Eclipse上调试Android应用程序

    怎样在Eclipse上调试Android应用程序

    《Android应用开发详解》源码

    《Android应用开发详解》源码,完整版,值得看一看。 《Android核心技术和开发...然后会向读者讲解如何搭建.Android的开发环境、如何在Eclipse中创建一个项目,以及如何使用Android平台提供的工具调试和监控应用程序。

    Android移动应用开发 第3版 卷1卷2合集part2

    android用户界面设计精髓 android应用程序设计精髓 对外发布你的android应用程序和附录6个部分 附录还包含了android开发常用工具 模拟器 ddms和eclipse 的使用指南 《Android移动应用开发 第3版 卷Ⅱ:提高篇》...

    Android SDK中文开发文档 pdf 

    Android应用程序框架和程序库,Android 运行库和Linux内核,如何安装配置Android SDK、建立应用程序签名、移植Android应用程序、Android开发及调试以及如何在eclipse上开发Android应用程序,利用其他IDEs和工具开发...

    Android移动应用开发(第3版)卷Ⅰ基础篇 (Shane Conder, Lauren Darcey) PDF扫描版

    基础篇》涵盖了Android开发从概念、技术到市场推广应用的全部主题,内容包括Android平台概览、Android应用程序设计精髓、Android用户界面设计精髓、Android应用程序设计精髓、对外发布你的Android应用程序和附录6个...

    Android移动应用开发 第3版 卷1卷2合集part1

    android用户界面设计精髓 android应用程序设计精髓 对外发布你的android应用程序和附录6个部分 附录还包含了android开发常用工具 模拟器 ddms和eclipse 的使用指南 《Android移动应用开发 第3版 卷Ⅱ:提高篇》涵盖...

    android开发与调试

    使用Eclipse创建和开发android应用程序,本文以helloworld工程深度解析Eclipse中android工程结构以及调试。

    Android应用程序开发教程PDF电子书完整版、Android开发学习教程

    Android是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • ...

    《Android应用开发揭秘》附带光盘代码.

     1.1.3 Android应用程序框架  1.2 OMS介绍  1.2.1 OPhone介绍  1.2.2 Widget介绍  1.3 小结  第2章 Android开发环境搭建  2.1 Android开发准备工作  2.2 开发包及其工具的安装和  配置  2.2.1 安装JDK和...

    《Android应用开发揭秘》源码

     1.1.3 Android应用程序框架  1.2 OMS介绍  1.2.1 OPhone介绍  1.2.2 Widget介绍  1.3 小结  第2章 Android开发环境搭建  2.1 Android开发准备工作  2.2 开发包及其工具的安装和配置  2.2.1 安装JDK和配置...

    android开发揭秘PDF

    1.1.3 Android应用程序框架 1.2 OMS介绍 1.2.1 OPhone介绍 1.2.2 Widget介绍 1.3 小结 第2章 Android开发环境搭建 2.1 Android开发准备工作 2.2 开发包及其工具的安装和 配置 2.2.1 安装JDK和配置Java开发 环境 ...

    基于Android的应用软件开发实例初探

    2.4.2 Android应用程序组件 5 2.4.3 AndroidManifest.xml 文件 7 3.音乐播放器实例 7 3.1创建项目 8 3.2 设计界面 9 3.2.1准备图片 9 3.2.2准备字符串资源 10 3.2.3 设计程序的窗口布局 11 3.3编写Java代码 12 3.4 ...

    Android应用开发揭秘pdf高清版

    1.1.3 Android应用程序框架 1.2 OMS介绍 1.2.1 OPhone介绍 1.2.2 Widget介绍 1.3 小结 第2章 Android开发环境搭建 2.1 Android开发准备工作 2.2 开发包及其工具的安装和 配置 2.2.1 安装JDK和配置Java开发 环境 ...

    android移动开发一本就够

    《Android移动开发一本就够》涵盖了Android开发从概念、技术到市场推广应用的全部话题,内容包括:Android概览、Android应用程序设计精髓、Android用户界面设计精髓、常用Android API、更多Android应用程序设计原则...

    Android移动开发一本就够

    《Android移动开发一本就够》涵盖了Android开发从概念、技术到市场推广应用的全部话题,内容包括:Android概览、Android应用程序设计精髓、Android用户界面设计精髓、常用Android API、更多Android应用程序设计原则...

Global site tag (gtag.js) - Google Analytics