一、Android 系統簡介
1.1、1G-4G
1G:模擬制式手機,1995年問世的第一代模擬制式手機,只能進行語音通話,
2G:手機使用GSM,CDMA(9K/s),增加了接收數據的功能
2.5G:EDGE (172k/s)
3G:第三代數字通訊技術(3rd, Generation),
電國電信:CDMA2000,(日,韓和北美)
中國聯通:WCDMA(世界上大部分3G網絡都采用)
中國移動:TD-SCDMA(中國)
4G:LTE,長期演進.該技術包括 TD-LTE 和 FDD-LTE 兩種制式。4G 是集 3G 與 WLAN 於一體,並能夠傳輸高質
量視頻圖像
GSM->GPRS->EDGE->WCDMA->HSDPA-FDD-LTE長期演進
9k 42k 172k 364k 7.2M 300M
1.2、Adnroid由來
Android 系統最初由安迪·魯賓等人開發制作,最初開發這個系統的目的是創建一個數碼相機的先進操作系統;后來發現市場需求不夠大,加上智能手機市場快速成長,於是 Android 被改造為一款面向智能手機的操作系統,
2005 年由 Google 收購注資,並組建開放手機聯盟。2007 年 11 月 12 日,Android Beta
操作系統 SDK 正式發布。
1.3、進化史

1.4、Android 系統架構

android分為四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和linux核心層。
1.Applications:提供了一些系統級的應用程序如:瀏覽器,電話本,email,拔號器等
2.Application Framwork:應用程序框架
- 豐富而又可擴展的視圖(Views),可以用來構建應用程序, 它包括列表(lists),網格(grids),文本框(text boxes),按鈕(buttons), 甚至可嵌入的web瀏覽器。
- 內容提供器(Content Providers)使得應用程序可以訪問另一個應用程序的數據(如聯系人數據庫), 或者共享它們自己的數據
- 資源管理器(Resource Manager)提供 非代碼資源的訪問,如本地字符串,圖形,和布局文件( layout files )。
- 通知管理器 (Notification Manager) 使得應用程序可以在狀態欄中顯示自定義的提示信息。
- 活動管理器( Activity Manager) 用來管理應用程序生命周期並提供常用的導航回退功能。
3.庫系統運行庫
- libc:系統 C 庫,基於 embedded linux 的設備定制的
- Surface Manager - 對顯示子系統的管理,並且為多個應用程序提 供了2D和3D圖層的無縫融合。界面管理
- Media Framework:媒體框架庫
- SQLite:個對於所有應用程序可用,功能強勁的輕型關系型數據庫引擎
- OpenGL|ES:3D效果渲染,可以使用硬件 3D加速(如果可用)或者使用高度優化的3D軟加速
- FreeType -位圖(bitmap)和矢量(vector)字體顯示
- WebKit- 一個最新的web瀏覽器引擎用,支持Android瀏覽器和一個可嵌入的web視圖
- SSL:關於安全的部分
- SGL - 底層的2D圖形引擎
Android 運行庫
Core Library:Android 包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數功能
Dalvik虛擬機:依賴於linux內核的一些功能,比如線程機制和底層內存管理機制。
每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。Dalvik被設計成一個設備可以同時高效地運行多個虛擬系統。 Dalvik虛擬機執行(.dex)的Dalvik可執行文件,該格式文件針對小內存使用做了優化。同時虛擬機是基於寄存器的,所有的類都經由JAVA編譯器編譯,然后通過SDK中 的 "dx" 工具轉化成.dex格式由虛擬機執行。
4.Android 的核心系統服務依賴於 Linux 2.6 內核,如安全性,內存管理,進程管理, 網絡協議棧和驅動模型。 Linux 內核也同時作為硬件和軟件棧之間的抽象層。
1.4、JVM與Dalvik虛擬機的區別
- Dalvik 基於寄存器,而 JVM 基於棧。基於寄存器的虛擬機對於更大的程序來說,在它們編譯的時候,花費的時間更短
- VM字節碼由.class文件組成,每個文件一個class。JVM在運行的時候為每一個類裝載字節碼。相反的,Dalvik程序只包含一個.dex文件,這個文件包含了程序中所有的類。Java編譯器創建了JVM字節碼之后,Dalvik的dx編譯器刪除.class文件,重新把它們編譯成Dalvik字節碼,然后把它們寫進一個.dex文件中

