我使用的学习书籍是《第一行代码》,加之其它一些资料的整理,对Android的源文件结构进行详细说明
图1是一个名为“HelloWorld”的项目,在eclipse中点击"File"->"New"->"other"->"Android Application Project",系统自动生成的一个框架,可以运行。
图1
现对结构中的每个成分进行说明,在理解其成分时我喜欢探究其命名缘由,以便帮助理解其作用。
(1)src
理解为source(源文件)的缩写,意味存放所有Java代码的地方,其暂开图为图2,图中的包名和源文件名均为手动命名
图2
(2)gen
理解为Generated Java Files,即通Android开发需要的通用文件,为系统自动生成,其子文件如图3,包括一个包和两个java文件,我们发现包名和src中的包名相同,我们暂且认为是系统的一种命名规则,把问题留在此,以后探讨。而包下包括两个文件,对其功能做一个简单的说明:
图3
1、BuildConfig.java:
译为构建配置文件,这是系统自动生成的,其源文件有注释说明,如图4所示。此文件为新SDK一点功能,其作用为代码的辅助检查,在整个工程中不断自动检测。而对于其自动检测的实现过程我们暂不深究,以免影响学习进度。
图4
2、R.java
此类的功能主要是为项目中的资源提供索引,索引选择了单词resource(资源)的首字母"R"
我们首先看看其源文件中对该文件的解释,如图5
对其简单的翻译为:自动生成的文件,请不要修改。
此类是由aapt工具从其发现的资源数据里自动生成得来的,不应被手动修改。
其中aapt工具的作用为查看、创建、更新zip格式的文档附件(zip/jar/apk),以下为百度百科的解释
http://baike.baidu.com/view/5857547.htm
图5
图6为R.java源代码的执行部分
package com.example.helloworld;
public final class R {
public static final class attr {
}
public static final class dimen {
/** Default screen margins, per the Android Design guidelines.
Example customization of dimensions originally defined in res/values/dimens.xml
(such as screen margins) for screens with more than 820dp of available width. This
would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively).
*/
public static final int activity_horizontal_margin=0x7f040000;
public static final int activity_vertical_margin=0x7f040001;
}
public static final class drawable {
public static final int ic_launcher=0x7f020000;
}
public static final class id {
public static final int action_settings=0x7f080000;
}
public static final class layout {
public static final int hello_world_layout=0x7f030000;
}
public static final class menu {
public static final int hello_world=0x7f070000;
}
public static final class string {
public static final int action_settings=0x7f050002;
public static final int app_name=0x7f050000;
public static final int hello_world=0x7f050001;
}
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=0x7f060000;
/** Application theme.
All customizations that are NOT specific to a particular API-level can go here.
*/
public static final int AppTheme=0x7f060001;
}
}
图6
关于R.java的介绍这个转载讲得很清楚
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
转载出处:http://blog.sina.com.cn/s/blog_7b83134b01016043.html
R.java文件介绍
HelloWorld工程中的R.java文件
package com.android.hellworld;
public final class R {
}
PS:添加资源的命名规则:资源文件只能以小写字母和下划线做首字母,随后的名字中只能出现 [a-z0-9_.] 这些字符,否则R.java文件不会自动更新,并且eclipse会提示错误。
如何通过R.java文件来引用到所需要的资源
1.在java程序中引用资源
按照java的语法来引用即:R.resource_type.resource_name
注意:resource_name不需要文件的后缀名
Android系统本身自带了很多的资源,我们也可以进行引用,只是需要再前面加上“Android.”以声明该资源来自Android系统,即:Android.R.resource_type.resouce_name
例:【drawable-*hpi】下的icon.png
该图片在R.java文件的映射为drawable内部类下icon参数,则如果要获取该资源,则写法为:R.drawble.icon
2.在XML文件中引用资源
格式:@[package:]type/name
在xml文件中,如main.xml以及AndroidMainfest.xml文件中通过“@drawable/icon”的方式获取。其中“@”代表的是R.java类。“drawable”代表的是R.java中的静态内部类“drawable”,“/icon”代表静态内部类“drawable”中的静态属性“icon”,而该属性可以指向res目录下的“drawable-*dpi”中的icon.png资源。其他类型的文件也比较类似。凡是在R文件中定义的资源都可以通过“@Static_inner_classes_name/resource_name”的方式获取。如“@id/button”,“@string/app_name”。
如果访问的是Android系统中自带的文件,则要添加包名“Android:”。例如:android:textColor="@android:color/red"
(Eclipse 下Android工程R文件在clean之后消失的问题见下文:
http://blog.sina.com.cn/s/blog_7b83134b0101brvj.html)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
(3)Android 4.03、Android Private Libraries、Andriod Dependencies三个包为引用的API,可以暂时不用管它,如图7所示
图7
(4)assets
assets的原意为“资产”,本文件夹的功能为存放一些随程序打包的文件,在你的程序运行时可以动态读取到这些文件的内容,如mp3,视频等。另外,如果你的程序中使用到了WebView加载本地网页的功能,所有网页相关的文件也都存放在这个目录下,此目录没有子目录,用得不多。本目录中存放的资源不像src目录那样会在R.java中建立索引(ID),读取其中资源时必须制定文件路径。
(5)bin
bin的目录结构如图8所示,此目录也不需要过多关注,它主要存放一些在编译时自动产生的文件,因此大多为二进制(binary)的,所以取名为bin。特别注意bin有个src的子目录,和之后说明的src目录同名,此src目录暂且不用管,系统自建的。感兴趣以后探究
图8
(6)libs
由单词库(library)命名而来,如果项目中使用到了第三方Jar包,就需要把这些Jar包都放在libs目录下,放在这个目录下的Jar包都会被自动添加到构建路径中去。可以参考图7,其显示的Jar包都是已经被添加到构建路径里的。暂时没查到“构建路径”的解释,就把它理解为Jar包添加到构建路径才能被使用吧。
图9
网上看了还会有一个叫lib的目录,我的项目中没有,不过可以看看它们的区别
——————————————————————————————————————————————————————————————————————————
文章来源:http://zhidao.baidu.com/link?url=8xA1m87YXmFrHNOPQ56giDdMYBnUe7UrIzmBt3cCyHCLjgSoBnlVoeKZuBCheuxCgQ79jASN2T1AIMY1sM7sqCDslnIED3RiZH86PGNAU8O
放在lib中的是被reference的,放在libs中的是被include的。
放在libs中的文件会自动被Eclipse所include。所以不要把API放到libs里去。
lib的内容是不会被打包到APK中,libs中的内容是会被打包进APK中
——————————————————————————————————————————————————————————————————————————
(7)res
由单词resource(资源)命名而来,顾名思义,在项目中使用的所有图片、布局、字符串等资源都要存放在这个目录下,前面提到的R.java中的内容也是根据这个目录下的文件自动生成的。如图10
图10
子目录drwable存放图片,layout存放布局,emnu存放菜单选项,values放字符串。其中drawable有几个文件夹,用于放不同分辨率的图片,如drawable-hdpi存放高分辨率图片。
(8)AndroidManifest.xml
manifest为清单之意,本文件为整个Android项目的配置文件,你在程序中定义的所有四大组件都需要在这个文件里注册(只有注册才能使用)。另外还可以在这个文件中给应用程序添加权限声明,也可以重新制定你创建项目时制定的最低兼容版本和目标版本。这个文件会经常用到。
这篇文字讲解很详细
文章来源:http://www.cnblogs.com/pilang/archive/2011/04/20/2022932.html
(9)project.properties
这个文件非常简单,就是通过一行代码制定了编译程序时所用的SDK版本。