目 錄
第1章 從零開始認識Android 1
1.1 智能手機和系統... 1
1.1.1 智能手機的特點... 1
1.1.2 常用的手機系統... 2
1.2 Android簡介... 3
1.2.1 Android的誕生... 3
1.2.2 Android的發展... 3
1.2.3 Android的特點和優勢... 4
1.3 Android的系統架構... 6
1.3.1 系統架構概述... 6
1.3.2 應用程序... 6
1.3.3 應用程序框架... 7
1.3.4 核心庫... 7
1.3.5 Android運行時... 8
1.3.6 Linux內核... 9
1.4 Android的四大組件... 9
1.4.1 Activity組件... 9
1.4.2 Service組件... 10
1.4.3 BroadcastReceiver組件... 10
1.4.4 ContentProvider組件... 10
1.5 Android 4.4. 11
1.5.1 Android4.4的新增功能... 11
1.5.2 Android4.4的改進功能... 12
1.5.3 Android4.4的發展方向... 12
1.6 思考與練習... 13
第2章 Android開發環境與開發
工具. 15
2.1 配置Android開發環境... 15
2.1.1 安裝JDK工具包... 15
2.1.2 配置環境變量... 16
2.1.3 安裝ADT插件... 18
2.1.4 實驗指導——手動安裝ADT
插件和漢化Eclipse工具... 20
2.2 安裝AndroidSDK工具包... 21
2.3 使用Android模擬器... 23
2.3.1 創建模擬器... 23
2.3.2 啟動模擬器... 25
2.3.3 控制模擬器... 26
2.3.4 使用模擬器控制臺... 27
2.4 Android工具... 28
2.4.1 查看Android版本的ID
信息... 28
2.4.2 創建AVD設備... 29
2.4.3 刪除AVD設備... 30
2.5 Emulator工具... 31
2.6 實驗指導——管理SD卡... 34
2.7 Keytool工具和Jarsigner工具... 35
2.8 實驗指導——使用ADT簽名程序... 36
2.9 ADB工具... 37
2.9.1 查看ADB版本... 37
2.9.2 查看設備信息... 38
2.9.3 管理軟件... 38
2.9.4 移動文件... 40
2.9.5 執行Shell命令... 41
2.9.6 查看Bug報告... 42
2.9.7 轉發端口... 43
2.9.8 啟動和關閉ADB服務... 43
2.10 AAPT工具... 43
2.11 DDMS工具... 44
2.12 思考與練習... 46
第3章 Android應用程序剖析. 47
3.1 創建Android應用程序... 47
3.2 程序目錄解析... 49
3.2.1 appcompat_v7包... 49
3.2.2 src目錄... 50
3.2.3 gen目錄... 52
3.2.4 res目錄... 53
3.2.5 其他目錄... 56
3.2.6 AndroidManifest.xml文件... 56
3.2.7 project.properties文件... 58
3.3 應用程序權限說明... 58
3.3.1 系統的常用權限... 59
3.3.2 聲明和調用權限... 60
3.4 設計圖形界面... 62
3.4.1 打開界面文件... 62
3.4.2 設計圖形界面... 63
3.4 運行應用程序... 65
3.5 調試應用程序... 66
3.5.1 設置斷點... 66
3.5.2 調試程序... 67
3.5.3 輸出日志信息... 68
3.6 實驗指導——倒計時計數功能的
實現... 69
3.7 思考與練習... 71
第4章 用戶界面設計. 73
4.1 界面編程與視圖組件... 73
4.1.1 視圖組件與容器組件... 73
4.1.2 使用XML布局界面... 76
4.1.3 使用代碼布局界面... 79
4.1.4 使用混合方式... 80
4.1.5 開發自定義視圖... 82
4.2 Android界面布局類... 83
4.3 線性布局... 84
4.4 表格布局... 87
4.5 幀布局... 89
4.6 相對布局... 91
4.7 絕對布局... 94
4.8 網格布局... 96
4.9 思考與練習... 102
第5章 Android基礎組件詳解. 104
5.1 文本類組件... 104
5.1.1 文本框... 104
5.1.2 編輯框... 107
5.2 按鈕類組件... 108
5.2.1 普通按鈕... 108
5.2.2 圖片按鈕... 110
5.2.3 單選按鈕... 111
5.2.4 復選框... 114
5.3 圖像視圖... 116
5.4 列表類組件... 119
5.4.1 列表框... 119
5.4.2 列表視圖... 122
5.4.3 列表視圖高級應用... 125
5.5 日期與時間組件... 126
5.5.1 日期選擇器... 127
5.5.2 時間選擇器... 127
5.5.3 計時器... 128
5.6 實驗指導——時間和日期處理... 129
5.7 思考與練習... 131
第6章 應用程序與Activity 133
6.1 Activity簡介... 133
6.1.1 Activity概述... 133
6.1.2 Activity的生命周期... 135
6.1.3 Activity的屬性... 136
6.2 Activity的創建和啟動... 137
6.2.1 創建Activity. 137
6.2.2 配置Activity. 139
6.2.3 啟動和關閉Activity. 140
6.3 多個Activity的使用... 140
6.3.1 Activity的切換... 141
6.3.2 Activity數據傳遞... 142
6.4 使用Fragment 144
6.4.1 Fragment簡介... 144
6.4.2 創建Fragment 144
6.4.3 在Activity中添加
Fragment 146
6.4.4 操作Fragment 147
6.5 實驗指導——單選題應用程序... 149
6.6 思考與練習... 151
第7章 Intent和BroadcastReceiver
的應用. 152
7.1 Intent對象簡介... 152
7.2 Intent對象組成元素... 153
7.2.1 組件名稱... 153
7.2.2 動作... 155
7.2.3 種類... 160
7.2.4 數據... 162
7.2.5 額外... 164
7.2.6 標記... 164
7.3 實驗指導——添加聯系人... 165
7.4 Intent過濾器... 168
7.5 BroadcastReceiver組件... 171
7.5.1 BroadcastReceiver簡介... 171
7.5.2 發送廣播... 173
7.5.3 有序廣播... 175
7.5.4 接收系統廣播... 178
7.6 實驗指導——攔截系統短信提示... 180
7.7 思考與練習... 181
第8章 Android高級界面設計. 183
8.1 窗口小部件... 183
8.1.1 進度條... 183
8.1.2 拖動條... 185
8.1.3 星級評分條... 187
8.2 圖像類控件... 188
8.2.1 圖像切換器... 188
8.2.2 畫廊視圖... 190
8.2.3 滾動視圖... 190
8.2.4 網格視圖... 191
8.3 其他控件... 194
8.3.1 自動完成編輯框... 194
8.3.2 選項卡... 196
8.3.3 多頁視圖... 198
8.4 實驗指導——拖動條切換圖像... 200
8.5 思考與練習... 202
第9章 訪問系統資源. 204
9.1 系統資源概述... 204
9.1.1 資源類型... 204
9.1.2 使用資源... 206
9.2 字符串資源... 207
9.2.1 定義字符串資源... 207
9.2.2 使用字符串資源... 209
9.3 數組資源... 211
9.3.1 定義數組資源... 211
9.3.2 使用數組資源... 212
9.4 顏色資源... 213
9.4.1 定義顏色資源... 213
9.4.2 使用顏色資源... 214
9.5 尺寸資源... 215
9.5.1 定義尺寸資源... 215
9.5.2 使用尺寸資源... 216
9.6 類型和主題資源... 217
9.6.1 類型資源... 217
9.6.2 主題資源... 218
9.7 Drawable資源... 220
9.7.1 了解Drawable資源... 220
9.7.2 定義和使用Drawable資源... 221
9.8 菜單資源... 223
9.8.1 定義菜單資源... 224
9.8.2 使用菜單資源... 225
9.9 原始XML資源... 228
9.10 實驗指導——選擇上下文菜單項
并更改字體顏色... 229
9.11 思考與練習... 231
第10章 Android多媒體應用. 233
10.1 基本繪圖... 233
10.1.1 繪圖類... 233
10.1.2 繪制幾何圖形... 236
10.1.3 繪制路徑... 240
10.1.4 繪制文本... 241
10.2 圖像操作... 242
10.2.1 繪制圖像... 243
10.2.2 旋轉圖像... 243
10.2.3 縮放圖像... 244
10.2.4 平移圖像... 245
10.2.5 傾斜圖像... 245
10.3 實驗指導——通過定時器扭曲
圖像... 246
10.4 動畫特效... 249
10.4.1 逐幀動畫... 249
10.4.2 補間動畫... 251
10.5 視頻和音頻... 254
10.5.1 使用MediaPlayer播放
音頻... 254
10.5.2 使用VideoView播放視頻... 258
10.5.3 使用SurfaceView播放
視頻... 260
10.6 思考與練習... 262
第11章 Android事件處理機制. 264
11.1 Android事件處理概述... 264
11.2 基于監聽的事件... 265
11.2.1 監聽的處理流程... 265
11.2.2 事件監聽器... 268
11.2.3 內部類和外部類作為事件
監聽器類... 270
11.2.4 匿名內部類作為事件
監聽器類... 272
11.2.5 Activity作為事件監聽
器類... 273
11.2.6 綁定到組件事件屬性... 273
11.3 基于回調的事件... 274
11.3.1 回調機制與監聽機制... 274
11.3.2 基于回調的事件傳播流程... 276
11.3.3 基于回調的觸摸事件處理... 278
11.4 Handler消息傳遞機制... 280
11.4.1 Handler類簡介... 280
11.4.2 Handler的工作原理... 282
11.5 手勢的創建與識別... 285
11.5.1 手勢的創建... 286
11.5.2 手勢的導出... 287
11.5.3 手勢的識別... 287
11.6 思考與練習... 289
第12章 Android數據存儲. 291
12.1 SharedPreferences對象數據的
存儲... 291
12.1.1 了解SharedPreferences. 291
12.1.2 使用SharedPreferences. 292
12.1.3 數據存儲位置和格式... 295
12.2 File數據存儲... 296
12.2.1 寫入數據... 296
12.2.2 讀取數據... 299
12.2.3 保存數據到SDCard. 300
12.3 SQLite數據庫... 302
12.3.1 了解SQLite. 302
12.3.2 使用SQLite. 304
12.4 內容提供者ContentProvider 310
12.4.1 了解ContentProvider 310
12.4.2 自定義ContentProvider 312
12.5 實驗指導——預定義
ContentProvider讀取聯系人... 319
12.6 思考與練習... 322
第13章 調用Android系統服務. 324
13.1 了解Service. 324
13.1.1 Service的分類... 324
13.1.2 Service的生命周期... 325
13.1.3 Service的常用方法... 326
13.1.4 聲明Service. 326
13.2 實驗指導——啟動和停止
Started Service. 327
13.3 系統服務... 331
13.3.1 獲取系統服務... 331
13.3.2 使用WindowManager 332
13.3.3 使用AlarmManager 333
13.4 實驗指導——TelephonyManager
實現電話管理器... 337
13.5 思考與練習... 339
第14章 Android網絡編程. 341
14.1 網絡編程基礎... 341
14.2 HTTP通信... 342
14.2.1 使用HttpURLConnection. 342
14.2.2 使用HttpClient 345
14.3 Socket網絡編程... 345
14.4 Web網絡編程... 348
14.4.1 使用WebView瀏覽網頁... 348
14.4.2 WebView與JavaScript 351
14.5 實驗指導——登記系統... 352
14.6 思考與練習... 353
第15章 貪吃蛇游戲. 355
15.1 功能簡介... 355
15.2 項目結構... 355
15.3 實現思路分析... 356
15.3.1 游戲界面模塊實現... 356
15.3.2 游戲控制模塊實現... 357
15.3.3 TileView類的設計... 358
15.3.4 SnakeView類的設計... 358
15.4 詳細設計... 358
15.4.1 Snake類的詳細設計... 358
15.4.2 TileView類的詳細設計... 360
15.4.3 SnakeView類的詳細設計... 361
15.4.4 界面設計... 366
參考答案. 370
參考文獻. 374
第2章 Android開發環境與開發工具
本章主要介紹如何搭建Android的開發環境,Android模擬器的使用以及Android SDK中常用的開發工具。
雖然在使用集成開發環境時,不需要這些工具,但是掌握這些工具的使用方法會對以后的開發起到良好的輔助作用,有助于開發技能的提高。
學習要點
- 掌握JDK的安裝和配置。
- 掌握ADT的安裝。
- 掌握Android SDK的更新方法。
- 熟悉Android模擬器的使用。
- 熟悉Android、MKsdcard和Emulator工具的使用。
- 了解對Android應用程序進行簽名的過程。
- 掌握ADB工具的使用。
- 熟悉DDMS控制臺環境。
2.1 配置Android開發環境
第1章曾介紹過Android用Java作為開發語言,因此Java開發環境也是Android開發環境的基礎。下面以Windows平臺為例介紹Android開發環境的配置過程,依次包括JDK工具包、Eclipse工具、ADT插件和Android SDK工具包。
2.1.1 安裝JDK工具包
Eclipse和Android的運行都要依賴于JDK,因此JDK(JavaDevelopment Kits)是第一個需要安裝的開發工具包。
【范例1】
JDK的下載網址為http://www.oracle.com/technetwork/java/index.html。下面以Windows XP系為例進行介紹,其具體安裝過程如下。
(1) 使用上面的網址進入Oracle官方網站的Java欄目,單擊Java Platform(JDK)圖標打開新的網頁。單擊AcceptLicense Agreement單選按鈕同意協議,然后單擊相應的超鏈接將文件下載到本地,這里下載的文件是jdk-7u10-windows-i586.exe。
(2) 雙擊jdk-7u10-windows-i586.exe文件,開始安裝JDK 7。首先進入安裝對話框,如圖2-1所示。
(3) 單擊“下一步”按鈕進入自定義安裝對話框,如圖2-2所示。這里會顯示開發工具、源代碼和公共JRE三個選項,默認全部被選中。
(4) JDK的默認安裝路徑是C:\Program File\Java,單擊“更改”按鈕可以更改安裝路徑,更改完成后單擊“下一步”按鈕可以繼續JDK的安裝。直到出現如圖2-3所示的對話框,則說明安裝成功,單擊“關閉”按鈕完成安裝。
圖2-1 JDK安裝向導對話框 圖2-2 JDK自定義安裝對話框
(5) 安裝完成后會在C:\Program File\Java\目錄下會產生一個名為jdk1.7.0_10的文件夾,文件夾中的內容如圖2-4所示。
圖2-3 JDK安裝完成對話框 圖2-4 JDK安裝目錄
從圖2-4中可以看出,JDK的目錄下包含很多文件夾和文件,其中重要的目錄如下。
l bin目錄:提供JDK工具程序,包括javac、javadoc、appletviewer等可執行程序。
l demo目錄:為Java使用者提供的一些編寫好的范例程序。
l include目錄:存放用于本地方法的文件。
l jre目錄:存放Java運行環境文件。
l lib目錄:存放Java的類庫文件。
l src.zip:Java提供的API類的源代碼壓縮文件,包含API中某些功能的具體實現。
2.1.2 配置環境變量
在Java 7以前的舊版本中,需要配置Classpath和Path兩個環境變量。其中Path用于指定JDK工具程序所在的位置;Classpath是Java程序運行所需的環境變量,用于指定運行的Java程序所需的類的加載路徑。而在JDK7中只需要Path環境變量即可。配置JDKT中的Path的方法有兩種,分別如下。
【范例2】
第一種方法是用命令行設置Path變量。具體方法是打開命令行窗口,輸入如下命令。
set path=%path%;C:\Program Files\Java\jdk1.7.0_10\bin
在上述代碼中,C:\Program Files\Java\jdk1.7.0_10\bin是JDK的安裝目錄,讀者可以根據自己的安裝情況另行設置。設置好Path之后,可在任何目錄下執行Java命令,如圖2-5所示。
圖2-5 使用命令行設置Path
【范例3】
第二種方法是使用圖形界面設置Path變量。首先右擊“我的電腦”選擇“屬性”命令,在彈出的對話框中選擇“高級”選項卡,如圖2-6所示。接著單擊下方的“環境變量”按鈕,彈出“環境變量”對話框,如圖2-7所示。
圖2-6 “系統屬性”對話框 圖2-7 “環境變量”對話框
單擊“系統變量”下方的“新建”按鈕,彈出“編輯系統變量”對話框,在“變量值”文本框中輸入“.;C:\Program Files\Java\jdk1.7.0_10\bin”即可,如圖2-8所示。
圖2-8 編輯系統變量
2.1.3 安裝ADT插件
Eclipse是最受歡迎的Java開發工具,同時也是一個開源平臺。Eclipse的插件很多,通過它們可以擴展Eclipse的功能。例如其擴展功能可用于JavaEE語言、C語言和C 語言開發,Android開發等。本節要介紹的ADT(Android DevelopmentTools)其實就是Eclipse中的“Android開發插件”。
目前ADT插件有兩種安裝方法。第一種是先在http://www.eclipse.org網站下載最新版本的Eclipse工具,下載完成后直接解壓即可使用,然后打開Eclipse工具,通過遠程來安裝ADT插件,當然也可以在本地安裝。
第二種是采用Google為開發人員準備的集成ADT插件的Eclipse安裝包。安裝包下載后直接解壓即可使用,無須再安裝和配置ADT插件。下面介紹這種方式的安裝過程。
【范例4】
在瀏覽器地址欄中輸入“http://developer.android.com/sdk/index.html”,按Enter鍵,在打開的頁面中單擊VIEW ALL DOWNLOADS AND SIZES鏈接,展開下載列表,如圖2-9所示。
圖2-9 下載頁面
在下載頁面同時顯示了該安裝包中包含的組件,例如Eclipse工具、ADT插件、Android SDK工具和Android Platform工具等等。
技巧: 如果無法正常訪問上面的網址,建議讀者設置代理服務器后再試試。
從下載列表中選擇相應平臺的安裝包,這里選擇的是Windows 32bit平臺。單擊其后的超鏈接打開下載安裝協議頁面,選中底部的復選框。最后單擊底部的Download adt bundle widnows x86-20140702.zip按鈕,開始下載,如圖2-10所示。
圖2-10 開始下載
在彈出的下載對話框中單擊“保存”按鈕下載到本地硬盤。解壓下載的文件會看到一個eclipse目錄、一個sdk目錄和一個SDKManager程序,如圖2-11所示。
圖2-11 解壓后的目錄內容
進入Eclipse目錄,雙擊eclipse.exe即可啟動Android應用程序開發工具——ADT。啟動后可將該圖標的快捷方式發送至桌面方便以后使用。啟用之后在菜單中選擇Help|About ADT命令可以查看當前ADT的版本和說明信息,如圖2-12所示。
圖2-12 About Eclipse窗口
提示: 為了在命令行窗口調用Android SDK提供的各種工具,建議將Android SDK下的tools目錄和platform-tools目錄添加到系統的Path環境變量中。
2.1.4 實驗指導——手動安裝ADT插件和漢化Eclipse工具
本次實驗指導介紹手動安裝ADT插件和漢化Eclipse工具的方法。具體步驟如下。
(1) 從http://www.eclipse.org下載最新版的Eclipse程序。
(2) 解壓下載的壓縮包,雙擊其中的eclipse.exe文件運行Eclipse程序
(3) 在Eclipse中選擇Help|Install New Software命令,打開安裝新插件窗口。
(4) 在窗口中輸入“https://dl-ssl.google.com/android/eclipse”,然后從插件列表中展開Developer Tools,選中Android Development Tools復選框來安裝ADT插件,如圖2-13所示。
(5) 單擊Next按鈕,開始安裝ADT插件。安裝完成之后單擊Finish按鈕關閉窗口。
圖2-13 安裝ADT插件窗口
(6) Eclipse漢化插件的安裝方法也是打開Install窗口,然后輸入“http://download.
eclipse.org/technology/babel/update-site/R0.12.0/juno”。
(7) 從插件列表中展開BabelLanguage Packs for eclipse節點,并選中包含Chinese(Simplified)字符的復選框,如圖2-14所示。
(8) 單擊Next按鈕,開始安裝漢化插件。安裝完成之后單擊Finish按鈕關閉窗口。如圖2-15所示為漢化后的Eclipse程序主窗口。
圖2-14 安裝漢化插件窗口
圖2-15 漢化后的Eclipse窗口
2.2 安裝AndroidSDK工具包
Android SDK(SoftwareDevelopment Kit,軟件開發包)包含開發、測試和調試Android應用程序需要的所有東西。其中主要部分如下。
1. Android API
SDK的核心是Android API庫,它為開發人員提供了對Android棧進行訪問的方法。Google也是使用相同的庫來開發原生的Android應用程序。
2. 開發工具
為了讓Android源代碼變成可執行的Android應用程序,SDK提供了多個開發工具供用戶編譯和調試應用程序時使用。本章后面將詳細講述這些開發工具,在此暫不敘述。
3. Android虛擬設備管理器和模擬器
Android模擬器是一個完全交互式的移動設備模擬器,并有多個皮膚可供選擇。模擬器運行在模擬設備硬件配置的Android虛擬設備中。通過使用模擬器,可以了解應用程序在實際的Android設備上的外觀和運行情況。所有Android應用程序都運行在Dalvik VM中,所以軟件模擬器是一個非常好的開發環境。
4. 完整的文檔
SDK中包含大量代碼級的參考信息,詳細地說明了每個包和類中都包含哪些內容,以及如何使用它們。除了代碼文檔之外,Android的參考文檔和開發指南還解釋了如何著手進行開發,尤其詳細地解釋了Android開發背后的基本原理。此外還強調了最佳開發實踐,并深入闡述了關于框架的主題。
5. 示例代碼
Android SDK包含一些示例代碼集,它們解釋了使用Android的某些可能性,以及一些用來強調如何使用每個API功能的簡單程序。
【范例5】
安裝Android SDK的方法是在如圖2-11所示的目錄中,運行SDK Manager程序。程序將自動檢測當前安裝的版本情況,以及是否有更新的SDK版本可供下載。完成檢測后進入SDK管理器窗口,如圖2-16所示。
圖2-16 SDK管理器窗口
提示: 在ADT中也可以選擇Window|Android SDK Manager命令打開SDK管理器。
圖2-16中羅列了所有Android的SDK版本、Android開發的工具以及擴展包。選中相應版本前面的復選框,或展開節點選擇具體的某一項,單擊窗口右下角的Install按鈕,打開Choose Packages to Install窗口,如圖2-17所示。
圖2-17 Choose Packages toInstall窗口
在這里可以閱讀每個要安裝軟件包的許可協議,選中Accept License單選按鈕,即可批量同意所有協議。然后單擊Install按鈕,開始安裝指定的SDK版本,本書中使用的是Android4.4.2 SDK,即API 19。所有安裝包更新完畢之后,單擊Done按鈕關閉窗口。
在安裝的過程中需要從Google服務器上下載AndroidSDK文件,若限于帶寬和節點問題無法更新,可打開C:\windows\System32\drivers\etc\hosts文件,在文件最后添加以下內容:
203.208.46.146 www.google.com
203.208.46.146 dl.google.com
203.208.46.146 dl-ssl.google.com
2.3 使用Android模擬器
經過上面的步驟,Android開發所需的Java環境、開發工具和SDK都已準備就緒。接下來將介紹如何在本地通過虛擬器AndroidVirtual Device(AVD)模擬Android系統。有了Android模擬器,開發人員不必使用真實物理設備就可以開發、測試Android應用程序。
2.3.1 創建模擬器
除了不能撥打真實電話之外,Android模擬器可以模擬真實設備的所有硬件和軟件特性。模擬器提供了多種導航和控制鍵,開發人員通過單擊鼠標或者鍵盤可以為應用程序生成事件。它還提供了一個屏幕來顯示開發的應用程序以及其他正在運行的Android應用。
為了簡化模擬和測試應用程序,模擬器使用Android虛擬設備(AVD)配置。AVD允許用戶設置模擬手機的特定硬件屬性(例如RAM的大小),并且允許用戶創建多個配置,以便在不同的Android平臺和硬件組合下進行測試。一旦應用程序在模擬器上運行,它可以使用Android平臺的服務來啟動其他應用、訪問網絡、播放聲音和視頻、存儲和檢索數據、通知用戶以及渲染圖形漸變和主題。
Android虛擬設備是模擬器的一種配置。開發人員通過定義需要的硬件和軟件選項,可使用Android模擬器模擬真實的設備。
一個Android虛擬設備由以下幾部分組成。
l 硬件配置:定義虛擬設備的硬件特性。例如,開發人員可以定義該設備是否包含攝像頭、是否使用物理鍵盤和撥號鍵盤、內存大小等。
l 映射的系統鏡像:開發人員可以定義虛擬設備運行的Android平臺版本。
l 其他選項:開發人員可以通過指定需要使用的模擬器皮膚,來控制屏幕尺寸、外觀等。此外,還可以指定Android虛擬設備使用的SD卡。
l 專用存儲區域:用于存儲當前設備的用戶數據(安裝的應用程序、設置等)和模擬SD卡。
【范例6】
創建一個模擬器的步驟如下。
(1) 從ADT啟動Eclipse,執行Window|AndroidVirtual Device Manager命令打開模擬器管理窗口。
(2) 在圖2-18所示的Android Virtual Devices選項卡下顯示了可用的所有模擬器。當前界面為空是因為還沒有創建模擬器。
(3) 單擊Create按鈕,在彈出的對話框中設置模擬器的名稱、設備類型、模擬器采用的SDK版本、鍵盤類型、設備皮膚、是否使用攝像頭、內存大小及SD卡的大小等,如圖2-19所示。
圖2-18 模擬器管理窗口 圖2-19 新建模擬器對話框
(4) 設置完成后單擊OK按鈕,關閉該對話框。此時新建的模擬器名稱將出現在圖2-18所示的窗口列表中。
切換到圖2-18所示的DeviceDefinitions選項卡,可以看到默認提供的Android設備類型,如圖2-20所示。單擊Create Device按鈕,可在圖2-21所示的對話框中新建一個Android設備。
圖2-20 可用Android設備列表 圖2-21 新建Android設備對話框
2.3.2 啟動模擬器
要啟動Android模擬器,最簡單的方式是使用AVD管理工具,也可以使用Emulator工具(本章第2.5節有介紹)。本節將使用AVD管理工具,啟動在上一節中創建的名為avd4.4的模擬器,具體操作方法如下。
【范例7】
啟動模擬器的操作如下。
(1) 打開AVD管理器,從列表中選擇名稱為avd4.4的模擬器,然后單擊Start按鈕,打開啟動選項對話框,如圖2-22所示。
(2) 單擊Launch按鈕確認運行,之后會彈出如圖2-23所示的模擬器加載進度對話框。
圖2-22 啟動模擬器對話框 圖2-23 加載模擬器對話框
(3) 待模擬器加載完成之后會彈出一個顯示有模擬器名稱的窗口。稍待片刻,如果看到如圖2-24所示的歡迎界面,則說明Android系統啟動成功。
圖2-24 模擬器歡迎界面
(4) 根據屏幕提示進行解鎖,即可進入Android模擬器的操作界面,其右側為一些物理按鍵。
提示: 如果需要停止模擬器,只需將模擬器窗口關閉即可。
2.3.3 控制模擬器
當模擬器運行時,用戶可以像使用真實的移動設備那樣使用模擬移動設備。所不同的是,模擬器的使用需要用鼠標來“觸摸”觸摸屏,用鍵盤來“按下”按鍵。
模擬器按鍵與鍵盤按鍵的對應關系如表2-1所示。
表2-1 模擬器按鍵與鍵盤按鍵映射
模擬器按鍵 | 鍵盤按鍵 |
Home | Home鍵 |
Menu | Page Up鍵或F2鍵 |
Start | Page Down鍵或Shift F2鍵 |
Back | Esc鍵 |
電話撥號 | F3鍵 |
電話掛斷 | F4鍵 |
查詢 | F5鍵 |
鎖屏幕 | F7鍵 |
續表
模擬器按鍵 | 鍵盤按鍵 |
音量放大 | 鍵(臺式機數字鍵盤)或Ctrl F5鍵(筆記本) |
音量縮小 | -鍵(臺式機數字鍵盤)或Ctrl F6鍵(筆記本) |
全屏幕切換 | Alt Enter鍵 |
軌道球模式 | F6鍵 |
橫豎屏切換 | 7鍵(臺式機數字鍵盤)或Ctrl F11鍵(筆記本) 9鍵(臺式機數字鍵盤)或Ctrl F12鍵(筆記本) |
在運行游戲時,可將Android模擬器切換到橫屏模式,其顯示效果如圖2-25所示。
圖2-25 橫屏顯示的模擬器
2.3.4 使用模擬器控制臺
每個運行中的模擬器實例都含有一個控制臺,通過控制臺可以查詢和控制模擬器設備的運行環境。連接到模擬器實例控制臺的命令如下:
telnet localhost <port>
例如,第一個模擬器實例的控制臺如果使用的端口是5554,那么用戶連接到模擬器5554上的命令就要寫為
telnet localhost 5554
連接上控制臺后,用戶可以輸入“help [command]”來查看命令列表和某一命令的幫助文檔。離開控制臺時使用quit和exit命令即可。
下面介紹一些常用的控制臺命令。
1.端口重定向命令
使用以下命令可以在模擬器運行期間重看、添加或刪除重定向。
(1) redir<list>
說明:redir list列出了當前的重定向,其最小值為150,最大值為550。
(2) rediradd <protocol> : <host-port> : <guest-port>
說明:此命令用于添加新的端口重定向。 <protocol>必須是TCP或UDP,<host-port>是主機上打開的端口號,<guest-port>是向模擬器/設備發送數據的端口號。
(3) redirdel<protocol> : <host-port>
說明:此命令用于刪除端口重定向,<protocol>和<host-port>的含義同上。
2.網絡狀況查詢命令
使用以下命令可以檢測模擬器運行的網絡狀態。
network status
執行后的輸出結果類似如下:
Current network status:
download speed: 0 bits/s (0.0 KB/s)
upload speed: 0 bits/s (0.0 KB/s)
minimum latency: 0 ms
maximum latency: 0 ms
3.電話功能模擬命令
與電話相關的是gsm命令,該命令有以下3種格式。
(1) gsmcall <phonenumber>
說明:該命令用于模擬來自電話號碼為<phonenumber>的呼叫。
(2) gsmvoice <state>
說明:該命令用于修改GPRS語音連接的狀態為<state>。State的可選值有:unregistered為無可用網絡;home為處于本地網,無漫游;roaming為處于漫游網;searching為查找網絡;denied為僅能用緊急呼叫;off同unregistered;on同home。
(3) gsmdata <state>
說明:該命令用于修改GPRS數據連接的狀態為<state>,可選值與Voice相同,此處不再介紹。
2.4 Android工具
在Android SDK中提供了一個名為Android的工具,該工具可用來查看Android的版本信息,以及創建、刪除和查看AVD設備。
2.4.1 查看Android版本的ID信息
為了對Android程序進行全面的測試,在開發時用戶通常會安裝多個Android版本。每個Android版本都有一個唯一的ID標識。
【范例8】
要查看所有Android版本的ID信息,可使用如下命令:
android list targets
執行后將看到每個Android版本的ID信息、API版本、名稱、類型和適用屏幕等,如圖2-26所示。
圖2-26 查看Android版本的ID信息
2.4.2 創建AVD設備
AVD表示一種Android設備的配置信息,例如一個AVD可以表示一個運行2.0版本SDK,且使用512MB作為SD卡的Android設備。AVD的使用理念是,首先創建將要支持的AVD,然后在開發和測試應用程序時,將模擬器指向其中一個AVD。
默認情況下,所有的AVD都存儲在HOME\.android\AVD目錄中。要創建一個AVD設備可以使用android命令的create avd選項,其語法格式如下:
android create avd <option>
其中,option參數有如下幾個選項。
l -t:新AVD設備的ID,可通過android list targets查看,必選項。
l -c:指向一個共享SD卡的路徑或者指定一個新的SD卡。
l -p:指定AVD設備的存儲路徑。
l -n:指定AVD設備的名稱,必選項。
l -f:此選項表示覆蓋已存在的同名AVD。
l -s:指定AVD設備使用的皮膚。
【范例9】
創建一個名為testAvd的AVD設備,要求SD卡容量為1024MB,并將其保存在G:\AVD目錄下。其實現語句如下:
android create avd -n testAvd -t 1 -c 1024M -p G:\AVD\
語句中-t后面的1表示使用的是列表中編號為1的Android版本。執行該語句后會看到輸出的信息,如圖2-27所示。
圖2-27 創建AVD設備
2.4.3 刪除AVD設備
刪除AVD設備的語法如下:
android delete avd -n <avd_name>
其中avd_name表示要刪除的AVD設備的名稱。
【范例10】
在刪除之前可以先運行如下命令,查看當前所有的AVD設備信息,包含名稱、存儲路徑、SD卡容量以及使用的皮膚等。
android list avds
如圖2-28所示為運行結果,從中可以看出當前所包含的AVD設備有avd 4.4、myAvd、testAvd。
圖2-28 查看所有AVD設備
【范例11】
假設要刪除名為testAvd的AVD設備,可用以下語句:
android delete avd -n testAvd
執行該語句后再次使用android list avds命令,即可看到testAvd沒有出現在列表中,如圖2-29所示。
圖2-29 刪除AVD設備
2.5 Emulator工具
Emulator是一款命令行的模擬器管理工具,它可以控制模擬器實例的所有參數,例如是否允許使用視/音頻、接收數據、使用調試和屏幕信息等。
Emulator的語法格式如下:
emulator [option] [-qemu args]
其中,option表示選項,args是選項的具體參數。
Emulator為Android模擬器工具提供了很多啟動選項,可以在啟動模擬器時指定,控制其外觀和行為。下面從六個方面介紹Emulator工具的命令格式。
1.數據命令選項
數據命令選項主要有四個,下面分別介紹。
(1) emulator-data <file>
說明:使用<file>當作用戶數據的磁盤鏡像,如果沒有-data,模擬器會在~/.android
(Linux/Mac)或c:\Documentsand Settings\<user>\Local Settings\Android(Windows)中查找文件名為userdata.img的文件。如果使用了-data<file>但<file>不存在,模擬器會創建一個文件。
(2) emulator-ramdisk <file>
說明:使用<file>作為RAM鏡像,默認值為<system>/ramdisk.img。
(3) emulator-sdcard<file>
說明:使用<file>作為SD卡鏡像,默認值為<system>/sdcard.img。
(4) emulator-wipe-data
說明:啟動前清除用戶磁盤鏡像中的所有數據。
2.調試命令選項
調試命令選項主要有五個,下面分別介紹。
(1) emulator-console
說明:允許當前中斷使用控制臺。
(2) emulator-debug-kernel
說明:將內核輸出發送到控制臺。
(3) emulator-logcat <logtags>
說明:允許根據給定的標簽為輸出分類。如果定義了環境變量ANDROID_LOG_TAGS,并且不為空,那么它的值將被作為logcat的默認值。
(4) emulator-trace <name>
說明:允許代碼剖析(按F9鍵開始)。
(5) emulator-verbose
說明:允許詳細信息輸出。
3.媒體命令選項
媒體命令選項主要有四個,下面分別介紹。
(1) emulator-mic <device or file>
說明:使用設備或者WAV文件作為音頻輸出。
(2) emulator-noaudio
說明:禁用Android的音頻支持,默認禁用。
(3) emulator-radio <device>
說明:將無線調制解調器接口重定向到主機特征設備。
(4) emulator-useaudio
說明:啟用Android音頻支持,默認不啟用。
4.網絡命令選項
網絡命令選項主要有兩個,分別是-netdelay和-netspeed。
(1) emulator-netdelay <delay>
說明:設置網絡延遲模擬的延遲時間為<delay>,默認值是none。具體參數說明如下。
l gprs:min 150, max550。
l edge:min 80, max400。
l umts:min35, max200。
l none:無延遲。
l <num>:模擬一個準確的延遲(毫秒)。
l <min>:<max>:模擬一個指定的延遲范圍(毫秒)。
(2) emulator-netspeed <speed>
說明:設置網速模擬的加速值為<speed>,默認值為full。具體參數說明如下。
l gsm:up : 14.4,down 14.4。
l hscsd:up : 14.4,down : 43.2。
l gprs:up : 40.0,down : 80.0。
l edge:up :118.4,down : 236.8。
l umts:up : 128.0,down : 1920.0。
l hsdpa:up : 348.0,down : 14400.0。
l full:無限。
l <num>:設置一個上行和下行公用的準確速度。
l <up> : <down>:分別為上行和下行設置準確的速度。
5.系統命令選項
系統命令選項主要有五個,下面分別介紹。
(1) emulator-image <file>
說明:使用<file>作為系統鏡像。
(2) emulator-kernel <file>
說明:使用<file>作為模擬器內核。
(3) emulator-qemu
說明:傳遞qemu參數。
(4) emulator-qemu -h
說明:顯示qemu幫助信息。
(5) emulator-system <dir>
說明:在<dir>目錄下查找系統、RAM和用戶數據鏡像。
6.界面命令選項
界面命令選項主要有六個,下面分別介紹。
(1) emulator-flashkeys
說明:在設備皮膚上閃爍按下的鍵。
(2) emulator-noskin
說明:不使用任何模擬器皮膚。
(3) emulator-onion <image>
說明:在屏幕上使用覆蓋圖,不支持JPEG格式圖片,僅支持PNG格式。
(4) emulator-onion-alpha <percent>
說明:指定onion皮膚的半透明值,默認值為50,單位為%。
(5) emulator-skin <skinID>
說明:指定皮膚啟動模擬器,SDK提供了以下四個可選皮膚。
l QVGA-L(320*240,風景)默認。
l QVGA-P(240*320,肖像)。
l HVGA-L(480*320,風景)。
l HVGA-P(320*480,肖像)。
(6) emulator-skindir <dir>
說明:在<dir>目錄下查找皮膚。
2.6 實驗指導——管理SD卡
在Android模擬器實例上測試程序時經常需要使用SD卡。為此AndroidSDK提供了SD卡創建工具——Mksdcard,它位于Tools目錄中。
Mksdcard工具的語法格式如下:
mksdcard [-l label] <size> <file>
語法中各個參數的含義如下:
l -l:指定SD卡的卷標,可選參數。
l size:指定SD卡的容量大小,默認單位是bytes,也可以使用K或者M作為單位。
l file:指定SD卡鏡像文件的路徑。
【范例12】
創建一個卷標為myCard,大小為100MB的SD卡,將文件保存為D:\data\myCard.img。其語句如下:
mksdcard -l myCard 100MB d:\data\myCard.img
該語句執行成功后沒有輸出結果。此時打開D:\data會看到myCard.img鏡像文件,如圖2-30所示。
如果要管理myCard里面的內容,可通過以下步驟實現。
(1) 使用AVD Manager或者Emulator工具加載myCard的鏡像文件myCard.img。Emulator工具的加載命令如下:
emulator -sdcard D:\data\myCard.img
(2) 使用ADB push上傳文件或者目錄,也可以使用ADT的File Explorer工具管理。
圖2-30 創建SD卡鏡像文件
2.7 Keytool工具和Jarsigner工具
要使編寫的Android應用程序能在真實的Android設備上運行,必須對Android應用程序的APK文件進行簽名。APK是Android Package的縮寫,它可以直接在Android系統上運行,類似Windows系統下的EXE文件。
Android SDK提供了兩個命令行工具對APK文件進行簽名:keytool.exe和jarsigner.exe。其中Keytool用于生成一個Android程序使用的密鑰文件(Private Key);Jarsigner則根據該密鑰文件對Android程序進行打包并設置簽名。
Keytool工具的語法如下:
keytool -genkey -v -keystore androidguy-release.keystore-alias androidguy -keyalg RSA -validity 3000
其中,各個參數的說明如下。
l androidguy-realse.keystore:表示要生成的密鑰文件名,可以是任意合法的文件名。
l androidguy:表示密鑰的別名,在簽名時會用到。
l RSA:表示密鑰使用的算法。
l 3000:表示簽名的有效時間,以“天”為單位。
進入命令行按照上述格式執行Keytool命令時,會要求用戶輸入一系列與密鑰有關的信息,如圖2-31所示。
在輸入完密鑰信息后,按回車鍵會自動創建指定的密鑰文件,并設置簽名信息。運行成功后會出現圖2-32所示界面,提示已經創建密鑰文件到當前目錄中。
假設要對C:\MyApp.apk文件進行簽名,則使用Jarsigner命令的語法格式如下:
jarsigner -verbose -keystoreandroidguy-release.keystore C:\MyApp.apk androidguy
圖2-31 輸入密鑰信息 圖2-32 生成密鑰文件
上述命令將指定的密鑰文件androidguy-release.keystore對Android程序的APK文件MyApp.apk進行簽名,執行后還需要輸入密鑰的密碼,執行成功后的輸出如圖2-33所示。經過簽名后的APK文件占用的內存會比原始文件大。
圖2-33 對APK進行簽名
2.8 實驗指導——使用ADT簽名程序
在使用命令對APK文件進行簽名時,通常需要熟記各個命令參數,比較麻煩。為此ADT工具提供了一個圖形化向導進行簽名。向導的打開方法是:在ADT中右擊項目名稱,在彈出的菜單中選擇Android Tools|Export Signed Application Package命令,具體操作步驟如下。
(1) 在打開的窗口中輸入或選擇要簽名的項目名稱,如圖2-34所示。
(2) 單擊“下一步”按鈕,在打開的Keystore selection界面中選擇Create new keystore選項創建一個新的密鑰文件,并指定密鑰文件的名稱和輸入密碼,如圖2-35所示。
(3) 單擊“下一步”按鈕,在進入的界面中輸入密鑰和簽名信息,如圖2-36所示。
(4) 單擊“下一步”按鈕,指定生成后APK文件的名稱和位置,如圖2-37所示。
(5) 單擊“完成”按鈕完成設置。打開目標位置,會看到除了生成的APK文件之外,還包括一個密鑰文件。該密鑰文件在給以后的程序簽名時仍然可以繼續使用。
圖2-34 選擇項目 圖2-35 指定密鑰文件和密碼
圖2-36 指定密鑰和簽名信息 圖2-37 指定要生成的APK文件
2.9 ADB工具
ADB(Android Debug Bridge)實際上是一個“客戶端—服務器端”程序,默認情況下它會監聽TCP 5554端口,讓客戶端與服務器端通信。其中,客戶端就是用來操作的計算機,服務器端是目標設備,例如Android設備、實體手機或虛擬機。
ADB是Android SDK中最常用的調試工具之一,下面詳細介紹該工具的具體應用情況。
2.9.1 查看ADB版本
ADB工具位于Android SDK的platform-tools目錄下,它的主要功能如下。
(1) 運行設備的shell命令行。
(2) 管理模擬或設備的端口映射。
(3) 在計算機與設備之間上傳和下載文件。
(4) 將本地APK軟件安裝到模擬器或設備上,使應用或者系統升級。
【范例13】
假設要查看ADB的版本,則可運行以下命令:
adb version
執行后的結果如圖2-38所示,從中可以看到當前版本為1.0.31。
圖2-38 查看ADB版本
2.9.2 查看設備信息
ADB啟動時首先會在服務器開啟5554~5585端口,等待客戶端Android設備或者模擬器的接入。
【范例14】
要查看當前所有設備的信息可以使用以下命令:
adb devices
該命令返回的結果為Android設備或模擬器的序列號及其狀態,運行效果如圖2-39所示。
圖2-39 查看設備信息
從輸出結果中可以看出,當前ADB監聽了兩個端口的設備,它們的序列號分別是CoolPad8190和emulator-5554。其中,前者是一臺真實的Android設備,后者是模擬器實例(5554表示ADB為該實例分配的端口號)。返回結果的第二列表示當前設備的狀態,它有如下兩個值。
l offline:設備沒有連接到ADB或者實例沒有響應。
l device:設備已經連接到ADB,并處于在線狀態。
注意: device狀態并不表示當前Android設備可用。因為當Android設備處于啟動階段時,若連接成功也會返回該狀態。
2.9.3 管理軟件
在使用ADB連接到Android設備之后便可以進行各種操作了。最常見的操作是在Android設備中安裝新的軟件,或者卸載已有的軟件。在這里需要注意的是,Android設備中的軟件都以.apk為擴展名。
1.安裝軟件
ADB安裝軟件的語法格式如下:
adb install <apk 文件路徑>
命令執行后會將指定的apk文件安裝到設備上。如果在install后面添加了-r選項,則表示重新(覆蓋)安裝此軟件。
【范例15】
假設要安裝d:\apk\popogame.apk軟件包,安裝命令如下。
adb install d:\apk\popogame.apk
命令執行后如果在窗口中出現Success字樣,則說明安裝成功,如圖2-40所示。如圖2-41所示為軟件安裝后,打開的運行效果。
圖2-40 安裝軟件成功窗口 圖2-41 Popogame軟件運行效果
假設該軟件出現問題無法正常打開,則可以用如下命令進行修復安裝。
adb install -r d:\apk\popogame.apk
2.卸載軟件
如果不需要該軟件了,還可以使用ADB命令卸載,語法格式如下:
adb uninstall <軟件名>
上述命令執行后將卸載指定的軟件。卸載時需要指定完整的軟件包名稱,而不是安裝包的名稱,但軟件包不需要寫擴展名。如果在uninstall后面添加-k選項,則表示卸載軟件時保留原配置和緩存文件。
【范例16】
假設安裝完popogame.apk包后的應用程序包有誤,其名稱是com.android.popogame。若此時需要卸載該應用程序,則其卸載命令如下:
adb uninstall com.android.popogame
如果使用如下命令,則在刪除該應用程序包時還可以保留原配置和緩存文件。
adb uninstall -k com.android.popogame
提示: 使用ADB工具進入Shell命令狀態可以卸載軟件。
【范例17】
如果當前ADB有多個Android設備或者模擬器實例,那么就需要使用-s選項指定目標設備的序列號。
設備序列號可通過adb devices命令獲取。例如,要在emulator-5554實例上安裝軟件,則其命令如下:
adb -s emulator-5554 install -r d:\apk\popogame.apk
若要在emulator-5554實例上卸載軟件,則其命令如下:
adb -s emulator-5554 uninstall com.android.popogame
2.9.4 移動文件
既然ADB工具在本機與Android設備之間建立了連接,那么就可以使用該工具在兩者之間傳輸文件。例如,上傳一個本地軟件包到Android設備,或者從Android設備下載一個配置文件。
1.上傳文件
使用push命令可以把本地硬盤上的文件或者目錄上傳(復制)到遠程的目標設備(模擬器實例)。其語法格式如下:
adb push <本地路徑> <遠程路徑>
【范例18】
假設將d:\apk\popogame.apk復制到Android設備的data目錄中。其命令如下:
adb push d:\apk\popogame.apk /data/
執行結果如圖2-42所示。
注意: 本地硬盤上的路徑符號是\,而設備/模擬器上的路徑符號則是/,兩個路徑符號所使用的斜杠的方向不同。
2.下載文件
使用pull命令可以將遠程文件下載(復制)到本地硬盤上,其語法格式如下:
adb pull <遠程路徑> <本地路徑>
【范例:19】
假設將Android設備中data目錄下的popogame.apk文件復制到C盤根目錄,命令如下。
adb pull /data/ popogame.apk c:\
執行結果如圖2-43所示。
圖2-42 上傳文件 圖2-43 下載文件
提示: 在ADT的DDMS透視圖中可以很方便地使用File Explorer來管理文件。
2.9.5 執行Shell命令
由于Android是基于Linux內核的操作系統,因此在Android上可以執行Shell命令。具體方法是執行如下命令進入Shell命令狀態:
adb shell
上述命令執行后,如果窗口顯示一個#符號,則說明當前是Shell控制臺,可以執行各種Shell命令。例如執行ls命令查看所有的系統文件,執行結果如圖2-44所示。
圖2-44 執行ls命令窗口
注意: 如果沒有Android系統的root權限,Shell控制臺的提示符將是一個$符號,而不是#符號。此時若想退出Shell控制臺,則輸入“exit”命令即可。
【范例20】
在Shell控制臺可以查看Android系統和設備的全部參數信息,如硬件信息、ROM版本信息以及系統信息等。具體方法是在Shell提示符下執行getprop命令,執行結果如圖2-45所示。
【范例21】
如果只想執行一條Shell命令,則可以使用如下語法格式:
adb shell <shell_command>
例如,執行adb shell dmesg語句可以查看Android內核的調試信息,執行結果如圖2-46所示。
圖2-45 執行getprop命令后的效果圖
圖2-46 查看調試信息窗口
執行pm命令可以在Shell中刪除軟件,例如刪除com.android.popogame的命令如下:
adb shell pm uninstall com.android.popogame
2.9.6 查看Bug報告
在命令提示符中輸入“adb bugreport”可以顯示當前Android系統的運行狀態,例如內存狀態、CPU狀態、內核輸出信息、調試信息以及錯誤信息等。由于該命令返回的輸出結果有很多,圖2-47中僅顯示了部分信息。
圖2-47 查看bug報告