Android 分析 Android 应用结构
本文说明 Android 项目组成,虽然简单,但决不能忽视。
当你从简单 Hello World 程序,到会实现一些常见功能,比如,下拉(上拉)刷新最新(加载更多),消息处理(UI 通知更新),ViewPager 滑动效果,启动动画,访问网络文件,进行一些复杂的界面布局等等,再到调试一些开源项目,最后自己编写 Android 程序。可当调试一些开源项目时,尤其是那些比较大的开源项目,你会发现一些“意想不到”的情况,它们无论从界面,还是从功能,界面够炫,功能强大,也正因为如此,需要更多的资源,比如动画或声音效果,甚至使用三方的库,那就需要了解更多关于 Android 应用结构的问题了。
示例项目 HelloWorld
以 HelloWorld 项目为例:


图 1 项目结构 图 2 主程序
环境
- Windows 2008 R2 64 位
- Eclipse ADT V22.6.2,Android 4.4.2(API 19)
- SAMSUNG GT-I9008L,Android OS 2.2.2
Android 应用结构分析
以上面 HelloWorld 项目为例:
| 文件/文件夹 | 描述 | 是否必需 |
|
AndroidManifest.xml |
整个 Android 应用的全局描述文件,是每个 android 程序所必需的,位于工程根目录下。该清单文件说明了该应用的名称、所使用的图标以及包含的组件等。通常该文件可以包含如下信息:
例如: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.helloworld" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <!-- 指定 Android 应用标签、图标 --> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <!-- 定义 Android 应用的一个组件:Activity, 该 Activity 的类为 MainActivity,并指定该 Activity 的标签 --> <activity android:name=".MainActivity" android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <intent-filter> <!-- 指定该 Activity 是程序的入口 --> <action android:name="android.intent.action.MAIN" /> <!-- 指定加载该应用时运行该 Activity --> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> .csharpcode, .csharpcode pre .csharpcode, .csharpcode pre |
是 |
|
gen |
该目录存放的所有内容都是自动生成的,其中最重要是 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 com.example.helloworld; public final class R {
public static final class attr {
} public static final class drawable {
public static final int ic_launcher=0x7f020000; } public static final class id {
public static final int textView1=0x7f060000; } public static final class layout {
public static final int main=0x7f030000; } public static final class string {
public static final int app_name=0x7f040000; } public static final class style {
/** Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices. Theme customizations available in newer API levels can go in res/values-vXX/styles.xml, while customizations related to backward-compatibility can go here. Base application theme for API 11+. This theme completely replaces AppBaseTheme from res/values/styles.xml on API 11+ devices. API 11 theme customizations can go here. Base application theme for API 14+. This theme completely replaces AppBaseTheme from BOTH res/values/styles.xml and res/values-v11/styles.xml on API 14+ devices. API 14 theme customizations can go here. */ public static final int AppBaseTheme=0x7f050000; /** Application theme. All customizations that are NOT specific to a particular API-level can go here. */ public static final int AppTheme=0x7f050001; } } .csharpcode, .csharpcode pre R.java 文件是由 AAPT 工具根据应用中的资源文件自动生成的,因此可以把 R.java 看成 Android 应用的资源字典。
通过 R.java 可以很快地查找到所需要的资源,同时,编译器也会检查 R.java 列表中的资源是否被使用,没被使用到的资源不会被编译到软件中,这样可以减少在手机占用的空间。 |
是 |
|
bin |
该目录用于存放生成的目标文件,如 Java 的二进制文件、资源打包文件(.ap_后缀)、Dalvik 虚拟机的可执行文件(.dex 后缀)等。 例如: ![]() 在使用 Eclipse 开发时,可以不用关心 bin 目录。如果在 Eclipse 中看不到,可以到资源管理器下面查看。 |
是 |
|
src |
包含应用程序的所有 Java 源代码。 |
是 |
|
assets |
其他任何资源的文件夹和文件的集合。除了提供 res 目录存放资源文件外,Android 在 assets 目录也可以存放资源文件,assets 目录下的资源文件不会在 R.java 自动生成 id,所以读取 assets 目录下的文件必须指定文件的路径,可以通过 AssetManager 类来访问这些文件。 |
否 |
|
res |
资源目录,它存放 Android 项目的各种资源文件,并将其编译进应用程序中,向此目录添加资源时,会被 R.java 自动记录。 该目录包含 drawable(以及 drawable-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi),anim,layout,values,xml 和 raw 子文件夹。如 layout 存放界面布局文件;values 存放各种 XML 格式的资源文件,例如字符串资源文件 strings.xml,颜色资源文件 colors.xml,尺寸资源文件 dimens.xml。 Android 按照约定,将不同资源放在不同的文件夹内,便于 AAPT 工具来扫描这些资源,并为它们生成对应的资源清单类:R.java。 |
是 |
|
drawable |
包含应用程序使用的图像资源(*.png、*.jpg)。Android 1.5 及以下版本目录是 drawable,Android 1.5 以上版本有 3 个:drawable-ldpi、drawable-mdpi、drawable-hdpi 和 drawable-xhdpi 。
虽然是 4 个目录,但在使用 R 文件访问时,与 Android 1.5 及以下版本一样的。 |
否 |
|
anim |
包含用 xml 描述的应用程序使用的动画效果的配置文件。 |
否 |
|
layout |
包含应用程序的布局 xml 文件。你应该创建通过使用 xml 描述界面的布局,而不是通过 Java 编码实现界面布局。 |
否 |
|
values |
包含应用程序的常量资源,包括字符串,样式和颜色。如在 strings.xml 存放各种文字,以及存放不同类型的数据,像 arrays.xml、colors.xml、styles.xml 等。 例如:有一个 main.xml 布局文件,若在其中访问 strings.xml 文件的 hello 常量资源,可以"@+string/hello"方式;而在程序中访问方式为 R.string.hello。一般形式是:R.<资源类型>.<资源名称>。 |
否 |
|
raw |
包含附加的数据和非 xml 数据,例如 MP3 文件。使用 Eclipse 创建 Android 工程时,默认情况下不会在 res 目录下面创建这个目录,如果需要,可以自己创建。它可以通过 I/O 流访问,如应用中内置音频文件,就可以放置在这个目录下面。访问方式为 R.raw.xxx 方式。 |
否 |
|
menu |
菜单,主要放置设计的 OptionsMenu 和 ContextMneu 的菜单项。使用 Eclipse 创建 Android 工程时,默认情况下不会在 res 目录下面创建这个目录,如果需要,可以自己创建。 |
否 |
|
Android 4.4.2 |
该文件夹下包含 android.jar 文件,这是一个Java 归档文件,其中包含构建应用程序所需的所有的Android SDK 库(如 Views、Controls)和 APIs。通过 android.jar 将自己的应用程序绑定到 Android SDK 和 Android Emulator,这允许你使用所有 Android 的库和包,且使你的应用程序在适当的环境中调试。 |
是 |
|
project.properties |
记录项目中所需要的环境信息,比如 Android 版本等。 例如:关于 Android API 的信息 android-19,表明采用的是 Android 4.4.2。最近调试 oschina 项目,该项目必须是 android-15,即 Android 4.0.3 版本。 |
Android 分析 Android 应用结构的更多相关文章
- 分析android studio的项目结构
以最简单的工程为例子,工程名为随意乱打的Exp5,新建好工程后将项目结构模式换成android: 1.manifests AndroidManifest.xml:APP的配置信息 <?xml v ...
- Android开发之 Android应用程序目录结构解析
建立的HelloWorld的应用项目,其代码是由ADT插件自动生成的,形成Android项目特有的结构框架. 接下来让我带领大家解析一个Android程序的各个组成部分,这次我们拿一个Hello,Wo ...
- Android相框 与 源代码结构
一. Android 相框 Android框架层级 : Android 自下 而 上 分为 4层; -- Linux内核层; -- 各种库 和 Android执行环境层; -- 应用框架层; -- 应 ...
- Cocos2d-x性能分析-Android版本之Gprof
在 iOS 平台下我们可以用 Xcode 自带的 Profile 工具来测试我们程序的性能,Android 平台使用的 gprof 这里整理了一下具体的cocos2dx 使用gprof进行性能分析的具 ...
- Android系统源代码目录结构 “Android源代码”“目录结构”
在讲述Android源码编译的三个步骤之前,将先介绍Android源码目录结构,以便读者理清Android编译系统核心代码在Android源代码的位置. Android源代码顶层目录结构如下所示: ├ ...
- Android 5.0 源代码结构
本节书摘来自异步社区<深入理解Android 5 源代码>一书中的第2章,第2.2节分析Android源代码结构,作者 李骏. 网址:https://yq.aliyun.com/artic ...
- 从CM刷机过程和原理分析Android系统结构
前面101篇文章都是分析Android系统源代码,似乎不够接地气. 假设能让Android系统源代码在真实设备上跑跑看效果,那该多好.这不就是传说中的刷ROM吗?刷ROM这个话题是老罗曾经一直避免谈的 ...
- 深入理解Android(5)——从MediaScanner分析Android中的JNI
前面几篇介绍了Android中的JNI和基本用法,这一篇我们通过分析Android源代码中的JNI实例,来对JNI部分做一个总结. 一.通向两个不同世界的桥梁 在前面我们说过,JNI就像一个桥梁,将J ...
- android项目的目录结构讲解
参考书籍:<第一行代码Android> 一:android项目的目录结构讲解 1..gradle和.idea 这两个目录下放置的都是Android Studio自动生成的一 ...
随机推荐
- poj1321 棋盘问题(深搜dfs)
转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:id=1321">http://poj.org/prob ...
- ISO 8601: Delphi way to convert XML date and time to TDateTime and back (via: Stack Overflow)
Recently I needed a way of concerting back and forth ISO 8601 DateTime values used in XML from Delph ...
- MySQL Workbench的安全更新模式
MySQL Workbench上使用"DELETE FROM TABLE_E;"清空一个表时返回错误: Error Code: 1175. You are using safe u ...
- ibatis.net:尽可能的使用匿名类型替换 Hashtable
一切尽在代码中 Hashtable 风格 public Account GetByCustomIdAndAccountType(int customId, AccountType accountTyp ...
- ibatis.net:第二天,Hello,World ?
背景 本文的内容全部来自于官方的文档,此处仅仅为了强化记忆. 项目结构 Properties.config <?xml version="1.0" encoding=&quo ...
- 黑吃黑第四季/全集Banshee迅雷下载
英文全名Banshee,第5季(2015)Cinemax. 本季看点:<黑吃黑>Ana Ayora加盟第四季,将会饰演Nina Cruz,表面上是在镇里一个聪明而又强悍的新副警长,但实际是 ...
- 都市侠盗第一季/全集Leverage迅雷下载
第一季 Leverage Season 1 (2008)看点:Nate Ford(蒂莫西·赫顿 Timothy Hutton 饰)曾当过保险调查员,为自己的老板挽回过数百万美元的损失,是个忠心耿耿的雇 ...
- XCode的The argument is invalid
google查了一下,没找到解决的方法.有一篇blog应该有写怎么解决,可惜是wordpress.com的站点,打不开,网页快照也看不了- 后来回忆了一下操作步骤,只是添加了cocos2dx的 ...
- mongodb分布式集群搭建手记
一.架构简介 目标单机搭建mongodb分布式集群(副本集 + 分片集群),演示mongodb分布式集群的安装部署.简单操作. 说明在同一个vm启动由两个分片组成的分布式集群,每个分片都是一个PSS( ...
- 联想昭阳(Lenovo)
1996年,联想®昭阳系列推出了第一台笔记本电脑S5100.在经历了十几年的发展之后,联想昭阳系列也成为了国内市场占有率最高的国产商用笔记本品牌之一.昭阳品牌对于联想意义非凡,不仅仅是因为首款联想笔记 ...
