經過前幾天的練習,相信大家已經對如何做出一個簡單的界面有了初步的了解,並且已經做出來一個還不錯的天氣列表了。
今天大家稍事休息,要練習的內容比較少,着重學習一些理論知識,先理清幾個概念。
Android系統架構
Android系統本質上是Linux系統,但相對於Linux系統,主要在驅動、性能、內存管理、設備管理等一些部分做了比較多的改動,以更適用於移動設備。
從上圖可以看到,Android系統架構為四層,分別是Linux內核、系統運行庫、應用程序框架以及應用層,每一層的作用分別為:
Linux內核
提供了作為一個操作系統所應有的基礎功能,包括各種硬件驅動、內存管理、電源管理等,該層作為硬件和軟件之間的抽象層而存在。
系統運行庫
系統運行庫分為兩部分,系統庫和Android運行時,系統庫提供了底層的Sqlite、SSL、OpenGL、Surface Manager等類庫,從數據庫到網絡再到界面繪制,都在這一層進行。
Android運行時,這一部分在Android4.4以前是Dalvik,也就是Google實現的Java虛擬機,所有的Android APP都運行在虛擬機里面,每個Dalvik虛擬機都是一個獨立進程。簡單的說就是每個Android APP編譯之后會打包為APK文件,APK文件內部包含資源文件、代碼文件(Dex)、AndroidManifest.xml以及別的配置文件,而Dalvik虛擬機則執行的是Dex文件。
Android4.4以后,啟用了Dalvik虛擬機,而改用Android Runtime,根據Google的說明,新的Android Runtime會有更好的效率,執行速度更快、耗電更少、占用內存更低。
應用程序框架
這一層就是我們代碼可以直接調用的了,通常所說的Android API都會在這一層提供,主要包括Activity Manager、Window Manager、Content Provider等,等我們對系統有了更多的學習之后,會慢慢用到其中的一部分內容。
應用層
這一層就是我們平時可以操作的APP了。Android本身既是個操作系統,又提供了基礎的APP,如SMS、Phone、Browser等,當然了,更多的APP是需要我們程序員來實現的。
了解了Android系統的基礎架構后,再結合我們正在開發的天氣預報APP來具體的學習一下Android APP項目的一個核心的文件——AndroidManifest.xml。
AndroidManifest
每一個Android項目都包含一個清單(Manifest)文件--AndroidManifest.xml,它存儲在項目層次中的最底層,它是Android程序的全局配置文件,可以定義應用程序及其組件的結構和元數據。它包含了組成應用程序的每一個組件(活動、服務、內容提供器和廣播接收器)的節點,並使用Intent過濾器和權限來確定這些組件之間以及這些組件和其他應用程序是如何交互的。它還提供了各種屬性來詳細地說明應用程序的元數據(如它的圖標或者主題)的以及額外的可用來進行安全設置和單元測試頂級節點,我們先來看一下天氣預報APP的這個文件:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.demo.weather" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.demo.weather.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
我們逐次說明一下,
根節點
根節點定義了包名、版本號,其中package一定是唯一的,android:versionCode是供程序內部使用的版本號,android:versionName則會顯示給用戶。
uses-sdk
這個節點指定Android應用中所需要使用的SDK的版本,android:minSdkVersion指定可運行的最低版本,android:maxSdkVersion指定可運行的最高版本,android:targetSdkVersion這個指定了目標版本。
指定的版本均為數字,大家可以對照下表參考:
Android版本 | API Level |
5.0 | 21 |
4.4w | 20 |
4.4 | 19 |
4.3 | 18 |
4.2.2 | 17 |
4.1.2 | 16 |
4.0.3 | 15 |
4.0 | 14 |
3.2 | 13 |
3.1 | 12 |
3.0 | 11 |
2.3.3 | 10 |
2.2 | 8 |
2.1 | 7 |
1.6 | 4 |
1.5 | 3 |
關於android:targetSdkVersion這個目標版本很多初學者會疑惑,不明白到底有什么用。我個人的理解是比如你的APP指定了最低版本為8,目標版本為19,你開發過程中做出來的程序在Android4.4的設備上是沒有任何問題的,其他的版本Android系統就會進行相應的兼容適配。比如有些API在低版本是不提供的,就需要我們在程序中進行版本判斷,進行不同的代碼處理。注意,這個時候你指定了最低版本是8,你最低可以使用8的API,在程序編譯的時候,你用到了19的API是不會出現編譯錯誤的。
android:maxSdkVersion這個配置一般是不需要設置的,因為系統本身是向下兼容的。
uses-permission
這個節點指定了APP擁有的權限。Android系統對於權限管理是比較嚴格的,一個APP必須先聲明權限才能使用相應的功能。例如需要訪問網絡,則需要在這里聲明一個android.permission.INTERNET權限,相應的如GPS、Camera、VIBRATE等都需要先聲明權限才可以使用。
application
這個節點指定了APP的組件、屬性,如icon、label、name、theme等。
activity
這個節點是application的子節點,定義了整個APP的所有頁面。
其它
除了以上我們用到的幾個外,還有receiver、provider、service等,這些我們在以后慢慢熟悉。
一點點實踐
了解了Android本身的架構后,我們稍微修改一下manifest文件。
應用圖標
把上面的圖標放到res\drawable-hdpi文件夾下,然后修改application節點下的android:icon="@drawable/ic_launcher" 為 android:icon="@drawable/icon"
應用名稱
打開res\values\strings.xml文件,修改<string name="app_name">Weather</string>為<string name="app_name">天氣預報</string>
打完收工,運行程序。
可以發現應用左上角的圖標和名稱都變成了我們想要的。
今天的內容比較少,主要是一些基礎理論知識,也希望大家多多查閱資料,對Android本身的結構有更多更深入的了解。
附件是本次的工程文件,點擊下載。
此系列文章系本人原創,如需轉載,請注明出處 www.liuzhibang.cn