二、SDK的下載與安裝
2.1、開發環境
目前主流的開發工具有兩個,一個是 Eclipse 另外一個是 Android Studio。 Eclipse 需要和 ADT(Android
Develop Tool)插件整合后才能使用,不過 Google 官方已經直接提供了 Eclipse 和 ADT 集成好的開發工具,
叫 ADT-Bundle。
Android Studio 是 Google 基於 IntelliJ IDEA 開發的 Android 集成開發工具,目前國內使用該開發工具
的企業也越來越多。Android 基礎階段我們依然使用 Eclipse 作為開發工具,在后面的課程中才會使用到
Android Studio。
2.2、ADT-Bundle 的下載和安裝
第一步:JDK 的安裝:
官方下載地址: http://www.oracle.com/technetwork/java/javase/downloads/index.htmle
下載好以后安裝,並配置系統環境變量,這里就不再贅述。
第二步:下載 ADT-Bundle for Windows
官方下載地址:http://developer.android.com/sdk/index.html
由於該網址在國內已經被屏蔽掉了,因此本人提供了一個百度網盤的下載地址。
網盤下載地址:http://pan.baidu.com/s/1gdwIAER
第三步:安裝 ADT-Bundle
直接把下載下來的 adt-bundle-windows-xxx-xxx.zip 解壓到需要安裝的位置
2.3、SDK 目錄結構
將下載好的 ADT-Bundle 解壓后根目錄結構如圖 1-2 所示,總共包括 3 個部分,eclipse、sdk、SDK
Manager.exe。


1、add-ons 這里面保存着附加庫,比如 GoogleMaps,當然你如果安裝了 OphoneSDK,這里也會有一
些類庫在里面;
2、build-tools 這里保存着與編譯相關的重要工具,比如 aapt、aidl、逆向調試工具 dexdump 和編譯腳
本 dx,
3、docs 這里面是 Android SDKAPI 參考文檔,所有的 API 都可以在這里查到;
4、extras 拓展開發包,這里面包括下向下兼容開發包以及 Intel 硬件加速程序等;
5、 platforms是每個平台的 SDK 真正的文件, 里面會根據 API Level 划分 SDK 版本, 這里就以 Android2.3
來說,進入后有 一個 android-10 的文件夾,android-10 進入后是 Android2.3 SDK 的主要文件,其中 data
保存着一些系統資源,images 是模擬器映像文件,skins 則是 Android 模擬器的皮膚,templates 是工程創建
的默認模板,android.jar 則是該版本的主要 framework 文件;
6、platform-tools 保存着一些通用工具,比如 adb.exe;
7、sources Android 系統源碼目錄,文件夾里可以包含多份源碼,根據 API Level 划分為不同的文件夾;
8、system-images Android 系統鏡像文件;
9、 tools 這里包含了重要的工具,比如 ddms 用於啟動 Android 調試工具,draw9patch 則是繪制 android
平台的可縮放 png 圖片的工具,sqlite3 可以在 PC 上操作 SQLite 數據庫,emulator 是 Android SDK 模擬器
主程序,traceview 作為 android 平台上重要的調試工具;
2.4、SDK Manager
SDK Manager.exe 是 ADT 根目錄下的一個 SDK 管理程序,該程序負責下載、更新、刪除與 sdk 相關
的文件

該管理器主要分為以下幾部分:
1、Tools 又分為 Android SDK Tools、Android SDK Platform-tools、Android SDK Build-tools。分別對
應 sdk 目錄中的 tools、platform-tools、build-tools 三個目錄。其中的 Rev. 代表版本號,Status 代表狀態。
2、 Android x.x.x(API xx) 一般會有多個,一個 API 就有一個條目。該條目下分為 SDK Platform、 System
Image、Sources for Android SDK。分別對應 sdk 目錄中的 platforms、system-images、sources 目錄。
3、Extras 主要分為 Android Support Library 和 HAXM(Inter x86 模擬器加速器),對應 sdk 目錄中的tools 文件。
由於 SDK Manager 需要通過連接國外互聯網才可以對 sdk 進行升級管理,但是國內是被屏蔽了的,因
此大家可以直擊從網站上下載現成的 sdk 文件,然后放到相應的目錄下,這樣就不需要 SDK Manager 進行
額外的管理工作。
2.5、AVD的創建與使用

