Android项目的目录结构与安装及启动过程分析

时间:2022-07-06 05:22:49


    Android的第一应用我们已经创建完毕,接下来我们项目的目录机构与安装及启动过程作一个分析。目录结构如下:

Android项目的目录结构与安装及启动过程分析

一、Android项目的目录结构

1、src目录存放的是Java的源文件。

package com.cooper.app;

import android.app.Activity;
import android.os.Bundle;

public class HelloWorldActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}

2、gen目录存放的是由开发工具自动生成的文件。该目录下的R.java用于记录各种资源文件件的ID,将资源文件放入之后该文件自动更行,不需要开发人员进行维护,同时开发人员也不能修改,通过名称进行匹配,名称必须唯一。

/* 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.cooper.app;

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 layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}


3、assets目录用于存放资源文件,但是不会在R.java文件中存放资源ID。如果要访问资源文件,可以通过file:///android_asset/xxx.xx。

4、res目录存放资源文件例如图片、文字等。

5、res/drawable目录用于存放图片资源,由于不同手机的屏幕大小不同,drawable-hdpi存放高分辨率的图片,drawable-ldpi存放低分辨率的图片,drawable-mdpi存放中分辨率的图片。

6、res/layout目录用于存放软件界面的文件,android应用通过XML定义软件的界面。

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />

</LinearLayout>

采用LinearLayout进行布局,布局方式有LinearLayout(线性布局,该布局可以纵向、横向布局,都显示的像一条线)、RelativeLayout(相对布局)、TableLayout(表格布局)、FrameLayout(帧布局)

xmlns:android 命名空间,用于*元素必须申明命名空间

android:orientation="vertical"  进行纵向布局,垂直摆放

android:layout_width="fill_parent" 指定宽度,撑满整个父元素,也可以通过数字制定宽度,但是必须带单位,单位有“px”、“dp”等
android:layout_height="fill_parent"指定高度,撑满整个父元素。

TextView 用于显示文字的组件

android:layout_width="fill_parent"指定宽度
android:layout_height="wrap_content" 指定高度。文字内容有多少,就显示多高
android:text="@string/hello"  显示文字

7、res/values目录用于存放所使用的数据,例如文字、尺寸、颜色。目的是为了实现国际化,还有就是为了减小内存的占用。也可以建多个文件,选中目录右键“New”-->"other"-->"Android"-->"Android XML Values File"

strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string name="hello">Hello World, HelloWorldActivity!</string>
<string name="app_name">HelloWorld应用</string>

</resources>


8、res/anim 存放定义动画效果的XML文件。

9、res/xml 用于存放Activity中的使用的文件,通过getResources().getXML读取该目录下的XML文件。

10、res/raw该目录用于存放应用中使用的原始文件。如音效文件等。这些数据不会被编译,他们被直接加入到程序安装包里,为了在程序中使用这些资源你可以通过getResourecs().open/RawResources(ID),参数ID形式R.raw.somefilename。

11、AndroidManifest.xml 这个文件列出了应用程序所提供的功能,是清单文件,以后开发好的各种组件(Activity、ContentProvider、BroadcastRecevier、Server)需要在该文件中进行配置,如果应用中使用到了系统内置的应用(电话服务、互联网服务、短信服务)你还要在该文件中声明使用权限。

<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cooper.app"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" >
<activity android:label="@string/app_name" android:name=".HelloWorldActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>


 

xmlns:android  命名空间

package  包名,在应用中是唯一的

android:versionCode 软件版本

android:versionName 软件版本名称

application 应用

android:icon 应用图标,"@drawable/ic_launcher"这个表达式的意思是访问R.java文件中drawable内部类里面的常量所指的资源作为应用的图标

activity 代表窗口,一个应用可以有多个窗口。

android:label 窗口的标题

android:name=".HelloWorldActivity"  代表这个窗口所调用的类,“.”代表当前包名下,这种组件必须放在应用的包或子包下

intent-filter 内部过滤器

<span style="font-size:18px;"><action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /></span>
这两句代码赋予了特殊的含义,代表的意思是将这个Activity窗口作为应用的主窗口(打开应用时,会显示这个窗口)并且会显示到应用列表中,他们配合使用,并且只能在一个Activity中使用

android:minSdkVersion="8" 代表软件兼容的最低版本

注意:这些配置文件在软件安装的时候被读取。


12、default(project).properties 该文件用于定义项目环境信息,一般是不用修改此文件。

二、Android应用的安装过程

.java-->.class-->.dex-->打包(签名)-->.apk-->运行

Java编译器将java文件编译成字节码文件“.class”,android通过sdk带的dx工具把所有“.class”文件生成一个“.dex”文件,然后进行打包,采用默认签名进行签名,生成apk文件,最后运行应用。

三、Android应用的启动过程

点击图标创建进程,然后创建线程,在主线程中实例话Activity,操作系统会把应用有关的信息(Context)存放在Activity中,然后调用onCaeare()方法,进行显示资源文件。