標籤:android style c class code java
Android目錄結構(詳解)
下面是HelloAndroid項目在eclipse中的目錄階層:
由可以看出項目的根目錄下共有九個檔案(夾),下面就這九個檔案(夾)進行詳解:
1.1src檔案夾和assets檔案夾:
每個Android程式都包含資來源目錄(src)和資產目錄(assets),資源和資產聽起來感覺沒有多大差別,但在儲存外部內容時用資源(src)比較多,其中它們的區別在於存放在資源(src)下的內容可以通過應用程式的R類進行訪問,而存放在資產(assets)下的內容會保持原始檔案的格式,如果需要訪問,則必須使用AssetManager以位元組流的方式來讀取,用起來非常的不方便。為了方便使用,通常檔案和資料都會儲存在資源(src)目錄下
1.2res(Resource)目錄:資來源目錄
可以存放一些表徵圖,介面檔案和應用中用到的文字資訊,為res目錄:
1.2.1 drawable-*dpi檔案夾:將表徵圖按解析度的高低放入不同的目錄,其中draeable-hdpi用來存放高解析度的表徵圖,drawable-mdpi用來存放中等解析度的表徵圖,drawable-ldpi用來存放低解析度的表徵圖
1.2.2 values檔案夾:用來存放文字的資訊
(1)strings.xml:用來定義字串和數值
<?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)為什麼要把這些出現的文字單獨放在strings.xml檔案中?
答案:一是為了國際化,如果需要將檔案中的文字換成別的國家的語言,就可以只需要替換掉一個strings.xml檔案就可以了
二是為了減少應用的體積,例如,我們要在應用中使用“哥想你了”這句話1000次,如果我們沒有將“哥想你了”定義在strings.xml檔案中,而是直接在應用中使用時寫上這幾個字,那麼我們就會在應用中寫4000個字。4000個字和4個字佔用的記憶體可是有很大差距的啊,況且手機的記憶體本來就小,所以應該是能省就省
(3)另外還有arrays.xml,color.xml等定義數組,顏色的,都最好用單獨的一個xml文檔
1.2.3 layout檔案:用來存放介面資訊
本例中的布局檔案是自動產生的“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/test"/>
</LinearLayout>
<LinearLayout>元素:線性布局的意思,在該元素下的所有子項目都會根據他的”orientation”屬性來決定是按行還是按列或者按逐個顯示進行布局的
<TextView>元素:是一種顯示控制項,他的”text”屬性指定了在這個元素上顯示的內容
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這四個靜態內部類,每個靜態內部類對應一中資源,如layout靜態內部類對應layout中的介面檔案,string靜態內部類對應string內部的string標籤。如果在layout中在增加一個介面檔案或者在string內增加一個string標籤,R.java會自動在其對應的內部類增加所增加的內容。
R.java除了自動標識資源的索引功能外,還有另一個功能,就是當res檔案中的某個資源在應用中沒有被用到,在這個應用被編譯時間,系統不會把對應的資源編譯到應用中的APR包中。
1.4 AndroidManifest.xml 功能資訊清單檔
每個應用程式都會有一個AndroidManifest在它的根目錄裡面。這個清單為Android系統提供了這個應用的基本資料,系統在運行之前必須知道這些資訊,另外,如果我們使用系統內建的服務,如撥號服務,應用安裝服務等,都必須在AndroidManifest.xml檔案中聲明許可權
AndroidManifest.xml的功能:
命名應用程式的Java應用程式套件,這個包名用來唯一標識應用程式;
描述應用程式的組件,對實現每個組件和公布其功能的類進行命名,這些聲明使得Android系統瞭解這些組件以及它們在什麼條件下可以被啟動
決定哪個組件運行在哪個進程裡面
聲明應用程式必須具備的許可權,用以訪問受保護的API,以及和其他進程的互動
聲明應用程式其他的必備許可權,用以組件之間的互動
列舉application所需要連結的庫
以HelloAndroid項目的功能清單為例子進行講解:
<?xml version="1.0"encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/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.android.com/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”是版本的名稱,這個可以根據自己的喜愛改變
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>元素是一個很重要的元素,開發組件都會在此下定義
<application>元素的”icon”屬性是用來設定應用的表徵圖,其中“@drawable/ic_launcher”的意思是:在R.java檔案中的drawable靜態內部類下的icon,如所示
<application>元素的“label”屬性用來設定應用的名稱,其中“@string/app_name”和上述的一樣,也是R.java檔案中的string靜態內部類下的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資訊,當我們在建立“HelloAndroid”這個項目時,指定了“Created Activity”屬性為“HelloActivity”,然後ADT在產生項目時幫我們自動建立了一個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調用
1.5<project.properties>應用要求啟動並執行最低Android版本
1.6<android 2.2> 存放Android自身的jar包
【引用】http://www.oschina.net/question/234345_53839