本書結合Android應用開發的一些具體案例,由淺入深地闡述Android應用開發的基礎知識、常用技巧和關鍵技術,例如對一般Android書籍中難以見到的實現消息推送(不利用第三方平臺)、即時通信、服務器端接口編程等市場急需的重要開發技能進行了較為細致的講解,以達到快速提升讀者編程水平和實際項目開發能力之目的。 全書分為基礎篇、提高篇、開發篇和拓展篇四個部分,共23章。 基礎篇(第1~9章),主要包含Android開發環境搭建(包括*新的Android Studio安裝與配置)、用戶界面設計、組件通信等內容。 提高篇(第10~12章),包含百度地圖開發、ViewPager和PageAdapter等內容。 開發篇(第13~18章),包含在手機客戶端解析JSON、消息推送、Android賬戶管理、MyBatis框架原理、Maven和Gradle等內容。 拓展篇(第19~23章),包含即時通信、友盟統計及社會化組件、Android客戶端程序架構、版本控制工具SVN和Git等內容。
本書詳細介紹了Android Studio和Eclipse ADT兩種不同開發環境搭建(針對Google網站不易訪問);對Android客戶端程序架構、實現消息推送、即時通信、服務器端json接口編程(Restful API)、在手機客戶端解析json、網絡多圖片異步下載、移動應用數據統計分析等移動互聯網重要開發技術進行了較為細致的講解。配套教學資源豐富,包含所有章節的PPT、程序源碼、習題解答、教學視頻、所需軟件工具及一個幫助學習本書的手機APP。
“北冥有魚,其名為鯤,鯤之大,不知其幾千里也。化而為鳥,其名為鵬,鵬之背,不知其幾千里也;怒而飛,其翼若垂天之云……天之蒼蒼,其正色邪?其遠而無所至極邪?其視下也,亦若是則已矣!
移動互聯網時代,Android為王。移動設備的市場份額中Android排名第一,應用的下載次數達到近600億,每天有近幾十萬臺的Android設備售出。
移動計算帶來的社會巨變史無前例。蘋果以其天才的創新,使得iPhone在全球迅速有了數百萬名忠實“粉絲”,而Android作為第一個完整、開放、免費的手機平臺,使開發者在為其開發程序時擁有更大的自由。
由于Android發展迅速,導致了就業市場對Android開發人員的需求量猛增。然而更多企業需要的是擁有實踐經驗的開發人員,同時高校Android教學相關書籍也非常缺乏。
本書的編者參與了多個Android商業項目的開發,并將商業項目進行精簡,成為高校教學更易用的實訓項目,以達到培養高校學生提升Android開發實踐能力的目的。
本教材的特色之一是“行動體系的課程”向“學科體系課程”的滲透。從“學習情境”(問題情景)的假設,到自己動手解決問題,應該說是更多地帶有“行動體系課程”的特點。在思維層次上,由“感性認識”到“理性認識”的認知方式更容易讓學生接受。(“行動體系的課程”提出源于德國高等教育領域,主張學生在行動中思考、學習、總結,再上升為經驗(理論)。)
本書的另一特色是項目課程設計。“項目課程”可追溯到17世紀和18世紀,最早出現在意大利羅馬的建筑師學院,現已成為一種有著深厚理論基礎的課程模式。但實際往往是,源于企業的項目過大,無法遵照學習規律,因此需要重新按從易到難的順序設計項目系列。只有對實際項目進行壓縮、簡化,而又具備一定程度的綜合性、針對性和復雜性,才能使學生獲得真實化、綜合化的職業能力,F在公開出版的眾多Android書籍中,所涉及的Android項目案例與真實的商業項目還是有相當大的區別的。
本教材的特色之三是實訓項目來源于真實的商業項目。
本教材的特色之四是配套教學資源豐富。
本書編者根據自身實際參與的真實商業項目,經過精簡和提煉,精心編寫了2個教學案例:“3G商城”和“掌上蘇大”。本書主要以這兩個項目的教學貫穿整個課程教學的始末。為了教學方便,其間也穿插有其他小的項目,例如“開發百度地圖”、“Android客戶端實現推送”、“實現即時通信”、“課程表”等。實際上,這些小項目都可作為模塊,集成到“掌上蘇大”項目中。
需要說明的是,本書的定位是卓越工程師培養創新教材。不僅面向在校學生,而且面向廣大Android程序員、技術人員和培訓機構等。
編者也衷心希望廣大高校學生,通過精心閱讀和認真學習本書內容,能夠在一定程度上提高自身的就業能力。
給授課教師的教學建議
如下表所示,標注“*”號的章節可作為可選章節。如果要針對高校學生實施教學,正常教學課時可安排在48~82課時之間,根據具體情況,可靈活安排。
具體章節 建議課時 是否可選章節 可選章節
建議課時
第1章 開發環境搭建和程序開發基礎 2
第2章 用戶界面設計 6
第3章 組件通信 2
第4章 后臺服務與廣播消息 4
第5章 數據存儲與訪問 4
第6章 Android網絡應用 4
第7章 圖形圖像處理 2
第8章 Fragment 2
第9章 Java并發編程 6
第10章 百度地圖開發 4
第11章 ViewPager和PageAdapter 2
*第12章 PostgreSQL 9 可選 6
第13章 在手機客戶端解析JSON 4
第14章 消息推送 4
*第15章 Android賬戶管理 可選 2
*第16章 MyBatis框架原理 可選 6
第17章 Maven和Gradle 2
*第18章 服務器端接口編程 可選 4
*第19章 即時通信 可選 4
*第20章 友盟統計及社會化組件 可選 2
*第21章 Android客戶端程序架構 可選 4
*第22章 Java設計模式 可選 4
*第23章 版本控制工具——SVN和Git 可選 2
合計 48 34
給讀者的學習建議
若要成為高水平的Android程序員,編者給出的建議如下:
。1)首先將Java語言基礎打牢?梢哉J真研讀《SCJP考試指南(考試號310-065)》(電子工業出版社)一書,把書上的題目盡可能都做一遍。
(2)認真把本書的第9章Java并發編程搞清楚。因為Android客戶端編程一般都是并 發的。
。3)限于篇幅,本書對Java設計模式并未展開詳盡的闡述,推薦《設計模式之禪(第2版)》,通過該書比較深入地學習Java設計模式。同時多翻看項目源碼,但腦子里要琢磨設計模式。
。4)多看開源代碼。本書的第14章消息推送和第19章即時通信都涉及開源代碼。實際上,一些開源代碼比商業軟件代碼更復雜。
。5)在編程水平得到一定提高的基礎上,可學習Android系統源代碼。為更清楚、透徹地理解Java的自動內存管理機制,可對Java虛擬機規范加以研究。
祝您早日成為Android編程高手!
編者分工與致謝
本書由韓冬負責擬定提綱和統稿,并編寫了第1章、第4章、第8~11章、第13~15章、第17章、第19~22章,魏慧編寫了第2~3章、第5~6章、第18章,胡沁涵編寫了第7章、第12章和第16章,張建編寫了第23章,賈俊鋮負責編寫附錄部分。蘇州大學計算機學院學生崔益欣、李昕、徐磊、任偉榮、朱銳、倪劍飛、王敦文、朱燦、李家強、崔盼盼、徐旺、夏鳴等協助負責該書稿的PPT、源代碼、習題解答和教學視頻的建設,書稿中及程序中用到的圖片多由崔益欣同學提供。在這里向他們表示衷心的感謝!
本書提供了豐富的網絡教學資源包,包含所有章節的PPT、程序源碼、習題解答、教學視頻、所需軟件工具及一個幫助學習本書的手機APP。讀者可在華信教育資源網進行下載。
鑒于作者水平有限,書中難免存在不足和錯誤之處,懇望讀者提出寶貴意見和建議,以便再版時改進。
韓冬
2015年9月
第一部分 基 礎 篇
第1章 開發環境搭建和程序開發基礎 2
1.1 Android簡介 2
1.1.1 Android傳奇 2
1.1.2 Android體系結構 3
1.2 搭建Android應用開發環境 4
1.2.1 Android 4.4安裝 4
1.2.2 如何解決Android SDK無法
下載Package的問題 6
1.3 第一個Android程序 7
1.4 Android程序結構 8
1.5 Android應用的基本組件介紹 9
1.6 Activity的生命周期 10
1.7 程序調試 12
1.8 Android Studio 1.2正式版安
裝與配置 13
1.8.1 Windows 7 64位系統安裝
JDK并配置環境變量 13
1.8.2 Android Studio環境搭建 14
1.8.3 創建HelloWorld項目 19
1.9 相關閱讀材料 23
1.9.1 未來的夏娃 23
1.9.2 Andy Rubin的黯然離場:
他為何非走不可? 23
1.9.3 Andy Rubin早年歲月 24
1.10 本章小結 25
習題1 26
第2章 用戶界面設計 27
2.1 用戶界面基礎 27
2.2 常用控件 31
2.2.1 TextView和EditText 32
2.2.2 Button與ImageButton 33
2.2.3 單選按鈕RadioButton和
復選按鈕CheckBox 33
2.2.4 ImageView 33
2.2.5 ProgressBar 34
2.2.6 ScrollView 36
2.2.7 ListView 37
2.2.8 GridView 42
2.2.9 AlertDialog 42
2.3 界面布局 43
2.3.1 線性布局及android:
layout_weight屬性設置 43
2.3.2 幀布局 45
2.3.3 表格布局 45
2.3.4 相對布局 46
2.3.5 絕對布局 47
2.3.6 網格布局 48
2.4 消息提示 48
2.5 Handler消息傳遞機制 49
2.6 項目實戰――“3G商城”(一) 52
2.6.1 任務說明 52
2.6.2 項目講解 52
2.6.3 典型代碼及技術實現 53
2.7 相關閱讀材料:Android用戶界
面中單位的使用 59
2.8 本章小結 60
習題2 60
第3章 組件通信 61
3.1 Activity 61
3.1.1 Activity配置 61
3.1.2 啟動和關閉Activity 62
3.1.3 使用Bundle在Activity之間
交換數據 62
3.1.4 調用另一個Activity并
返回結果 63
3.2 Intent對象 64
3.3 發送并返回短信內容舉例 67
3.4 本章小結 68
習題3 68
第4章 后臺服務與廣播消息 69
4.1 Service應用 69
4.1.1 簡介 69
4.1.2 進程內服務 69
4.1.3 跨進程服務 74
4.2 接收廣播消息 77
4.2.1 簡介 77
4.2.2 發送廣播 79
4.2.3 有序廣播 82
4.2.4 接收系統廣播消息 83
4.3 相關閱讀材料:Android開源庫
EventBus 83
4.4 本章小結 89
習題4 91
第5章 數據存儲與訪問 92
5.1 使用SharedPreferences 92
5.1.1 簡介 92
5.1.2 SharePreferences舉例 94
5.2 文件存儲 94
5.2.1 簡介 94
5.2.2 讀寫SD卡上的文件 95
5.2.3 文件存儲舉例 96
5.3 SQLite數據庫 96
5.3.1 簡介 96
5.3.2 手動創建SQLite數
據庫 96
5.3.3 SQLiteDatabase 98
5.4 數據共享 101
5.4.1 ContentProvider 101
5.4.2 創建數據提供者 102
5.4.3 使用數據提供者 103
5.4.4 ContentProvider舉例 103
5.5 項目實戰――課程表 104
5.5.1 任務說明 104
5.5.2 項目講解 105
5.5.3 典型代碼及技術要點 106
5.6 本章小結 109
習題5 109
第6章 Android網絡應用 110
6.1 HTTP通信 110
6.2 Socket通信 115
6.3 使用WebView顯示網頁 119
6.4 項目實戰――查詢員工信息 123
6.4.1 任務說明 123
6.4.2 項目講解 123
6.4.3 典型代碼及技術要點 124
6.5 本章小結 126
習題6 127
第7章 圖形圖像處理 128
7.1 基本繪圖 128
7.1.1 準備畫布(Canvas) 128
7.1.2 準備畫筆(Paint) 129
7.1.3 位圖處理(Bitmap和
BitmapFactory) 129
7.2 2D繪圖 130
7.2.1 幾何圖形 130
7.2.2 文本 132
7.2.3 路徑 133
7.2.4 圖片 133
7.3 圖形特效處理 134
7.3.1 平移、旋轉、縮放、傾斜 134
7.3.2 扭曲 136
7.3.3 位圖著色器 137
7.4 綜合練習 138
7.4.1 任務說明 138
7.4.2 代碼實現 138
7.5 本章小結 140
習題7 140
第8章 Fragment 141
8.1 Fragment概述 141
8.2 Fragment的生命周期 141
8.3 Fragment使用 142
8.4 將Fragment加入Activity中 143
8.5 使用Fragment舉例 144
8.6 本章小結 146
習題8 147
第9章 Java并發編程 148
9.1 Java線程池簡介 148
9.2 Executor與ExecutorService 149
9.3 ThreadPoolExecutor 153
9.4 Future模式 157
9.5 項目實戰――“3G商城”(二) 161
9.5.1 任務說明 161
9.5.2 項目講解 161
9.5.3 典型代碼及技術要點 163
9.6 本章小結 173
習題9 173
第二部分 提 高 篇
第10章 百度地圖開發 176
10.1 Android地圖SDK 176
10.1.1 概述 176
10.1.2 申請密鑰 176
10.1.3 SimpleMapDemo 180
10.1.4 基礎地圖 183
10.1.5 事件監聽 183
10.2 Android定位SDK 187
10.3 Android導航SDK 187
10.4 項目實戰――“開發百度地圖” 187
10.4.1 任務說明 187
10.4.2 項目講解 187
10.4.3 典型代碼及技術要點 190
10.5 本章小結 196
習題10 196
第11章 ViewPager和PageAdapter 198
11.1 ViewPager和PageAdapter 198
11.2 FragmentPageAdapter實現仿
QQ界面 200
11.3 仿網易新聞客戶端Tab標簽實現 205
11.4 本章小結 208
習題11 208
第12章 PostgreSQL 9 209
12.1 PostgreSQL簡介 209
12.2 PostgreSQL 9的安裝與配置 209
12.2.1 安裝 209
12.2.2 使用pgAdmin III連接
PostgreSQL 209
12.3 數據庫的基本操作 210
12.3.1 創建數據庫 210
12.3.2 修改數據庫 211
12.3.3 刪除數據庫 211
12.4 數據表的基本操作 211
12.4.1 創建數據表 211
12.4.2 修改數據表 212
12.4.3 刪除數據表 212
12.5 插入、更新與刪除數據 212
12.5.1 插入 212
12.5.2 更新 213
12.5.3 刪除 214
12.6 數據查詢 214
12.6.1 查詢語句 214
12.6.2 單表查詢 215
12.6.3 集合函數查詢 217
12.6.4 連接查詢 218
12.6.5 子查詢 219
12.6.6 正則表達式查詢 220
12.6.7 別名 221
12.7 綜合練習 221
12.7.1 任務說明 221
12.7.2 具體實現 221
12.8 相關閱讀材料:數據備份
與還原 224
12.9 本章小結 225
習題12 225
第三部分 開 發 篇
第13章 在手機客戶端解析JSON 228
13.1 JSON簡介 228
13.2 服務器端生成JSON數據 228
13.3 在手機客戶端解析JSON 231
13.4 項目實戰――“3G商城”(三) 233
13.4.1 任務說明 233
13.4.2 項目講解 233
13.4.3 典型代碼及技術要點 235
13.5 本章小結 239
習題13 239
第14章 消息推送 240
14.1 Android消息推送機制 240
14.1.1 推送方式基礎 240
14.1.2 消息推送實現原理 240
14.2 Android平臺的消息推送實現 241
14.2.1 Push在Android平臺上
長連接的實現 241
14.2.2 使用Androidpn實現消
息推送 242
14.3 項目實戰――“Android客
戶端實現推送” 246
14.3.1 任務說明 246
14.3.2 項目講解 246
14.3.3 典型代碼及技術要點 249
14.4 相關閱讀材料 262
14.4.1 幾種常見的消息推送解決
方案 262
14.4.2 Androidpn所存在的一些
問題 263
14.5 本章小結 264
習題14 264
第15章 Android賬戶管理 265
15.1 賬戶管理相關類 265
15.2 使用OAuth 2.0來進行鑒定 267
15.3 應用程序如何將一個賬號注冊到
系統中 270
15.4 創建自定義賬戶示例 273
15.5 本章小結 275
習題15 275
第16章 MyBatis框架原理 276
16.1 MyBatis框架簡介 276
16.2 從JDBC到MyBatis 277
16.3 使用MyBatis進行一次簡單
的SQL查詢 278
16.3.1 準備工作 278
16.3.2 主要步驟 279
16.3.3 小結 282
16.4 配置文件說明 282
16.4.1 主配置文件 282
16.4.2 接口文件 285
16.4.3 SQL映射文件 286
16.4.4 動態SQL 288
16.5 MyBatis應用 290
16.5.1 數據的增、刪、改、查 290
16.5.2 關聯數據的查詢 292
16.5.3 分頁數據的查詢 295
16.5.4 與Spring3集成 296
16.5.5 與Spring MVC集成 299
16.6 本章小結 301
習題16 301
第17章 Maven和Gradle 303
17.1 初識Maven 303
17.2 Maven的安裝和配置 305
17.3 Maven使用 308
17.4 坐標和依賴 310
17.5 構建支持Servlet 3.0的Maven Web
應用 311
17.6 Gradle來了 314
17.7 本章小結 315
習題17 316
第18章 服務器端接口編程 317
18.1 JNDI數據源配置 317
18.2 Log4J與SLF4J 320
18.3 項目實戰――“3G商城”(四) 324
18.3.1 任務說明 324
18.3.2 項目講解 324
18.3.3 典型代碼及技術要點 325
18.4 MyBatis VS Hibernate 329
18.5 相關閱讀材料:Flexjson 334
18.6 本章小結 335
習題18 335
第四部分 拓 展 篇
第19章 即時通信 338
19.1 XMPP協議 338
19.2 openfire 341
19.2.1 openfire簡介 341
19.2.2 openfire安裝與配置 341
19.3 Smack簡介 343
19.4 項目實戰――“實現即時通信” 347
19.4.1 登錄openfire服務器 347
19.4.2 獲取好友列表 350
19.4.3 客戶端接收服務器發送的
消息 352
19.4.4 初步實現兩個客戶端通信 354
19.5 相關閱讀材料 359
19.5.1 將openfire源代碼導入
Eclipse 359
19.5.2 openfire插件開發 364
19.6 本章小結 367
習題19 367
第20章 友盟統計及社會化組件 368
20.1 友盟應用統計分析 368
20.1.1 集成準備 368
20.1.2 友盟統計分析示例 368
20.2 友盟社會化分享組件 372
20.3 本章小結 373
習題20 373
第21章 Android客戶端程序架構 374
21.1 概述 374
21.2 項目實戰――“掌上蘇大” 374
21.2.1 任務說明 375
21.2.2 整體框架和運行主界面 375
21.2.3 Android全局對象
Application 376
21.2.4 整個應用的線程終止異常
處理 377
21.2.5 程序執行主要流程 378
21.2.6 推送的實現 381
21.2.7 整個應用的后臺服務和廣播
接收機制 382
21.2.8 使用友盟第三方平臺對用戶
行為進行分析 384
21.2.9 Android系統賬戶實現 385
21.2.10 其他 385
21.3 本章小結 385
習題21 385
第22章 Java設計模式 386
22.1 設計模式(Design Pattern)的分類
和設計原則 386
22.1.1 設計模式的分類 386
22.1.2 設計原則 386
22.2 創建模式(CreationalPattern) 387
22.2.1 工廠方法模式(Factory Method)和抽象工廠模式(Abstract
Factory) 387
22.2.2 單例模式(Singleton) 388
22.2.3 建造者模式(Builder) 388
22.2.4 原型模式(Prototype) 388
22.3 結構模式(StructuralPattern) 389
22.3.1 適配器模式(Adapter)和裝飾
模式(Decorator) 389
22.3.2 代理模式(Proxy)和外
觀模式(Fa?ade) 390
22.3.3 橋接模式(Bridge)和組
合模式(Composite) 390
22.3.4 享元模式(Flyweight) 391
22.4 行為模式(BehavioralPattern) 391
22.4.1 策略模式(Strategy)和模板方法模式(TemplateMethod) 391
22.4.2 觀察者模式(Observer)、迭代器模式(Iterator)、責任鏈模式
(Chain of Responsibility)和命
令模式(Command) 392
22.4.3 備忘錄模式(Memento)和狀態
模式(State) 392
22.4.4 訪問者模式(Visitor)、中介者模式(Mediator)和解釋器模式
(Interpreter) 393
22.5 本章小結 394
習題22 394
第23章 版本控制工具――SVN
和Git 396
23.1 版本控制基礎知識 396
23.2 SVN 396
23.2.1 SVN服務端 396
23.2.2 SVN客戶端 397
23.2.3 Android Studio中使用SVN 398
23.3 Git和GitHub 398
23.3.1 Git安裝 398
23.3.2 遠程倉庫 399
23.3.3 分支管理 400
23.3.4 使用GitHub 401
23.3.5 Android Studio中使用Git 401
23.4 比較SVN和Git 401
23.5 本章小結 402
習題23 402
附錄A Eclipse中編碼問題
(包括ADT) 403
附錄B Eclipse自動部署項目到
Tomcat的webapps 405
附錄C ADB命令 408
參考文獻 409