上面的各個選項介紹如下:
1、AVD name 自定義的模擬器名稱,建議見名知意的命名原則;
2、Device 選擇設備屏幕分辨率;
3、Target 選擇 Android 操作系統版本;
4、CPU/ABI 選擇 CPU 架構。只有 x86 的才支持硬件加速。
5、Keyboard 勾選上后可以使用自己電腦鍵盤作為模擬器的鍵盤,不勾選的話默認使用模擬器鍵盤;
6、Skin 勾選上后顯示模擬器實體按鍵,不勾選沒有實體按鍵,建議勾選上;
7、Front Camera 選擇前置攝像頭設備,不用選;
8、Back Camera 選擇后置攝像頭設備,不用選;
9、Memory Options RAM 代表模擬器運行內存,VM Heap Dalvik 虛擬機堆內存大小,不建議改動;
10、Internal Storage 模擬器內置存儲大小;
11、SD Card Size 設置 SDCard 的大小;
12、Emulation Options 模擬器選項,Snapshot 如果被勾選了,模擬器被關閉時相當於是使用了休眠的形式;
下次開啟時會重新恢復到關機前狀態,不建議勾選。User Host GPU,勾選上代表使用電腦提供圖形處理;
一般如果我們的應用不涉及 3D 圖像處理不需要勾選,甚至在有些電腦上勾選后反而導致模擬器無法運行。
當我們創建好模擬器之后,如果需要修改那么可以在圖 1-7 中選中要修改的虛擬機,然后點擊 Edit...,
如果需要刪除,點擊 Delete...,如果需要啟動點擊 Start...

在上圖界面中有兩個比較重要的選項。Scale display to real size 和 Wipe user data。后者很好理解,如果
勾選上了,那么啟動時相當於恢復出廠設置。前者用的比較多,是用來縮放我們的模擬器界面的,如果不
勾選的話屏幕會顯示模擬器的真實大小,肯能會占據我們的整個屏幕,因此可以選擇勾選,然后將 Screen
Size 改為 6
點擊 Launch,就開始啟動模擬器,如果沒有硬件加速可能需要 3 到 5 分鍾的時間。

2.6、DDMS 簡介
DDMS 是 Dalvik Debug Monitor Service 的簡稱。DDMS 為 IDE 和 emulator 以及 Android 真機架起來
了一座橋梁。開發人員可以通過 DDMS 看到目標機器上運行的進程/線程狀態,可以看進程的 heap 信息,
可以查看 logcat 信息,可以查看進程分配內存情況,可以向目標機發送短信以及打電話,可以向 Android
發送地理位置信息。下面以 Eclipse 的 DDMS perspective 為例簡單介紹 DDMS 的功能

左上部分為 Devices 窗口,列出了所有已經跟 adb 成功連接的模擬器(包括真機)以及各個模擬器中
所有運行的進程。如圖 1-12 所示,最上面一排從左到右一共有 9 個可用按鈕,分別為: 調試某個進程,
更新進程堆棧信息, 下載進程堆棧數據到本地, 調用垃圾回收器, 更新線程, 開啟方法性
能分析數據收集, 停止某個進程, 抓取 Android 目前的屏幕, 查看當前界面視圖樹結構。
三、Android 程序入門
3.1、創建Helloworld
點擊 ADT 左上角的 File 按鈕,然后選擇 New,然后點擊 Android Application Project開
始 Android 工程的創建。(或者鼠標右擊,在彈出的快捷菜單中創建也可以)。



該界面展示了是否創建圖標,是否創建 activity,是否將該工程作為庫工程,是否將
該工程添加到當前工作空間,是否將該工程添加到指定工作集等信息,通常情況下不需要我們修改默認的
配置,直接 Next 就行。

該界面提供了配置圖標選項, 我們通過點擊 Browser 按鈕可以選擇我們個性化的圖標。
在學習階段不需要使用,然后點擊 Next...。

該向導界面可以讓我們選擇創建一個什么樣式的 Activity,一般使用系統默認的 Blank
Activity 即可,然后點擊 Next...。

這是最后一個向導界面了。 Activity Name 和 Layout Name 分別是讓我們設置主 Activity
和其布局的名字,通常情況下使用默認名字即可。Navigation Type 是主界面 Activity 切換類型,使用 None
即可。然后點擊 Finish 完成 Android 工程的創建。
四、Android 工程目錄結構
4.1、結構

