第四堂:
Android 的架構與開發工具
柯力中 Jason Ko
Jason的Android 快樂應用程式學習班
課程內容
• Android 的架構
• 介紹 Android 的專案
• 圖形化編輯器的使用
• 學習如何偵錯
• 其他面板介紹
Jason的Android 快樂應用程式學習班
Android 的架構
Jason的Android 快樂應用程式學習班
Android 的架構
Applications: 應用層
Application Framework:
應用框架層
Libraries: 原生程式庫
Android Runtime:
Android 執行層
Linux Kernel:
Linux 核心層
Jason的Android 快樂應用程式學習班
Linux 核心
• Android 的底層是 Linux 作業系統
• Linux 作業系統被使用得很廣, ex. Mac, Ubuntu, CentOS
• Linux 有高的可攜性, 安全性, 與支援各種硬體功能
• 可攜性:容易移植到不同的硬體架構上
• 安全性:有權限規範
• 支援各種硬體功能:如記憶體, 電源, 網路...等
Jason的Android 快樂應用程式學習班
HAL 硬體抽象層
• HAL : Hardware Abstraction Layer 硬體抽象
層是在 Linux 與 Android 之間的抽象層
• 這一層主要是要求(手機)硬體製造商要將硬
體的驅動程式實作好並抽象化
• 抽象畫之後, Android (底層) 開發者就不需要
去尋找硬體驅動程式, 而可直接使用抽象方法
Jason的Android 快樂應用程式學習班
Libraries 原生程式庫
• 原生層式庫是 C / C++ 寫成. 用來支援應用層是框架層
• Bionic : Android 的 libc 程式庫, 必須遵守開源規範, 開發後要再回歸開源社群, 不可私有
化
• Binder : 通訊機制, 讓 App 們可以互相通訊
• Framework 程式庫:支援 media, 電話, wifi 等
• Webkit :支援瀏覽器的引擎
• SQLite :支援 SQLite 資料庫
• OpenGL : 3D 繪圖程式庫
• OpenSSL : 安全插槽層, 提供安全點對點連接
Jason的Android 快樂應用程式學習班
原生背景服務程式(Native Daemons)
• 運行在背景的原生程式
• 服務管理器 (Service Manager):可執行其他所有框架服務的行
程
• 無線射頻背景服務 ( rild ) : 支援電話功能
• 安裝程式背景服務 ( installd) : 支援 App管理與安裝
• 媒體伺服器 (mediaserver) :支援相機, 音訊與其他媒體
• Android Debug ( adbd ) : 支援連結電腦與裝置 (使用 adb)
Jason的Android 快樂應用程式學習班
Dalvik 虛擬機
• 減少記憶體使用量
• 減少電源消耗
• JVM 非是開源的, 解決授權問
題
Jason的Android 快樂應用程式學習班
APK 檔
• APK 是 Android APP 的安裝檔
• APK 是 Android Application
Package 的簡稱, 是一個壓縮
檔
• 裡頭會有 Dalvik 的執行檔 .dex
Jason的Android 快樂應用程式學習班
介紹 Android 專案
Jason的Android 快樂應用程式學習班
Android 專案結構
• src.main.java => java 程式檔
• libs => libraries 引用程式檔
• res => 資源檔
• res / drawable => 圖片資源
• res / layout => 介面 layout 資源
• AndroidManifest.xml => APP 設定檔
• build.gradle => APP project 編譯設定檔
AndroidManifest.xml:Project 的設定檔
• 用來設定App名稱, icon, Activity 等
• xml 是一種存資料的格式
strings.xml:Project 的字串資源
• 用來設定App 會用到的字串資源
• xml 是採 key, value 的方式存取
• ex. 此例子中 R.string.app_name = “HelloWorld”
Jason的Android 快樂應用程式學習班
排版的 XML 檔
• 在這裡定義版面與元件
• 範例是 activity_main.xml, 裡頭用了一個
RelativeLayout 的版面配置, 裡面還含了一個元件
TextView
Jason的Android 快樂應用程式學習班
drawable:圖片資源資料夾
• drawable 這些資料夾是用來放圖片資源的
• 不同的 dpi 要放置不同 px 大小的圖片
• mdpi 跟 px 的比例是 1: 1
libs:引用第三方資源(jar檔)的資料夾
• 引用第三方的程式碼時, 將其放置於此 libs
檔案夾
• 接著點擊工具列上的 sync project with
gradle file, 如下方圖示處, 就可以引用第三
方程式
libs:引用第三方資源(jar檔)的資料夾
• 引用第三方的程式碼時, 將其放置於此 libs
檔案夾
• 接著點擊工具列上的 sync project with
gradle file, 如下方圖示處, 就可以引用第三
方程式
圖形化編輯器的使用
Jason的Android 快樂應用程式學習班
Android 的 Layout 編輯器:Design
Jason的Android 快樂應用程式學習班
Android 的 Layout 編輯器:Text
Jason的Android 快樂應用程式學習班
學習如何偵錯
Jason的Android 快樂應用程式學習班
• Android 除錯有兩種方式:
1. 設中斷點除錯
2. logcat 除錯
Android Debug 除錯
Jason的Android 快樂應用程式學習班
• 在 java class 中欲中斷地方點選, 使其出現紅
圈
中斷點除錯
點這裡
Jason的Android 快樂應用程式學習班
1.在 java class 中欲中斷地方點選, 使其出現紅
圈
中斷點除錯
點這裡
Jason的Android 快樂應用程式學習班
2. 在工具列選擇 debug app
中斷點除錯
點這裡
Jason的Android 快樂應用程式學習班
3. 程式就會停在中斷點處, 並在下方面板出現
Debugger
中斷點除錯
變數區
跳下一行程式繼續
停止除錯
Jason的Android 快樂應用程式學習班
• Log 的內容會出現在 Logcat
• Log 有五個不同的 Level :
Verbose, Debug, Info, Warn, Error
• 使用方法為 Log.v, Log.d, Log.i, Log.w, Log.e
• Android 會用不同的顏色顯示這些 log, 最低層級為
verbose(白色), 最高為 error (紅色)
Log 除錯法
Jason的Android 快樂應用程式學習班
Log 除錯法
class 中的 Log 語法:
log 會出現在 logcat 中:
Jason的Android 快樂應用程式學習班
Log 實作練習
Jason的Android 快樂應用程式學習班
題目:在 MainActivity 中有 onCreate(), onStart(),
onResume(), onPause(), onStop(), onDestroy()
六個 Override 的方法, 請利用 Log 以及操作模擬
機, 以求得這6 個方法的出現時機與先後順序.
Activity 的 LifeCycle
Jason的Android 快樂應用程式學習班
其他面板介紹
Jason的Android 快樂應用程式學習班
• 更改專案瀏覽方式
• Terminal
• Todo
其他面板介紹