Android目錄結(jié)構(gòu)(詳解) 下面是HelloAndroid項目在eclipse中的目錄層次結(jié)構(gòu): 由上圖可以看出項目的根目錄下共有九個文件(夾),,下面就這九個文件(夾)進行詳解: 1.1src文件夾和assets文件夾: 每個Android程序都包含資源目錄(src)和資產(chǎn)目錄(assets),,資源和資產(chǎn)聽起來感覺沒有多大差別,但在存儲外部內(nèi)容時用資源(src)比較多,其中它們的區(qū)別在于存放在資源(src)下的內(nèi)容可以通過應用程序的R類進行訪問,,而存放在資產(chǎn)(assets)下的內(nèi)容會保持原始文件的格式,,如果需要訪問,則必須使用AssetManager以字節(jié)流的方式來讀取,,用起來非常的不方便,。為了方便使用,通常文件和數(shù)據(jù)都會保存在資源(src)目錄下 1.2res(Resource)目錄:資源目錄 可以存放一些圖標,,界面文件和應用中用到的文字信息,,下圖為res目錄截圖: 1.2.1 drawable-*dpi文件夾:將圖標按分辨率的高低放入不同的目錄,其中draeable-hdpi用來存放高分辨率的圖標,,drawable-mdpi用來存放中等分辨率的圖標,,drawable-ldpi用來存放低分辨率的圖標 1.2.2 values文件夾:用來存放文字的信息 (1)strings.xml:用來定義字符串和數(shù)值 <?xml version="1.0"encoding="utf-8"?> <resources>
<string name="hello">Hello World, Hello 3G</string> <string name="app_name">Android1.1</string> <string name="test">哥想你了</string> <string name="startButton">按鈕1</string> <string name="start">按鈕1</string> </resources> 每個string標簽生命了一個字符串,name屬性指定它的引用值 (2)為什么要把這些出現(xiàn)的文字單獨放在strings.xml文件中,? 答案:一是為了國際化,,如果需要將文件中的文字換成別的國家的語言,就可以只需要替換掉一個strings.xml文件就可以了 二是為了減少應用的體積,,例如,,我們要在應用中使用“哥想你了”這句話1000次,如果我們沒有將“哥想你了”定義在strings.xml文件中,,而是直接在應用中使用時寫上這幾個字,,那么我們就會在應用中寫4000個字。4000個字和4個字占用的內(nèi)存可是有很大差距的啊,,況且手機的內(nèi)存本來就小,,所以應該是能省就省 (3)另外還有arrays.xml,color.xml等定義數(shù)組,顏色的,,都最好用單獨的一個xml文檔 1.2.3 layout文件:用來存放界面信息 本例中的布局文件是自動生成的“main.xml” <?xml version="1.0"encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas./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/test"/>
</LinearLayout> <LinearLayout>元素:線性布局的意思,,在該元素下的所有子元素都會根據(jù)他的”orientation”屬性來決定是按行還是按列或者按逐個顯示進行布局的 <TextView>元素:是一種顯示控件,他的”text”屬性指定了在這個元素上顯示的內(nèi)容 1.3 gen目錄:gen目錄下只有一個自動生成的“R.java”文件 /*AUTO-GENERATED FILE. DO NOT MODIFY. * * This class was automatically generated bythe * aapt tool from the resource data itfound. It * should not be modified by hand. */
packagecn.csdn.android.demo;
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 button1=0x7f050000; public static final int radioButton1=0x7f050001; public static final int toggleButton1=0x7f050002; } 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; public static final int start=0x7f040004; public static final int startButton=0x7f040003; public static final int test=0x7f040002; } }
R.java文件:默認有attr,drawable,layout,string這四個靜態(tài)內(nèi)部類,,每個靜態(tài)內(nèi)部類對應一中資源,,如layout靜態(tài)內(nèi)部類對應layout中的界面文件,string靜態(tài)內(nèi)部類對應string內(nèi)部的string標簽,。如果在layout中在增加一個界面文件或者在string內(nèi)增加一個string標簽,,R.java會自動在其對應的內(nèi)部類增加所增加的內(nèi)容。 R.java除了自動標識資源的索引功能外,,還有另一個功能,,就是當res文件中的某個資源在應用中沒有被用到,在這個應用被編譯時,,系統(tǒng)不會把對應的資源編譯到應用中的APR包中,。 1.4 AndroidManifest.xml 功能清單文件 每個應用程序都會有一個AndroidManifest在它的根目錄里面,。這個清單為Android系統(tǒng)提供了這個應用的基本信息,系統(tǒng)在運行之前必須知道這些信息,,另外,,如果我們使用系統(tǒng)自帶的服務,如撥號服務,,應用安裝服務等,,都必須在AndroidManifest.xml文件中聲明權(quán)限 AndroidManifest.xml的功能: 命名應用程序的Java應用包,這個包名用來唯一標識應用程序,; 描述應用程序的組件,,對實現(xiàn)每個組件和公布其功能的類進行命名,這些聲明使得Android系統(tǒng)了解這些組件以及它們在什么條件下可以被啟動 決定哪個組件運行在哪個進程里面 聲明應用程序必須具備的權(quán)限,,用以訪問受保護的API,以及和其他進程的交互 聲明應用程序其他的必備權(quán)限,,用以組件之間的交互 列舉application所需要鏈接的庫 以HelloAndroid項目的功能清單為例子進行講解: <?xml version="1.0"encoding="utf-8"?> <manifest xmlns:android="http://schemas./apk/res/android" package="cn.csdn.android.demo" 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=".HelloActivity"> <intent-filter > <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 1.4.1 <manifest>元素 <manifest xmlns:android="http://schemas./apk/res/android" package="cn.csdn.android.demo" android:versionCode="1" android:versionName="1.0"> <manifest>元素是AndroidManifest.xml的根元素,”xmlns:android”是指該文件的命名空間,,“package”屬性是Android應用所在的包,“android:versionCode”指定應用的版本號,,如果應用不斷升級,,則需要修改這個值,”android:versionName”是版本的名稱,,這個可以根據(jù)自己的喜愛改變 1.4.2 <application> 元素 <application android:icon="@drawable/ic_launcher" android:label="@string/app_name"> <activity android:label="@string/app_name" android:name=".HelloActivity"> <intent-filter > <action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <application>元素是一個很重要的元素,,開發(fā)組件都會在此下定義 <application>元素的”icon”屬性是用來設定應用的圖標,其中“@drawable/ic_launcher”的意思是:在R.java文件中的drawable靜態(tài)內(nèi)部類下的icon,,如下圖所示 <application>元素的“l(fā)abel”屬性用來設定應用的名稱,,其中“@string/app_name”和上述的一樣,也是R.java文件中的string靜態(tài)內(nèi)部類下的app_name 1.4.3 <activity>元素 <activity android:label="@string/app_name" android:name=".HelloActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity>元素的作用是注冊一個activity信息,,當我們在創(chuàng)建“HelloAndroid”這個項目時,,指定了“Created Activity”屬性為“HelloActivity”,然后ADT在生成項目時幫我們自動創(chuàng)建了一個Activity,,就是“HelloActivity.java”,; <activity>元素的“name“屬性指定的是Activity的類名,其中“.HelloActivity”中的“.”指的是<manifest>元素中的“package”屬性中指定的當前包,,所以“.HelloActivity”就相當于“cn.csdn.android.demo.HelloActivity.java”,,如果Activity在應用的包中可以不寫“.”,但是為了避免出錯,,還是寫上這個點把 1.4.4<intent-filter>元素 <intent-filter > <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter>如果直接翻譯的話是“意圖過濾器”,,組件通過<intent-filter>告訴它們所具備的功能,就是能響應意圖類型,,在intent中設置action, data, categroy之后在對應的intentfilter中設置相同的屬性即可通過過濾被activity調(diào)用 1.5<project.properties>應用要求運行的最低Android版本 1.6<android 2.2> 存放Android自身的jar包
原文鏈接:http://blog.csdn.net/xy849288321/article/details/7047419 |
|