● 如何開始使用Android Studio IDE
● 如何導航及使用Android Studio
● 如何使用Git進行版本控制
● 如何使用Gradle
● 如何使用嶄新的Android Wear框架
● 如何使用Android Studio調試代碼
● 如何管理應用項目
● 如何測試應用
● 如何分析并重構代碼
● 如何定制Android Studio
● 如何開始使用Android Studio IDE
● 如何導航及使用Android Studio
● 如何使用Git進行版本控制
● 如何使用Gradle
● 如何使用嶄新的Android Wear框架
● 如何使用Android Studio調試代碼
● 如何管理應用項目
● 如何測試應用
● 如何分析并重構代碼
● 如何定制Android Studio
前 言
大約5.3億年前,在那個地質學家稱之為“寒武紀大爆發”的時代,包括現存所有門在內的大量物種在短短100萬年的時間迅速出現——而這對于地質學時間來說僅僅是一眨眼工夫。科學家們對于此現象一直感到非常驚訝,達爾文自己都認為“寒武紀大爆發”發生如此之快,甚至讓他的自然進化論產生了疑點。今天,我們正在經歷著科技領域的“寒武紀大爆發”。美國勞工統計局預測現在的高中畢業生在其一生中將從事11份工作,而這種職業生涯短暫現象主要歸因于科技的快速變化1。
技術會衍生出更多的技術,而新的技術也正在加速發展。有些新技術幾年之后依然會存在,但大多數將會消失。沒有比投入時間和精力去掌握一門已經過時或者效用短暫的新技能更糟糕的事情了。我們編寫本書是因為相信其中涵蓋的工具和技術將會留存下來,而且值得你為之投入。
小即是美
摩爾定律是無情的,它指出CPU的處理能力大約每18個月會翻一倍。在過去幾年里,筆記本電腦已經達到了與體積更大的桌面電腦相同的性能。筆記本電腦和平板電腦占據了2014年PC銷售額的81%2,而且銷量還會繼續增長,相反桌面電腦的銷量將會下滑。沒有哪個人或組織能夠阻止或逆轉這種趨勢——這是經濟規律的力量,是個體選擇集聚的結果。筆記本電腦在未來大約10年將會是腦力工作者的首選工具。然而,一場悄無聲息的革命正在發生,它將會很快推翻全能的筆記本電腦。大約到2025年,或者可能更早,我們的智能手機將會達到與筆記本電腦相同的性能——也就是說,更大體積的外形已經不再具備任何性能優勢了。最終,我們的移動電腦(Mobile Computer,MC)將用于大多數計算應用,即使是那些你我現在認為只能在筆記本電腦上完成的應用。這場變革是可預見的,與推翻桌面電腦的變革一樣確定。同時,你可以期望MC(換句話說,智能手機或平板電腦)開始發揮出和筆記本電腦一樣的功能,包括連接諸如鍵盤、顯示器和鼠標等外圍設備。
PC時代即將結束,但MC時代其實更具個性化。不久,一系列新型可穿戴設計即將可用,例如手表、眼鏡和鞋子。我們預見在不久后的某一天,我們將會在身上穿著自己的電腦,并在顯示器、鍵盤和鼠標這些外圍設備可用的地方連接它們。這將會是一個真正的個人電腦時代,盡管我們不大可能再這樣稱呼它了。
Android的優勢
如果渴望成為一名Android開發者,那么你已經做出了極好的選擇。在未來的10年里,這個不斷發展的世界上的數十億人都會來到線上。對于這些人中的大多數,他們的第一部電腦將會是智能手機,而這些智能手機中的大部分將會搭載Android系統3。我們的樂觀是有充分原因的,因為已經有了大量可供推算的歷史數據。Gartner Group公司指出2015年將售出12.5億部Android設備4。在撰寫本書時,Android獨占了超過四分之三的中國市場份額5,而中國消費者在移動設備上的投入是驚人的,一些人會在新款移動設備上花費70%的月薪,因為互聯是參與全球經濟的先決條件6。在絕對數量上,中國是最大的市場,但我們能夠在所有發展中國家觀察到類似的趨勢。更進一步,由于Android操作系統是開源免費的,因此它幾乎總是電視游戲機、游戲系統、增強現實系統以及大量其他電子設備廠商的首選。
出于多種原因,Android將繼續鞏固其在全球市場的主導地位。Android的模塊化架構允許進行各種各樣的配置和定制。Android設備標配的所有核心應用均可以被任意數量的第三方應用替代,這包括類似電話撥號器、電子郵件客戶端、瀏覽器甚至操作系統導航器等應用。可用的Android設備有著各種各樣令人驚訝的形狀和功能,有Android增強現實眼鏡、Android游戲機(Ouya是最著名的)、Android手表、各種尺寸的Android平板電腦,當然還有Android智能手機。
Android的核心技術毫不遜色于它的主要競爭者。Android的包容性和開源許可證已經吸引了大量盟友,包括三星——全球最具創新性的公司之一。免費7和可定制的操作系統意味著Android設備廠商可以專注于向市場上推出優秀的產品,而高度競爭的Android設備市場也會持續生產出廉價、高質量且結構上開放的設備。
Android Studio是革命性的
作為一名腦力勞動者,工具的選擇極其重要。我們總是在尋求可以提高生產效率并能自動完成工作的工具。某些工具有著顯而易見的好處,人們會立刻采納它。Android Studio就是一款這樣的工具。
2013年在Google I/O預發布Android Studio幾天之后,我們就接觸了它。在那以前,我們在專業領域和教學時均使用Android開發者工具(Android Developer Tool,ADT)。ADT是一個Android開發環境,內置于一個稱為Eclipse的開源集成開發環境(IDE)中。雖然Android Studio仍處于早期預發布階段,但我們已開始在專業領域內使用Android Studio。
Android Studio是JetBrains和Google合作的產物。Android Studio基于JetBrain的IntelliJ構建,因此其功能是IntelliJ的超集。能夠使用IntelliJ做到的大多數事情,都可以在Android Studio中完成。Android Studio是革命性的,因為它流程化了Android開發過程并讓Android開發比以前更加容易接近8。Android Studio目前是Android的官方IDE。
Android工具生態系統
Android是一個有著自身工具生態系統支持的技術平臺。緊隨Android Studio之后,Git是Android生態系統中下一個最重要的工具。Git是一款分布式的源代碼管理工具,它正在迅速成為標準,不僅是在移動開發領域,而是在整個軟件工程領域。我們所有的移動開發項目均使用Git來做版本控制,沒有例外。Git足可以用一本書來介紹,但幸運的是,你無須了解Git的所有功能就可以熟練地使用它。Android Studio包含優秀的、全功能的且已集成的Git工具,它有著令人印象深刻的圖形用戶界面。本書涵蓋了成為高效Git用戶所需要了解的特性,如果想要深入掌握關于這個不可或缺工具的知識,我們為你指出了進一步學習所需的資源。
Android生態系統中的另一個重要工具是Gradle。Gradle是一款類似于Ant和Maven的構建工具,它允許你管理庫和庫項目、運行儀器測試以及創建條件構建。Android Studio在庫管理方面本身已經很不錯了,但Gradle使得此項任務更加便捷。與Git一樣,Gradle已經完全集成到Android Studio,而且擁有令人印象深刻的界面,使得用戶能夠圖形化地檢查Gradle文件并監測Gradle構建過程的輸出。
Android和Java
如果在沒有充分了解Java的情況下嘗試在Android Studio中開發Android App,那么你將會遭遇挫折。出于諸多原因,Java是一門極其有用且流行的編程語言。或許Java流行的最重要原因是其內存托管機制。內存托管意味著程序員不必考慮釋放堆內存,也不必擔心內存泄漏。在內存托管環境中進行開發的程序員通常更高效,而且程序的運行時錯誤會更少。和Java類似,Android也是一種內存托管的編程環境。托管內存被證明是一個非常好的思路,使得微軟和蘋果公司均在各自的移動開發平臺中采用了此模型9。
從ADT/Eclipse轉型
如果你是一位有經驗的Android開發者而且習慣使用ADT編程,那么你會收獲驚喜。幸運的是,所有SDK工具(例如DDMS和Hierarchy Viewer)都依然可用,你將發現在Android Studio中很容易就可以訪問到它們。如果你是一位ADT用戶,那么你可能需要不斷地清理并重新構建項目,以便資源能夠與源代碼同步(可怕的R.java同步錯誤)。在使用Android Studio的這些日子里,我們一直沒有被這個問題困擾過。如果你是一位有經驗的ADT用戶,那么為了提升使用Android Studio的效率,你將需要學習一些鍵盤快捷鍵、熟悉Gradle以及適應Android Studio的表現邏輯。總而言之,享受Android Studio帶來的強大功能和樂趣只需付出很小的代價。
本書約定
Android Studio在操作系統之間保持了高度的一致性。事實上,Windows和Linux中的用戶界面幾乎就是一樣的。不過,Mac OS用戶將會發現部分菜單的位置和鍵盤快捷鍵是不同的。當涉及需要系統導航的內容時,我們使用Windows。不過,當給出鍵盤快捷鍵時,我們將同時包含Windows-Linux和Mac快捷鍵,中間使用豎線分隔(例如,Ctrl+K | Cmd+K)。我們會適時為Mac用戶給出提示、鏈接和其他資源。
源代碼
讀者在學習本書中的示例時,可以手動輸入所有的代碼,也可以使用本書附帶的源代碼文件。本書使用的所有源代碼都可以從http://www.apress.com下載,還可訪問www.tupwk.com.cn/downpage來下載源代碼。下載代碼后,只需要用自己喜歡的解壓縮軟件進行解壓縮即可。
Adam Gerber,是Android Studio的早期使用者之一,他使用Android Studio開發專業的Android應用并將其用于自己在芝加哥大學開設的Android應用開發和技術創業等課程的教學。Adam是“芝加哥創新交流”的成員并從事技術和創業領域的咨詢工作。Adam擁有伊利諾伊大學工業設計本科學位以及位于巴黎的法國國立工藝學院管理科學博士學位。Adam的郵箱是gerber@uchicago.edu。
Clifton Craig,從事軟件工程師的工作已逾16載。他的經驗涵蓋了J2ME/BlackBerry、Android和iOS,以及基于JEE的后端系統。他參與過一些備受矚目的項目,包括MapQuest天然氣價格門戶網站、基于J2ME和Android的MapQuest移動版、基于iOS的MapQuest移動版以及Skype的iOS和Android版。他維護著一個技術博客(cliftoncraig.com),其中涵蓋各種軟件主題,從Android和Linux到iOS和OS X。他有著從軍經歷而且是一位狂熱的自行車迷、虔誠的基督徒以及兩個天才小女孩的父親。
第1章 Android Studio入門 1
1.1 在Windows上安裝Java開發
工具包 1
1.1.1 在Windows上下載JDK 2
1.1.2 在Windows上執行JDK向導 3
1.1.3 配置Windows環境變量 4
1.2 在Mac上安裝Java開發工具包 7
1.2.1 在Mac上下載JDK 7
1.2.2 在Mac上執行JDK向導 8
1.2.3 在Mac上配置JDK版本 9
1.3 安裝Android Studio 10
1.4 創建第一個項目:HelloWorld 12
1.5 使用Android虛擬設備管理器 15
1.6 在AVD上運行HelloWorld 16
1.7 在Andriod設備上運行HelloWorld 17
1.8 小結 19
第2章 在Android Studio中遨游 21
2.1 編輯器 22
2.1.1 Editor選項卡 22
2.1.2 折疊線 23
2.1.3 標記欄 23
2.1.4 工具按鈕 23
2.1.5 默認布局 24
2.2 導航工具窗口 24
2.2.1 Project工具窗口 25
2.2.2 Stucture工具窗口 26
2.2.3 Favorites工具窗口 26
2.2.4 TODO工具窗口 27
2.2.5 Commander工具窗口 27
2.3 主菜單欄 27
2.4 工具欄 28
2.5 導航欄 28
2.6 狀態欄 28
2.7 常用操作 29
2.7.1 選擇文本 29
2.7.2 使用Undo和Redo 29
2.7.3 找到最近的文件 30
2.7.4 遍歷最近的導航操作 30
2.7.5 剪切、復制和粘貼 30
2.8 上下文菜單 31
2.9 獲取幫助 32
2.10 使用鍵盤導航 32
2.10.1 Select In命令 32
2.10.2 Class命令 33
2.10.3 File命令 33
2.10.4 Line命令 33
2.10.5 Related File命令 33
2.10.6 Last Edit Location命令 33
2.10.7 Type Hierarchy命令 34
2.10.8 Declaration命令 34
2.11 查找和替換文本 34
2.11.1 Find命令 34
2.11.2 Find in Path命令 34
2.11.3 Replace命令 35
2.11.4 Replace in Path命令 35
2.12 小結 35
第3章 在Android Studio中編程 37
3.1 使用代碼折疊 37
3.2 執行代碼補全 39
3.3 注釋代碼 42
3.4 使用代碼生成 42
3.4.1 構造函數 43
3.4.2 getter/setter 44
3.4.3 重載方法 44
3.4.4 toString()方法 45
3.4.5 代理方法 46
3.5 插入動態模板 47
3.6 移動代碼 48
3.7 設計代碼風格 50
3.7.1 Auto-Indent Lines選項 51
3.7.2 Rearrange Code選項 51
3.7.3 Reformat Code選項 52
3.7.4 Surround With 52
3.8 小結 53
第4章 重構代碼 55
4.1 重命名 56
4.2 修改簽名 57
4.3 類型遷移 58
4.4 移動 58
4.5 復制 59
4.6 安全刪除 60
4.7 抽取 60
4.7.1 抽取變量 61
4.7.2 抽取常量 61
4.7.3 抽取字段 62
4.7.4 抽取參數 62
4.7.5 抽取方法 63
4.8 高級重構 65
4.8.1 下推成員和上拉成員 65
4.8.2 使用代理代替繼承 66
4.8.3 封裝字段 67
4.8.4 封裝方法返回值 68
4.8.5 使用工廠方法代替構造函數 69
4.8.6 將匿名類轉換為內部類 69
4.9 小結 70
第5章 備忘錄實驗:第1部分 71
5.1 啟動新項目 73
5.2 初始化Git倉庫 74
5.3 構建用戶界面 77
5.3.1 使用可視化設計器 78
5.3.2 編輯布局的原始XML 78
5.3.3 添加視覺增強效果 83
5.3.4 向ListView添加條目 84
5.3.5 設置操作欄溢出菜單 86
5.4 持久化備忘錄 87
5.4.1 數據模型 87
5.4.2 SQLite API 89
5.5 小結 95
第6章 備忘錄實驗:第2部分 97
6.1 添加/刪除備忘 97
6.2 響應用戶交互 100
6.3 提供多選上下文菜單 102
6.3.1 兼容較早的SDK 104
6.3.2 添加上下文操作模式 105
6.4 實現添加、編輯和刪除 107
6.4.1 設計自定義對話框 108
6.4.2 將設計轉換為代碼 108
6.4.3 創建自定義對話框 110
6.4.4 添加自定義圖標 113
6.5 小結 115
第7章 Git入門 117
7.1 安裝Git 117
7.2 忽略文件 119
7.3 添加文件 120
7.4 克隆參考App:Reminders 121
7.4.1 分叉和克隆 121
7.4.2 使用Git日志 124
7.4.3 分支 125
7.5 在分支上開發 125
7.5.1 Git提交和分支 131
7.5.2 回退在哪里? 132
7.5.3 合并 136
7.5.4 Git重置修改歷史 138
7.5.5 Git變基 142
7.5.6 分離頭部 144
7.5.7 相對引用 146
7.5.8 在變基時解決沖突 148
7.5.9 Git遠端 153
7.6 小結 154
第8章 設計布局 155
8.1 Activity 155
8.2 View和ViewGroup 156
8.2.1 預覽面板 157
8.2.2 寬度和高度 159
8.2.3 設計器模式 161
8.2.4 幀布局 161
8.2.5 線性布局 164
8.2.6 相對布局 166
8.2.7 嵌套布局 169
8.2.8 列表視圖 173
8.3 布局設計指導原則 180
8.3.1 覆蓋各種顯示尺寸 180
8.3.2 組合在一起 183
8.4 Fragment 190
8.5 小結 200
第9章 貨幣實驗:第1部分 201
9.1 Currencies規范 201
9.2 初始化Git倉庫 205
9.3 修改MainActivity的布局 207
9.4 定義顏色 211
9.5 為布局應用顏色 212
9.6 創建并應用樣式 213
9.7 創建JSONParser類 216
9.8 創建啟動界面 217
9.9 獲取JSON格式的活動貨幣代碼 220
9.10 啟動MainActivity 223
9.11 小結 224
第10章 貨幣實驗:第2部分 225
10.1 定義MainActivity的成員 225
10.2 從bundle中解壓出貨幣代碼 226
10.3 創建選項菜單 227
10.4 實現選項菜單行為 229
10.5 創建spinner_closed布局 230
10.6 將mCurrencies綁定到選擇列表 231
10.7 將選擇列表行為代理給MainActivity 232
10.8 創建偏好管理器 234
10.9 根據給定代碼查找位置 235
10.10 從貨幣字符串中抽取代碼 236
10.11 實現共同偏好 237
10.12 按鈕單擊行為 239
10.13 保存開發者密鑰 240
10.14 獲取開發者密鑰 241
10.15 CurrencyConverterTask 242
10.15.1 onPreExecute() 246
10.15.2 doInBackground() 246
10.15.3 onPostExecute() 246
10.16 按鈕選擇器 247
10.17 啟動圖標 248
10.18 小結 249
第11章 測試和分析 251
11.1 創建新的儀器測試 251
11.1.1 定義SetUp()和TearDown()方法 252
11.1.2 在MainActivity中定義回調 254
11.1.3 定義一些測試方法 255
11.1.4 運行儀器測試 257
11.1.5 修改Bug 258
11.2 使用Monkey 259
11.3 使用分析工具 260
11.3.1 檢查代碼 260
11.3.2 分析依賴 261
11.3.3 分析棧軌跡 262
11.4 小結 264
第12章 調試 265
12.1 日志 265
12.1.1 使用logcat 266
12.1.2 寫入Android日志 268
12.2 捕捉Bug! 268
12.2.1 使用交互式調試器 272
12.2.2 表達式求值 275
12.2.3 使用棧軌跡 277
12.2.4 探索交互式調試的工具窗口 280
12.2.5 使用斷點瀏覽器 281
12.2.6 條件斷點 283
12.3 小結 285
第13章 Gradle 287
13.1 Gradle語法 288
13.2 IntelliJ核心構建系統 289
13.3 Gradle構建概念 290
13.3.1 Gradle Android結構 290
13.3.2 項目依賴 291
13.4 案例研究:使用Gradle的天氣預報項目 292
13.5 Android庫依賴 299
13.5.1 Java庫依賴 303
13.5.2 第三方庫 311
13.6 打開較舊的項目 313
13.7 小結 314
第14章 更多SDK工具 315
14.1 Android設備監視器 315
14.1.1 線程監視器 316
14.1.2 堆監視器 317
14.1.3 分配跟蹤器 318
14.1.4 網絡統計 319
14.1.5 層次查看器 320
14.2 Android監視器 323
14.2.1 內存監視器 323
14.2.2 方法跟蹤工具 324
14.2.3 分配跟蹤器 325
14.2.4 屏幕抓取 325
14.3 導航編輯器 327
14.3.1 設計用戶界面 328
14.3.2 導航編輯器初步 328
14.3.3 連接Activity 330
14.3.4 編輯菜單 331
14.4 終端 333
14.4.1 查詢設備 333
14.4.2 安裝APK 333
14.4.3 下載文件 333
14.4.4 上傳文件 333
14.4.5 端口轉發 334
14.5 Google云工具 334
14.5.1 創建HelloCloud前端 335
14.5.2 創建Java后臺模塊 337
14.5.3 組合在一起 339
14.5.4 部署到App Engine 343
14.6 小結 346
第15章 Android可穿戴設備實驗 347
15.1 設置可穿戴設備環境 347
15.1.1 安裝設備驅動程序 347
15.1.2 設置SDK工具 350
15.1.3 設置可穿戴虛擬設備 350
15.1.4 設置Android可穿戴設備硬件 353
15.2 創建MegaDroid項目 353
15.2.1 針對屏幕的優化技術 355
15.2.2 構建watch-face服務 356
15.2.3 初始化可繪制資源和樣式 358
15.2.4 管理手表更新 359
15.2.5 繪制界面 363
15.3 小結 367
第16章 定制Android Studio 369
16.1 代碼風格 370
16.2 外觀、顏色和字體 372
16.3 鍵盤映射 374
16.4 宏 375
16.5 文件和代碼模板 375
16.6 菜單和工具欄 377
16.7 插件 378
16.8 小結 380