几乎所有的程序员在接触一门新的技术写的第一个应用程序都是HelloWord,那么今天我们也通过编写一个HelloWord程序对android程序中各层,目录,及所有的文件进行详细的解析。
首先,new一个Android的Project,声明包名,选择Android版本,我们选择的是Android的2.3.3版本,finish之后我们会看到这个项目的架构:
下面我们来一一介绍架构中各部分的含义及作用:
src
目录用于存放我们编写的java代码;
packagecn.sword.android.activity;
importandroid.app.Activity;
importandroid.os.Bundle;
publicclass MyFirstAndroidProjectActivity extends Activity {
/** Called when the activity is firstcreated. */
@Override
public void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
1、继承了Activity这个类
2、重写了onCreate这个入口方法
1)方法中传递了一个BundlesavedInstanceState
2)方法中调用了父类的方法super.onCreate(savedInstanceState);
3)setContentView(R.layout.main);
R.layout.main中的R是gen目录下eclipse自动生成的一个final类,下面会有介绍
layout是类R中的一个静态内部类同样是eclipse自动生成的,main是内部类layout的一个静态的成员变量,这些是怎么来的,到底是什么玩意一会讲解下面的目录的时候会提到。
gen
gen 目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。 这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的xml界面文件、图标与常量,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了界面、图标、常量等各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。
在R.java中有四个静态内部类:
staticfinal class attr
将存放在res中values下xml中的数组对象生成唯一的十六进制ID
staticfinal class drawable
将存放在res中的图片生成唯一的十六进制ID
staticfinal class layout
将存放在res中layout下的布局文件生成唯一的十六进制ID
staticfinal class string
将存放在res中values下xml中的键值对生成唯一的十六进制ID
当我们在代码中用到res中各文件中的属性的时候直接以此类方法R.layout.main调用即可
Android2.3.3
存放Android程序开发的类库文件,此为系统自动添加
assets
是资源文件夹,其中存放应用中用高的类似于视频文件、MP3一些媒体文件
res
在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。该文件夹中所有资源均在gen目录下的R类中生成一个唯一的十六进制的ID,方便程序开发中对其调用
在该目录下有如下几个文件夹
drawable-hdpi---存放高分辨率的图片
drawable-ldpi---存放中分辨率的图片
drawable-mdpi---存放低分辨率的图片
因为根据手机屏幕的分辨率不同而设计的,在程序开发中所用到的图片一般均为 png格式
layout----------MVC架构中的V层,存放布局文件,作用是控制Activity中控件的位置
values----------放置程序中使用到的字符串,一般放在strings.xml中,但是也可以写自己的文件,只有遵循对应的约束即可。这样可以更方便的实现国际化和代码复用,节约内存。
AndroidManifest
功能清单文件,重点介绍一下这个文件:
这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。
<?xml version="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="cn.sword.Activity" <!-- 当前应用所在包 -->
android:versionCode="1"
android:versionName="1.0">
<!-- @:次标记可以理解为读取R.java中的资源
android:icon="@drawable/icon"为应用程序的图标
android:label="@string/app_name"为应用程序的名称 -->
<applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
<!--用以描述一个activity
.MainActivity中的“.”意思是当前包路径下的MainActivity,此时可以省略
必须是上面package中所生明的路径,或其下面的子路径
如果是多级路径,“.”不能省略,如.sub.MainActivity
-->
<activity android:name=".MainActivity"
android:label="@string/app_name">
<!--意图过滤器:安装android应用时系统读取此信息
下面的信息用以声明当前应用的启动activity,它会被系统显示在程序菜单栏中 ,如果是其它意图,可以修改为别的内容
当activity中配置有<intent-filter>意图过滤器时在程序启动后会首先进入这个Activity
-->
<intent-filter>
<actionandroid:name="android.intent.action.MAIN" />
<categoryandroid:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--另外两个activity -->
<activityandroid:name=".OtherActivity" />
<activityandroid:name=".ThreeActivity" android:theme="@android:style/Theme.Dialog"/>
</application>
<!—sdkandroid的版本 -->
<uses-sdk android:minSdkVersion="10" />
</manifest>
proguard.cfg
混淆器,对源代码进行一定的加密,压缩代码;
project.properties
项目环境信息,一般是不需要修改此文件
下面在模拟器上运行这个程序,右击项目名Run As--->Android Application,
运行成功
如有错误请帮忙指出,谢谢。