- Android开发环境搭建
3.1 SDT开发工具包下载和解压
那第一件事,我们就是要下载开发工具,那么开发工具我这里给出两个,一个是谷歌安卓工具开发者官网,这是一个谷歌的最权威的官方网站,英文的,悲催的是正常的手段是没有办法打开的,因为谷歌和中国的关系不太和谐,所以就得采用一些特殊的手段,(http://developer.android.com)
第二个网址呢,这是一个国内的网址,这个网站也是提供了一系列安卓开发工具的下载,国内的用户可以到这个网站上去下载
http://www.androiddevtools.cn/
大家可以在这里去正常下载是没有问题的
自虐式: 下载eclipse 、ADT 、SDK Eclpise 不推荐!!!
开发各种的目录禁止出现中文!!! Android studio inteljidea 社区版 免费 继承adt之后,有了Android studio 旗舰版 收费
eclipse jdk 一定要匹配 ADT(android develop tools)作用:就是安卓开发工具,用来生成一些源文件,是eclipse的一个插件 SDK(standard develop kits)的作用:安卓相关的软件开发工具包,SDK只是一个压缩包,任何地方下载的解压之后都可以。不分64位32位 ADT 提供了这个android开发的框架。下载了之后,必须安装在eclipse
从Android官方网站获取最新的SDT开发工具包。 下载地址:http://dl.google.com/android/adt/adt-bundle-windows-x86.zip 由于一些众所周知的原因,该网站一般很难打开。
工具包包含以下内容:
下载之后,直接解压后打开Eclipse即可使用
注意:1)解压的目录不能有中文目录
|
3.2 创建Android模拟器
点击手机形状的图形(android virtual device manager) 创建一个新的android模拟器
3.3 启动AVD和DDMS说明
点击start可以启动虚拟机。虚拟机启动后就相当于一个Android手机。
DDMS:Dalvik Debug Monitor Service 对Android设备进行调试的时候使用。
第一个Android应用程序
4.1打开eclipse -File-New - Android Application project
SDK目录内容:
SDK里面的platforms里是空的,怎样有内容呢?打开SDKManager.exe,去下载SDK不同版本的开发工具包
Tools:SDK开发的标准工具
Etras:可用扩展工具
--Android Support Library:高版本的API可以在低版本上使用,向下兼容
--Google USB Driver:真机连接时的驱动
--Google Web Driver:访问WEB的驱动
--Intel X86 Emulator Accelerator: 如果你的处理器是英特尔的并且是I3以上的,就可以使用这个加速器
常见的API要记住
SDK Plateform:就是开发程序时所需要的JAR包
Samples for SDK:SDK的一些例子程序
ARM...System Image:模拟器所需要的镜像
Intel x86...:
用哪个模拟器就用哪个镜像
Google APIs:谷歌给我们提供的一些应用JAR包,比如说谷歌地图
Sources for Android SDK:安卓SDK的所有源代码
DDMS介绍:一个工具
DDMS将搭建起IDE与测试终端(Emulator 或者connected device)的链接,
它们应用各自独立的端口监听调试器的信息,DDMS可以实时监测到测试终端的连接情况。
当有新的测试终端连接后,DDMS将捕捉到终端的ID,并通过adb建立调试器,从而实现发送指令到测试终端的目的。
左边:Devices界面:是当前ECLIPSE所连接的设备,
右边:Thread:调试进程里面的线程的,
Heap:观察应用程序运行的堆栈信息
File Explorer:文件管理器,列出来的是安卓手机里的目录结构,真机都有文件管理器和这里的内容是一致的
Emulator Control:模拟器控制,可以模拟打电话,发信息
LogCat介绍:
LogCat(日志猫)是Android下的一个调试工具
安卓程序实际上运行在一个单独的设备上,日志实际上打印在手机内部的日志缓冲区里。
可以通过android.util.Log类来打印日志信息
日志信息是分等级的:
Log.v() -------------------- VERBOSE(提醒)黑色
Log.d() -------------------- DEBUG(调试)蓝色
Log.i() -------------------- INFO(信息) 绿色
Log.w() -------------------- WARN(警告) 橙色
Log.e() -------------------- ERROR(错误) 红色
以上log的级别依次升高,Debug信息应当只存在于开发中,INFO、 WARN、ERROR这3种log将出现在发布版本中。
- Android工程目录说明
src/ java原代码存放目录 gen/ 自动生成目录 gen 目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。 这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的资源,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。 res/ 资源(Resource)目录 在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。 libs/ 支持库目录 程序开发时需要的一些三方的jar包可以放在这个目录,系统会自动把里面的jar包,添加到环境变量。 assets资源目录 Android除了提供/res目录存放资源文件外,在/assets目录也可以存放资源文件,而且/assets目录下的资源文件不会在R.java自动生成ID,所以读取/assets目录下的文件必须指定文件的路径,如:file:///android_asset/xxx.3gp AndroidManifest.xml 项目清单文件 这个文件列出了应用程序所提供的功能,以后你开发好的各种组件需要在该文件中进行配置,如果应用使用到了系统内置的应用(如电话服务、互联网服务、短信服务、GPS服务等等),你还需在该文件中声明使用权限。 project.properties 项目环境信息,一般是不需要修改此文件 |
res/ 目录
- res/drawable
res/目录下有三个 dawable 文件夹
【drawable-*dpi】,区别只是将图标按分辨率高低来放入不同的目录,
【drawable-hdpi】用来存放高分辨率的图标,
【drawable-mdpi】用来存放中等分辨率的图标,
【drawable-ldpi】用来存放低分辨率的图标。
程序运行时可以根据手机分辨率的高低选取相应目录下的图标。不过,如果不想准备过多图片,那么也可以只准备一张图标将其放入三个目录的任何一个中去。
- res/values/
此目录下主要存放如下文件:
- strings.xml
用来定义控件上显示的字符串和数值
为什么需要把应用中出现的文字单独存放在 strings.xml 文中呢?
原因有二,一是为了国际化
二是为了减少应用的体积,降低数据冗余
- res/layout/
- 目录下的布局文件简介
布局文件是 ADT 默认自动创建的“main.xml”文件。在 Eclipse 中,双击 “main.xml”文件,或者右击以选择相应的编辑器,选用“Android Layout Editor”。在编辑区出现如下界面,默认显示的是“Layout 编辑器”的预览效果。可以点击 Layout 选项卡旁边的 main.xml,切换到代码模式以编辑。
R.java 文件
R.java 文件中默认有 attr、drawable、layout、string 等四个静态内部类,每个静态内部类分别对应一种资源,如 layout 静态内部类对应 layout 中的界面文件,其中每个静态内 部 类 中 的 静 态 常 量 分 别 定 义 一 条 资 源 标 识 符 , 如 “ public static final int main=0x7f030000;”对应的是 layout 目录下的 main.xml 文件。具体的对应关系,如下图。
下载 (72.74 KB)
2011-1-16 22:25
由于目前【drawable-*dpi】目录下都只有 icon.png 一个图片文件,因此此时不同像素 的 同 名 的 icon.png 文 件 在 drawable 内 部 类 中 只 有 一 个 icon 属 性 。 如 果 我 们 在【drawable-*dpi】目录下再添加一幅图片sharpandroid.png,那么会有什么效果出现呢?请看下图。
下载 (28.32 KB)
2011-1-16 22:26
现在已经理解了 R.java 文件中内容的来源,也即是当开发者在 res/目录中任何一个子 目录中添加相应类型的文件之后,ADT 会在 R.java 文件中相应的匿名内部类当中自动生成一条静态 int 类型的常量,对添加的文件进行索引。如果在 layout 目录下在添加一个新的界面,那么在 public static final class layout 中也会添加相应的静态 int 常量。相反的,当我们再 res 目录下删除任何一个文件,其在 R.java 中对应的记录会被 ADT 自动删除。 再比如说我们在【strings.xml】添加一条记录,在 R.java 的 string 内部类中也会自动增加一条记录。
R.java 文件会给我们开发程序带来很大的方便,比如在程序中我们使用“public static final int icon=0x7f020000;”就可以找到其对应的 icon.png 这幅图片。
提示:R.java 文件除了有自动标识资源的“索引”功能之外,还有另一个主要的功能,当 res 目录中的某个资源在应用中没有被使用到,在该应用被编译的时候系统就不会把对应的资源 编译到该应用的 APK 包中,这样可以节省 Android 手机的资源。
应用程序执行流程分析
经过前面对 Android 项目目录结构的介绍,以及相关文件的讲解,我们对许多细节已经有所了解,只是 Android 程序是如何执行的呢?下面做一个总结。
发布程序到手机上之后,当双击“抽屉”里该应用的图标时,系统会将这个点击事件包装成一个Intent,该Intent包含两个参数
{action :"android.intent.action.MAIN",
category :"android.intent.category.LAUNCHER" },
这个Intent被传递给HelloWorld这个应用之后在应用的功能清单文件中寻找与该Intent匹配的Intent过滤器,如果匹配成功,找到相匹配的Intent过滤器所在的Activity元素,再根据 <activity>元素的“name”属性来寻找其对应的Activity类。接着Android操作系统创建该Activity类的实例对象,对象创建完成之后,会执行到该类的onCreate方法,此OnCreate方法是重写其父类Activity的OnCreate方法而实现。onCreate方法用来初始化Activity实例对象。如下是HelloWorld.java 类中onCreate方法的代码。
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } |
其中super.onCreate(savedInstanceState)的作用是调用其父类Activity的OnCreate方法来实现对界面的画图绘制工作。在实现自己定义的Activity子类的OnCreate方法时一定要记得调用该方法,以确保能够绘制界面。
setContentView(R.layout. main)的作用是加载一个界面。该方法中传入的参数是 “R.layout. main”,其含义为R.java类中静态内部类layout的静态常量main的值,而该值是 一个指向res目录下的layout子目录下main.xml文件的标识符。因此代表着显示main.xml所定义的画面。
关于Activity类的执行流程及其生命周期会在后面的部分详细讲解。
Android程序执行的整个序列图如下所示。