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自动生成的一 ...
随机推荐
- Java对象池
单例模式是限制了一个类只能有一个实例,对象池模式则是限制一个类实例的个数.对象池类就像是一个对象管理员,它以Static列表(也就是装对象的池子)的形式存存储某个实例数受限的类的实例,每一个实例还要加 ...
- [转]Twemproxy 介绍与使用
Twemproxy是一种代理分片机制,由Twitter开源.Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回.该方案很好的解决了单个Re ...
- C#面向服务WebService从入门到精通
<C#面向服务WebService从入门到精通>包含以下两个部分: 一.<C#远程调用技术WebService修炼手册[基础篇]>本次分享课您将学习到以下干货知识点:1).We ...
- delphi Image 处理
procedure ResizeBmp(Src,Dst:String);var SrcBM,DstBM:TBitMap; Rect:TRect; NewW,NewH,PicW,PicH:Integer ...
- Spring Boot开发之流水无情(二)
http://my.oschina.net/u/1027043/blog/406558 上篇散仙写了一个很简单的入门级的Spring Boot的例子,没啥技术含量,不过,其实学任何东西只要找到第一个突 ...
- ASP.NET MVC:如何提供 Controller 继承体系使用的 ModelBinder?
背景 Mvc 提供了一种可扩展的模型绑定机制,具体来说就是:将客户端传递的参数按照一定的策略绑定到 action 的参数上,这带来的直接好处就是让 action 的参数支持强类型.一般来说我们有如下方 ...
- Java Singleton Implementation
概述 Java中单例模式的实现有多重方法, 要实现单例模式主要的问题是线程安全问题以及对Lazy Load的考虑,主要有如下几种 双重锁定懒加载单例 预加载单例 枚举单例 双重锁定懒加载单例模式 /* ...
- EF更新指定字段.或个更新整个实体
EF更新指定字段.或个更新整个实体 更新整个实体: public bool Update(Company compay) { if (compay != null) { dbContext.Entry ...
- spring boot1.5以上版本@ConfigurationProperties取消location注解后的替代方案 cannot resolve method location
问题 在spring boot(版本1.5.1.RELEASE)项目中,当准备映射自定义的配置文件属性到类中的时候,发现原本的@ConfigurationProperties注解已将location属 ...
- sqlserver 中WITH NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX
https://www.cnblogs.com/sthinker/p/5922967.html SqlServer查询语句中用到的锁 作者: wokofo 前段时间**公司DBA来我们这培训.讲了一大 ...
