网上转载两篇关于工程目录的文章,帮助对建立android工程及初步开发的理解:
================第一篇===================== Android工程目录
如果使用Eclipse插件ADT开发应用程序,必须要熟悉工程的目录结构,清楚各个目录下面放置的是什么东西。Android工程主要的目录有:src、bin、gen和res等。不同的Android 平台目录结构是不同的,其中Android 1.5及以下版本目录结构如图3-6所示。
Android 1.5以上版本的目录结构如图3-7所示,res下面的drawable变成了3个。
1.src目录
src目录是Android工程的源程序目录,该目录是存放项目的源代码的,例如HelloAndoid.java文件。
2.bin目录
在使用Eclipse开发时,可以不用关心bin目录。如果在Eclipse中看不到,可以到资源管理器下面查看,如图3-8所示。
bin目录是编译之后的字节码存放目录,编译的过程首先是编译成为Android Java虚拟机(Dalvik Virtual Machine)文件classes.dex,再把该classes.dex文件打包成为apk包,apk包是Android平台上安装的应用程序包,类似于Windows应用程序setup.exe安装文件。
3.gen目录
该目录存放所有自动生成的文件,这个目录中最关键的文件是R.java。R.java是个中介文件,在建立项目时自动生成,这个文件是只读模式的,不能更改。
R.java文件是自动产生的R类,R类中包含很多静态类,且静态类的名字都与res中的一个名字对应,就像是个资源字典大全。其中包含了用户界面、图像、字符串等对应各个资源的标识符,R类定义了该项目所有资源的索引。例如界面中有一个文本框控件,这个控件就在布局文件中有id,id是“android:id="@+id/textview"”,那么通过R.id.textview"就可以找到这个控件。
通过R.java可以很快地查找到所需要的资源,同时编译器也会检查R.java列表中的资源是否被使用,没被使用到的资源不会被编译到软件中,这样可以减少在手机占用的空间。
4.res目录
res资源目录,它包含项目中的资源文件并将其编译进应用程序中,向此目录添加资源时,会被R.java自动记录。res目录存放所有程序中用到的资源文件。“资源文件”指的是资料文件、图片等。子目录有:drawable、layout、values。
drawable。存放一些应用程序需要用的图片文件(*.png、*.jpg),Android 1.5及以下版本目录是drawable,Android 1.5以上版本有3个:drawable-hdpi、drawable-mdpi和
drawable-ldpi。drawable-hdpi放置高质量的图片。drawable-mdpi放置中质量图片,drawable-ldpi放置低质量的图片。虽然是3个目录,但是在使用R文件访问时,与Android 1.5及以下版本一样的。
layout。屏幕布局目录,layout目录内默认布局文件是main.xml,可以在该文件内放置不同的布局结构和控件,来满足项目界面的需要,也可以新建布局文件。
values。参数值目录,存放软件所需要显示的各种文字和一些数据。可以在这个目录下的strings.xml存放各种文字,还可以存放不同类型的数据,比如arrays.xml、colors.xml、styles.xml等。例如:在main.xml布局文件中访问strings.xml文件内容可以是
"@+string/hello"方式,在程序中访问方式为R.string.hello。
raw资源目录。使用Eclipse创建Android工程,默认情况下不会在res目录下面创建这个目录,如果需要可以自己创建这个目录,它可以通过I/O流访问,如应用中内置音频文件,就可以放置在这个目录下面。访问方式为R.raw.xxx方式。
5.assets目录
除了提供res目录存放资源文件外,Android在assets目录也可以存放资源文件,assets 目录下的资源文件不会在R.java自动生成id,所以读取assets目录下的文件必须指定文件的路径,可以通过AssetManager类来访问这些文件,如下代码实现了访问一个该目录下图片文件的功能:
1.private Bitmap getImageFromAssetFile(String fileName){
2.Bitmap image = null;
3.try{
4.AssetManager am = context.getAssets();
5.InputStream is = am.open(fileName);
6.image = BitmapFactory.decodeStream(is);
7.is.close();
8.}catch(Exception e){
9.}
10.return image;
11.}
12.
“
================第二篇=====================
工欲善其事,必先利其器”,虽然做了两个小例子,我觉得很有必要把项目的目录给弄清楚,这样才能做到心里有数。下面就用上节的那个小例子的工程为示例详细说说工程目录下各个文件夹与文件的作用,如下所示:
可以看出这个工程由src,gen,Android2.3.3 jar包,assets,bin,res,AndroidManifest.xml,proguard.cfg,project.properties这几个文件(夹)组成,具体作用如下所示:
下面分层次详解几个重要的文件(夹)
●src文件夹
展开这个文件夹如下所示:
可以看出,这个文件夹主要用来存放源文件●gen文件夹
展开这个文件夹如下所示:
这个R.java文件是系统自动生成的文件,非常的重要。这个R.java 默认有attr,drawable,layout,string 4个静态内部类,每个类对应一种资源。例如我们在工程中添加一幅图片,那么工程就会在此类的drawable内部类中添加一条数据,如果删除了此图片,工程则会自动删除此条数据。由此可见,R.java类似于电脑中的“注册表”,这么形容应该不过分吧!
那么我们怎么通过R.java文件引用添加的资源呢?
(1)在Java程序中,我们通过Java语法来引用资源
① R.resource_type.resource_name
例如,我们要引用工程目录下此文件
我们可以通过R.drawable.ic_launcher获得,因为此为图片文件,所以会在R.java文件的drawable内部类中注册信息
② Android. R.resource_type.resource_name
上面这个图片我们也可以用android.
R.drawable.ic_launcher获得
(2)在xml文件中引用资源
① @[package:]type/name
使用我们自己包下的资源可以省略包名。
在XML文件中,main.xml和AndroidMainFest.xml 文件中如果想要引用上图的资源,我们可以通过
“@drawable/ic_launcher”获得,这个表达式的意思是,@代表R.java 类,drawable则代表R.java类中的静态内部类,而/ ic_launcher则代表静态内部类drawable中的属性ic_launcher,这个属性则对应上图中的那个图片!
②如果访问android系统中的资源,那么则需要加上包名“android:”,如:
android:textColor=“@android:color/red”
(3)“@+id/string_name”表达式
在布局文件中我们需要给一些组件添加id,就可以使用此表达式。此表达式“+”表示在R.java文件的内部静态类id中添加一个静态变量“string_name”,如前面我们的代码:
[html]view plaincopyprint?
1.