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自动生成的一 ...
随机推荐
- perl 信号
来自:http://www.bagualu.net/wordpress/?p=1628 使用signal,能让你的程序功能更丰富.要在Linux下列出所有的signal, 利用kill -l即可. 下 ...
- SystemParametersinfo用法(二)
SystemParametersinfo用法(二) SPI_SETDOUBLECLKHEGHT:将ulParam参数的值设为双击矩形区域的高度.双击矩形区域是指双击中的第2次点击时鼠标指针必须落在的区 ...
- In House打包流程
在一个app历经数周持续开发和多个版本快速内部迭代之后,当我们需要把这个版本发布到我们实际应用场景中,面对我们真实用户去say hi时,如果自身产品在发布(内测版本)之前确实找到一些潜在切相对稳定的种 ...
- 咏南中间件支持DELPHI6及以上版本开发的客户端
咏南中间件支持DELPHI6及以上版本开发的客户端 下面是测试用DELPHI7开发的客户端,调用DELPHI10.3.1开发的中间件,完全兼容. 这样,有利于维护原来用D7开发的老程序. 如上所述,只 ...
- Android SDK代理服务器解决国内不能更新下载问题
原文地址:http://blog.csdn.net/boonya/article/details/38752647 读者须知:本篇文章中最靠谱的是第三种方式,最近有读者反映第三种方式也不行了,下面提供 ...
- Warning: The Copy Bundle Resources build phase contains this target's Info.plist file 'Info
WARNING: The Copy Bundle Resources build phase contains this target's Info.plist file 'Info.plist'. ...
- mybatis大于号,小于号,去地址符,单引号,双引号转义说明
在mybatis中,使用到大于号,小于号,与在SQL编辑器中是不一样的. SELECT * FROM test WHERE 1 = 1 AND start_date <= CURRENT_DAT ...
- 行尸走肉第一季/全集The Walking Dead迅雷下载
本季The Walking Dead 1 第一季(2010)看点:<行尸走肉>讲述了警察瑞克在一次执法行动中因中弹负伤而不省人事,当他从昏迷中苏醒后却惊讶地发现,这个世界已然天翻地覆.周遭 ...
- Mysql 区分大小写进行查询
区分大小写的查询: 因为MySQL的查询是默认不区分大小写的: 如果有些时候需要区分大小写,我们就需要binary这个关键字了. 可以这样用,在stud表中查找sname中带’j’ /’J’: 先不写 ...
- 修改服务的运行权限,解决SVN Post Commit问题
先来看一下错误现象 之前在Windows Server中安装了VirtualSVN Server,然后设置了Post Commit Hooks,在提交代码到版本库之后,将代码check到本地的一个Se ...