Android應用程序結構–比較偏的考試題目

 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接口訪問這些數據即可。當然這涉及到數據訪問的權限問題。

You May Also Like