1. Android工程檔案組成
在包管理器中展開項目後如所示:
項目結構的剖析
建立的Android項目包含了src、gen、bin、assets、bin、res等目錄,AndroidMainifest.xml是Android項目所必須的,其他目錄、檔案都是可選的。
src目錄
src只是一個普通存放Java源檔案的目錄。
res目錄
res是存放Android項目的各種資源檔,該目錄裡存放了android應用所用的全部資源,包括圖片資源、字串資源、樣式資源、尺寸資源等等。
按照資源又分為drawable、layout、menu、values目錄
drawable子目錄
drawable子目錄主要圖片資源檔,支援的格式由.png、.jpg等位元影像文。
drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi四個子目錄則分別用於存放小、中、大、特大四種圖片檔案。
layout子目錄
layout存放介面布局檔案。
values存放各種xml格式的資源檔,如
dimens.xml尺寸資源檔;
string.xml字串資源檔;
styles.xml樣式資源檔;
bin目錄
bin用於存放產生的目標檔案,如Java的二進位檔案、資源打包檔案(.apk尾碼)、Dalvik虛擬機器的可執行檔性檔案(.dex尾碼)
gen目錄
gen用於儲存Android自動產生一個R.java資訊清單檔。
AndroidManifest.xml(Android應用的資訊清單檔)
AndroidManifest.xml檔案是Android項目的系統資訊清單檔,每個項目都必須的。
它是Android項目整個全域描述檔案,用於控制Android應用的名稱、表徵圖、存取權限等整體屬性。
AndroidManifest.xml清單通常包含的資訊
(1)應用程式的包名
(2)應用程式所包含的組件
(3)應用程式相容的最低版本。
(4)應用程式使用系統所需的許可權聲明
(5)其他程式訪問該程式所需的許可權聲明
<!-- 指定該Android應用的包名--><manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hero"
android:versionCode="1"
android:versionName="1.0">
<!-- 指明該項目支援最低、和最高的SDK範圍-->
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15"/>
<!-- 指定Android應用標籤、表徵圖-->
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<!-- 定義Android應用的一個組件Activity ,該activity的類為MainActivity, 並指定Activity的標籤-->
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main">
<intent-filter>
<!--指定該Activity是程式的入口 -->
<actionandroid:name="android.intent.action.MAIN"/>
<!-- 指定該應用時運行該Activity-->
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
AndroidManifest.xml應用許可權說明(比較偏的考試題目會遇到,例如:說明AndroidManifest.xml的作用)
一個Android應用程式可能需要許可權才能調用Android系統的功能,一個Android應用也可能被其他應用程式調用,因此它也需要聲明調用自身所需的許可權。
1.聲明該應用自身所擁有的許可權
通過<manifest.../>元素添加<users-permission.../>子項目即可自身聲明許可權。
<!-- 聲明該應用本身即有打電話的許可權 -->
<uses-permission android:name="android.permission.CALL_PHONE"/>
2.聲明調用該應用自身所需的許可權
通過<activity.../>元素裡添加如下代碼:
<!--聲明該應用本身既有打電話的許可權-->
<uses-permission android:name="android.permission.CALL_PHONE"/>
拓展:Android usrs-prmission 許可權大全
自動產生的類R.java
public final class R {
public static final class attr { }
public static final class dimen {
public static final int padding_large=0x7f040002;
public static final int padding_medium=0x7f040001;
public static final int padding_small=0x7f040000;
}
public static final class drawable {
public static final int ic_action_search=0x7f020000;
public static final int ic_launcher=0x7f020001; }
public static final class id {
public static final int menu_settings=0x7f080000; }
public static final class layout {
public static final int activity_main=0x7f030000; }
public static final class menu {
public static final int activity_main=0x7f070000; }
public static final class string {
public static final int app_name=0x7f050000;
public static final int hello_world=0x7f050001;
public static final int menu_settings=0x7f050002;
public static final int title_activity_main=0x7f050003; }
public static final class style {
public static final int AppTheme=0x7f060000; }}
R.java檔案(比較偏的考試題目會遇到,例如:說明R檔案的作用)
是由aapt工具根據應用中的資源檔來自動產生的,因此我們可以將R.java理解成android應用的資源字典。
aapt產生R.java檔案的兩條主要規則:
(1)每個類對應R類的一個內部類
(2)每個具體的資源項對應於內部類的一個public static final int 類型的Field。
隨著不斷的對Android項目添加資源,R.java檔案的內容也會越來越多。
2. Android體繫結構
Android的軟體階層包括一個作業系統,中介軟體,應用程式。其軟體階層自上而下可分為:
應用程式
應用程式架構
各種庫和Android的運行時環境
作業系統層
應用程式:以java語言編寫,設計使用者介面互動設計。Android本身提供了案頭,連絡人,電話,瀏覽器等很多核心的應用。
應用程式架構:為應用程式提供系統的API。通過Android的應用程式架構,開發人員可重用各種組件和服務。應用程式的架構組成部分:
UI組件:包括列表,文字框,按鈕等UI組件,是使用者可視的部分。
Content Providers:提供了一種應用程式程式可實現資料的訪問和共用的機制。
Notification Manager:能讓應用程式將自己的警告資訊顯示在狀態列上,如顯示收到新簡訊,提示電池資訊。
Activity Manager:管理應用程式的生命週期,並提供應用程式頁面退出的機制。
Android庫和運行時環境
Android包含一些核心的C/C++庫,這些庫能通過JNI技術供系統的各種組件使用。
這些庫包括:
系統C庫:從BSD繼承來的標準C庫。
媒體庫:包括多種常用的音頻,視頻格式回放和錄製。同時支援靜態影像檔,支援MPEG4,MP3,AAC,JPG,PNG,H.264,AMR等多種編碼格式。
Surface Manager:管理顯示子系統,並為多個應用程式提供2D和3D的無縫融合。
LibWebCore:瀏覽器引擎。
SGL:底層的2D圖形引擎。
3D librarie:提供3D加速。
FreeType:提供位位元影像和向量的字型顯示。
SQLite:資料庫應用。
Android包含了一個核心庫,該核心庫提供了java語言核心庫的大多數功能。
每一個Android應用程式都在自己的進程空間內運行,都擁有一個獨立的dalvik虛擬機器實現。Dalvik被設計成一個裝置,可同時高效的運行多個虛擬系統。dalvik虛擬機器依賴於linux核心的一些功能,如線程調度,記憶體管理。
3. Android應用程式組成
Android程式包括以下四部分:
Activity
Broadcast Intent Receiver
Server
Content Provider
Activity,一般代表手機螢幕的一屏,相當於瀏覽器的一個頁面。在Activity中添加view,實現應用介面和使用者互動。一個應用程式一般由多個Activity構成,這些Activity之間可互相跳轉,可進行頁面間的資料傳遞。每個Activity都有自己的生命週期。
Intent Receiver,Intent是一次對將要執行的操作的抽象描述。通過Intent,可實現Activity與Activity之間的跳轉。Intent最重要的組成部分是Intent的動作(Action)和動作對應的資料(data)。與Intent相關的一個類叫Intent Filters。它用來描述Intent能夠用來處理哪些操作。
Broadcast Intent Receiver,用於響應外來事件。BroadcastReceiver不能產生UI,所以對使用者來說是不可見的。
Service,運行在背景應用程式。
Content Provider:一個Content Provider提供了一組標準的介面,從而能夠讓應用程式儲存或讀取Content Provider的各種資料類型。一個應用程式可通過它將自己的資料暴露出去。對於外界的應用程式來說,它不需要關心這些資料的儲存方式,儲存地方,只需要通過Content Provide提供的r介面訪問這些資料即可。當然這涉及到資料訪問的許可權問題。