4.2、目錄簡述
1、src java 源代碼存放目錄。
2、gen 自動生成的目錄
gen 目錄中存放所有由 Android 開發工具自動生成的文件。目錄中最重要的就是 R.java 文件。 這
個文件由 Android 開發工具自動產生的。Android 開發工具會自動根據你放入 res 目錄的資源,同步更
新修改 R.java 文件。正因為 R.java 文件是由開發工具自動生成的,所以我們應避免手工修改 R.java。
另外編繹器也會檢查 R.java 列表中的資源是否被使用到,沒有被使用到的資源不會編繹進軟件中,這
樣可以減少應用在手機占用的空間。
3、bin 用於存放 ADT 編譯時產生的臨時文件, Android 工程最終會被打包成一個 xxx.apk
4、res 資源(Resource)目錄
在這個目錄中我們可以存放各種各樣的資源,如 xml 界面文件,圖片或數據,該目錄下包含多個
子目錄。
4.1、res/drawable
存放 png、jpg 等圖標文件。在代碼中使用 getResources().getDrawable(resourceId)獲取該目錄下的
資源。
4.2、res/layout
存放 xml 界面文件,xml 界面文件和 HTML 文件一樣,主要用於顯示用戶操作界面。
4.3、res/values
存放應用使用到的各種類型數據。不同類型的數據存放在不同的文件中。比如:
4.3.1 strings.xml 定義字符串和數值
4.3.2 colors.xml 定義顏色和顏色字串數值
4.3.3 dimens.xml 定義尺寸數據
4.3.4 styles.xml 定義樣式
4.4、res/anim/
存放自定義動畫的 XML 文件。
4.5 res/xml/
在 Activity 中使用 getResources().getXML()讀取該目錄下的 XML 資源文件。
4.6 res/raw/
該目錄用於存放應用使用到的原始文件,如音效文件等。編譯軟件時,這些數據不會被編譯,它
們被直接加入到程序安裝包里。
5、libs 支持庫目錄
程序開發時需要的一些三方的 jar 包可以放在這個目錄,通常系統會自動把里面的 jar 包,添加到環境
變量,如果自動添加不了那么就需要手動添加。
6、assets 資源目錄
Android 除了提供 res 資源文件外,在 assets 目錄中可以存放資源文件,而且 assets 目錄下的資源文件
不會在 R.java 中自動生成 id。
7、AndroidManifest.xml 項目清單文件
該文件用於配置四大組件、聲明權限、配置應用版本等參數。
8、project.properties 項目環境信息,一般是不需要修改此文件。
9、proguard-project.txt 用於配置代碼混淆參數。
4.3、運行


4.4、打包過程
ADT 將 Android 工程編譯成 APK 中間經歷了一系列過程,
Android 打包過程

ADT 將 Java 源文件編譯成.class,然后調用 dx 工具將所有的.class 抽取到一個叫 classes.dex 的文件中。
然后調用 aapt 工具將 Android 中所有的資源,包括 res 和 assets 資源以及清單文件一起打包成 apk 文件,
然后在部署的時候給 apk 進行簽名操作,最后通過 ADB 工具將簽名后的 APK 部署到模擬器上。
上面的過程完全是 ADT 自動幫我們完成的。簽名是用於區分同一包名的時候應用身份的,也就是如
果應用的包名相同簽名不一樣是不可以安裝到同一個手機上的,如果包名相同簽名也相同則可以覆蓋安
裝。
五、ADB 簡介
5.1、ADB 介紹
adb 是 Android Debug Bridge 的簡稱,通過 adb 可以在 Eclipse 中通過 DDMS 來調試 Android 程序, adb
啟動時會占用 5554 端口,因此要避免其他應用跟該端口沖突。默認情況下所以當我們運行 Eclipse 時 adb
進程就會自動運行。
adb 還可以通過命令行使用,前提是將 adb.exe 所在路徑已經配置到了系統環境變量。adb.exe 位於sdk/platform-tools 目錄下。環境變量的配置跟 JDK 相似,
5.2、ADB 常用命令
1、adb devices 列出當前連接上所有設備

2、adb install xxx.apk 將 xxx.apk 安裝到模擬器上

多個設備連接時,選擇設備安裝

3、adb uninstall 包名 卸載應用

多個設備連接卸載

4、adb push <本地路徑><遠程路徑> 將本地文件上傳到模擬器上

5、adb pull <遠程路徑><本地路徑> 將模擬器上文件下載到本地

6、adb kill-server 殺死 adb 進程

7、adb start-server 啟動 adb 進程

8、adb shell 進入 Linux shell 命令行

