Android体系架构详解:
http://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/#ibm-pcon
src文件夹
是项目的所有包及源文件(.java)(与一般的Java项目一样)
分析HelloAndroid项目的主程序文件HelloAndroid.java,如代码清单3-8所示。
代码清单3-8 HelloAndroid.java
- package com.yarin.Android.HelloAndroid;
- import android.app.Activity;
- import android.os.Bundle;
- public class HelloAndroid extends Activity {
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- /* 设置Activity要显示的布局为(R.layout.main) */
- setContentView(R.layout.main);
- }
- }
主程序HelloAndroid类继承自Activity类,重写了void onCreate(Bundle savedInstanceState)方法。在onCreate方法中通过setContentView(R.layout.main)设置了Activity要显示的布局文件(\layout\main.xml)。
到这里,是不是明白了为什么我们在创建项目时没有进行编码就可以直接运行程序呢?当然,这也是Android开发的特点,这样可以很轻松地将代码和UI分开,在国际化和程序维护方面有着巨大的作用。如果你的Android程序需要自适应国际化,比如说多国语言等问题,那么就可以定义不同语言的UI布局,在程序装载时调用不同的布局。而且,如果我们需要修改UI的一些问题,就不必查看代码了,直接更改这些布局文件即可,是不是很方便?当然,这需要开发者在开发时使用这种MVC框架,尽量减少使用"硬编码"。这里,笔者个人建议使用这种框架。
gen文件夹
R.java是在建立项目时自动生成,只读模式,不能更改,存储项目所有资源的索引。
为项目中用户界面、字符串、图片等资源都会在该类中创建其惟一的ID,当项目中使用这些资源时,会通过该ID得到资源的引用
代码清单3-1 R.java
- package com.yarin.Android.HelloAndroid;
- 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;
- }
- }
可以看到这里定义了很多常量,仔细一看就发现这些常量的名字都与res文件夹中的文件名相同,这再次证明R.java文件中所存储的是该项目所有资源的索引。有了这个文件,在程序中使用资源将变得更加方便,可以很快地找到要使用的资源,由于这个文件不能被手动编辑,所以当我们在项目中加入了新的资源时,只需要刷新一下该项目,R.java文件便自动生成了所有资源的索引。
assets文件夹
资源路径,不会在R文件注册。该目录用于存放项目相关的资源文件,这个目录和res包含的xml文件差不多,也是应用中引用到的一些外部资源。但主要区别在于这些资源是以原始格式保存,且只能用编程方式读取。例如文本文件,视频文件,MP3音频等媒体文件
bin文件夹编译生成目录。二进制文件,包括class、资源文件、dex、apk等
res文件夹中则包含了项目中的所有资源,比如:程序图标(drawable)、布局文件(layout)、常量(values)等。
drawable:
开头的三个文件夹用于存储.png、.9.png、.jpg等图片资源(.9.png是Android特有的图片格式,可以根据情况进行拉伸,达到不变形的效果),他们的分变率从高到低,如果你打算在android应用中包含一个图片或者图标,就应该把它们放在这个目录
raw:
用于存放应用程序所用到的声音等资源。raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;相比较assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类
values:
这个目录也包含了一些xml文件,但主要是应用中要引用的key-value对。这些XML文件声明了数组(Array)、颜色(color)、度量(Dimension)、字符串。之所以把这些东西分别放在单独的xml文件中主要是考虑到这些值能够在不更改源代码的情况下用于多语言环境。例如,根据用户语言的不同应用程序中的信息可以有多种语言版本
下面我们看看资源文件中一些常量的定义,如String.xml,如代码清单3-3所示。
代码清单3-3 String.xml
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <string name="hello">Hello World, HelloAndroid!</string>
- <string name="app_name">HelloAndroid</string>
- </resources>
这个文件很简单,就定义了两个字符串资源,与R.java中对应的索引如代码清单3-4所示。
代码清单3-4 R.java中的String类
- public static final class string {
- public static final int app_name=0x7f040001;
- public static final int hello=0x7f040000;
- }
在程序中装载并使用这个字符串资源如代码清单3-5。
代码清单3-5 String资源程序中的使用
- Resources r = this.getContext().getResources();
- String appname= ((String) r.getString(R.string.app_name));
- String hello= ((String) r.getString(R.string.hello));
基本上可以定义出项目中所有使用的常量,例如颜色。所以,可根据需对资源常量进行定义。下面是定义了颜色的常量colors.xml,如代码清单3-6所示。
代码清单3-6 colors.xml
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <color name="status_idle">#cccccc</color>
- <color name="status_done">#637a47</color>
- <color name="status_sync">#cc9900</color>
- <color name="status_error">#ac4444</color>
- </resources>
layout:
现在我们来分析HelloAndroid项目的布局文件(layout),首先我们打开res->layout->main.xml文件,如代码清单3-7所示。
代码清单3-7 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_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- />
- </LinearLayout>
代码清单3-7中,有以下几个布局和参数。
< LinearLayout>:线性版面配置,在这个标签中,所有元件都是按由上到下的排队排成的
android:orientation:
horizontal表示这个介质的版面配置方式是从上到下垂直地排列其内部的视图
vertical表示这里是水平排列
android:layout_width: 定义当前视图在屏幕上所占的宽度
android:layout_height:定义当前视图在屏幕上所占的高度
fill_parent表示填充整个屏幕
wrap_content表示随着文字栏位的不同而改变这个视图的宽度或高度
match_parent表示
layout_weight 用于给一个线性布局中的多个视图的重要度赋值。所有视图都有layout_weight 值,默认为零,即需要显示多大的视图就占据多大的屏幕空间。如果值大于零,则将父视图中的可用空间分割,分割大小具体取决于每一个视图的layout_weight 值和该值在当前屏幕布局的整体 layout_weight 值,以及在其他视图屏幕布局的layout_weight 值中所占的比例。
<TextView>:布局中设置了一个TextView,用来配置文本标签Widget,其中设置的属性
android:layout_width为整个屏幕的宽度,
android:layout_height可以根据文字来改变高度,
android:text则设置了这个TextView要显示的文字内容,这里引用了@string中的hello字符串,即String.xml文件中的hello所代表的字符串资源。hello字符串的内容"Hello World, HelloAndroid!"这就是我们在HelloAndroid项目运行时看到的字符串。
menu:
AndroidManfest.xml文件(每个Android项目都必须有)
清单文件 这个XML文件包含了android应用中的元信息,是每个android项目中的重要文件。在软件安装的时候被读取 ,Android中的四大组件(Activity、ContentProvider、BroadcastReceiver、Service)都需要在该文件中,以及运行这个android应用程序需要的用户权限列表,例如:电话、短信、互联网、访问SD卡,同时也详细描述了android应用的项目结构
我们先来打开HelloAndroid项目中的AndroidManfest.xml文件,如代码清单3-2所示。
代码清单3-2 AndroidManfest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.yarin.Android.HelloAndroid"
- android:versionCode="1"
- android:versionName="1.0">
-
<application android:icon="@drawable/icon"
android:label="@string/app_name"> - <activity android:name=".HelloAndroid"
- 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>
- <uses-sdk android:minSdkVersion="5" />
- </manifest>
代码清单3-2中intent-filters描述了Activity启动的位置和时间。每当一个Activity(或者操作系统)要执行一个操作时,它将创建出一个Intent的对象,这个Intent对象能承载的信息可描述你想做什么,你想处理什么数据,数据的类型,以及一些其他信息。而Android则会和每个Application所暴露的intent-filter的数据进行比较,找到最合适Activity来处理调用者所指定的数据和操作。
表3-1 AndroidManfest.xml分析
manifest |
根节点,描述了package中所有的内容 |
xmlns:android |
包含命名空间的声明。 xmlns:android=http://schemas. android.com/apk/res/android,使得 Android中各种标准属性能在文件中使用, 提供了大部分元素中的数据 |
Package |
声明应用程序包 |
application |
包含package中application级别组件声 明的根节点。此元素也可包含application 的一些全局和默认的属性,如标签、icon、 主题、必要的权限,等等。一个manifest 能包含零个或一个此元素(不能大余一个) |
android:icon |
应用程序图标 |
android:label |
应用程序名字 |
Activity |
用来与用户交互的主要工具。Activity是用 户打开一个应用程序的初始页面,大部分 被使用到的其他页面也由不同的activity所 实现,并声明在另外的activity标记中。 注意,每一个activity必须有一个<activity> 标记对应,无论它给外部使用或是只用于 自己的package中。如果一个activity没有 对应的标记,你将不能运行它。另外, 为了支持运行时查找Activity,可包含一个 或多个<intent-filter>元素来描述activity所支持的操作 |
android:name |
应用程序默认启动的activity |
intent-filter |
声明了指定的一组组件支持的Intent值,从 而形成了IntentFilter。除了能在此元素下指 定不同类型的值,属性也能放在这里来描 述一个操作所需的唯一的标签、icon和其他信息 |
action |
组件支持的Intent action |
category |
组件支持的Intent Category。这里指定 了应用程序默认启动的activity |
uses-sdk |
该应用程序所使用的sdk版本相关
|
proguard-project.txt:代码混淆相关文件
project.properties:
工程属性的配置文件,配置编译的版本等
相关推荐
"Android开发"则指出这个工具链是为Android应用程序的开发而设计的。 **文件名称列表:** 虽然没有具体的文件名提供,但我们可以推测"arm-linux-androideabi-4.9"可能是一个包含多个组件的目录结构,如bin目录...
【标题】"Android开发-智能聊天机器人"是一个关于在安卓平台上构建聊天机器人的项目,它旨在教授开发者如何利用Android技术创建交互式、智能化的应用。在这个项目中,开发者将学习到如何设计用户界面,以及如何集成...
Android系统原理与开发要点详解 Android作为全球最广泛使用的移动操作系统,其开发技术与系统原理是每一个Android开发者必须深入理解的基础。本培训课件旨在详细阐述Android系统的内部工作机制以及开发过程中需要...
总之,aarch64-linux-android-4.9作为Android开发中的核心工具,帮助开发者跨越了不同平台之间的障碍,实现了高效、便捷的跨平台开发。熟悉并掌握其使用,对于提升Android应用的性能和兼容性具有至关重要的作用。在...
总的来说,《Android应用开发详解》是一本全面且实用的教程,它涵盖了Android开发的各个方面,从基础到高级,从理论到实践,是学习Android应用开发不可多得的资源。结合提供的源码,读者可以深入学习Android开发的每...
### Android开发——华清远见Android培训课程精要 #### 一、版权与版权声明 本教程由华清远见嵌入式培训中心提供,版权所有。未经官方明确许可,不得以任何形式复制或传播此文档的任何部分。文档中的信息如有更改,...
### Android系统架构详解 #### 一、概述 Android操作系统是一个基于Linux内核的移动设备操作系统,广泛应用于智能手机和平板电脑等移动终端。Android系统架构由五个主要组成部分构成:Linux Kernel、Android ...
"Android-Camera驱动架构" Android 的Camera驱动架构学习笔记中,Camera 驱动架构是指 Android 设备中 camera 设备的驱动架构,包括我们目前项目中所使用的 usb 摄像头和 CSI 摄像头的设备驱动。 V4L2 是 Linux ...
Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序—— 移动电话工作所需的全部软件,而且不存在任何...【第一版第十五章】老罗Android开发视频--百度地图实战开发(10集)
总的来说,"Android-一个使用clean架构的android样板工程"是一个学习和参考的优秀资源,它展示了如何在Android开发中运用Clean架构,提升项目的可维护性和可扩展性,尤其对于Kotlin开发者来说,这是一个深入了解现代...
这份压缩包包含了书中的5-8章的案例源代码,是学习Android开发的重要参考资料。 第5章通常涉及到Android应用程序的基础架构和组件,可能包括Activity、Service、BroadcastReceiver以及ContentProvider的使用。...
1. **安装JDK(Java Development Kit)**:这是进行Android开发的基础,因为Android应用程序主要是用Java或Kotlin编写的。 2. **安装Android Studio**:官方推荐的集成开发环境,内置了所有必要的工具和库,支持从...
总的来说,《Android应用开发详解》这本书全面覆盖了Android开发的基础和进阶知识,无论是对新手还是有一定经验的开发者,都能从中获益。通过深入学习,你将能够熟练掌握Android应用开发的技能,打造出功能丰富、...
现代Android开发推崇使用MVVM(Model-View-ViewModel)架构,它将业务逻辑与UI分离,提高了代码的可测试性和可维护性。在项目中,你会看到如何使用ViewModel和LiveData来实现这种架构,以及如何通过Data Binding库将...
- **附录B:Android Tools Overview** - 概述常用的Android开发工具及其特点。 - **附录C:App Design Guidelines** - 提供应用设计方面的指导原则。 - **附录D:Univerter Architecture** - 讲解Univerter架构的...
总的来说,"android----TxtReader"项目涵盖了Android应用开发的多个关键领域,对于学习Android开发,尤其是对文本阅读器有兴趣的开发者来说,是一个极好的实践案例。通过研究这个项目,不仅可以提升Android编程技能...
在移动应用开发领域,Android 项目的架构设计对于项目的可维护性、可扩展性和团队协作效率至关重要。MVP(Model-View-Presenter)模式是一种广泛采用的架构模式,尤其在大型项目中,它能够帮助开发者更好地组织代码...
首先,Android系统架构是理解Android开发的基础。Android由Linux内核、硬件抽象层、运行时环境、应用程序框架以及各种应用程序组成。开发者需要了解这些层次如何协同工作,以便更好地利用系统资源。 其次,Android...
对于Windows用户来说,"android-sdk-windows"提供了在Windows平台上进行Android开发所需的所有组件。本文将详细探讨Android SDK在Windows环境下的安装、配置及主要功能。 一、Android SDK简介 Android SDK...
2. **开发环境搭建**:书中详细讲述了如何安装和配置Android Studio,这是Google官方推荐的Android开发集成开发环境(IDE)。包括JDK的安装、Android SDK的获取以及AVD(Android Virtual Device)的创建,这些都是...