本書主要分為三部分,包括軟件篇、硬件篇和項目篇。軟件篇從Android體系結構和開發環境搭建,以及Android應用程序開發等方面構造了一個完整的Android開發流程;硬件篇重點講解了S5PV210硬件結構和Android系統移植,詳細介紹了底層驅動的封裝、中間層JNI的制作,以及上層UI的設計;項目篇提供完整的綜合應用項目的程序開發實例,詳細介紹了開發過程和原始程序代碼。并且安排了豐富的實驗內容與實踐,讓讀者深刻理解和掌握嵌入式系統開發的整個過程,了解底層驅動程序驅動硬件的原理和上層應用程序的設計方法。
全面詳解底層驅動、中間層JNI制作和上層UI接口貫通設計的著作,大量的實驗程序,完整的項目實例,快速提高嵌入式硬件與Android的開發能力
第2版前言
《Android嵌入式系統程序開發(基于Cortex-A8)》一書,自2013年4月由機械工業出版社出版后,分別在2013年和2014年重印兩次,在此類專業圖書教材中表現相當突出。作者非常感謝購買本書的讀者,尤其是那些能夠通過網絡提出問題討論并給出建議或指出錯誤的讀者朋友。根據最近幾年Android的發展變化、開發平臺軟件和開發工具的更新等相關資料,以及近幾年筆者在學校、公司從事教學與培訓中的經驗和積累,決定對本書進行升級以適應快速迭代的市場變化。
本書在第1版內容的基礎上修改了部分內容,主要內容包括:更新第2章Android應用程序開發內容,增加了界面布局、菜單和事件處理內容;新增第3章數據庫應用程序開發,增加本地SQLite數據庫應用程序,以及遠程數據庫訪問應用程序;根據讀者的建議,修改S5PV210硬件結構與接口驅動程序部分內容,涉及第5章系統硬件及驅動程序,以及第6章外設接口及驅動程序,實現了硬件接口、上層UI界面程序和中間層JNI程序結合的驅動程序;修改了第7章并更換了第9章的實例,使得初學者更容易理解和接受相關知識。
盡管筆者設計和開發過許多實際的應用項目和產品,但考慮到本書讀者主要是初學者,通常不可能具備與掌握開發各種實際項目或產品所涉及的相關知識和基礎,所以提供完整的綜合應用項目的程序開發實例。再版書中的實例源代碼放在華章網站上,包括應用程序開發、數據庫應用程序開發,系統硬件及驅動程序、外設接口及驅動程序和綜合應用項目的程序開發實例等源代碼。
本書在編寫過程中,得到了許多專家和學者的大力支持,聽取了多方面的寶貴意見和建議,在此對他們表示衷心感謝。書中難免存在不足和錯誤之處,敬請讀者批評指正。
編者
2015年4月
胡 文 大學計算機系教授,多年從事Windows CE和Android嵌入式系統應用研究,精通單片機系統開發和嵌入式終端開發,所開發的嵌入式組態軟件、嵌入式訪問數據庫軟件和嵌入式終端等應用于多個領域。
目 錄
第2版前言
第1版前言
軟件篇
第1章 Android體系結構及開發環境 / 2
1.1 Android體系結構介紹 / 2
1.1.1 應用程序 / 3
1.1.2 應用程序框架 / 3
1.1.3 函數庫 / 4
1.1.4 Linux內核 / 4
1.2 搭建Windows下的開發環境 / 5
1.2.1 安裝JDK / 5
1.2.2 安裝Eclipse / 6
1.2.3 安裝ADT / 6
1.2.4 安裝SDK / 7
1.2.5 創建Android虛擬設備 / 9
1.3 搭建Linux下的開發環境 / 11
1.3.1 安裝JDK / 11
1.3.2 安裝Eclipse / 12
1.3.3 安裝ADT / 13
1.3.4 安裝SDK / 15
1.3.5 創建Android虛擬設備 / 17
1.4 搭建NDK開發環境 / 20
1.4.1 NDK開發環境與安裝目錄 / 20
1.4.2 系統和軟件需求 / 20
1.4.3 Windows 平臺NDK環境搭建 / 21
1.4.4 Linux平臺NDK環境搭建 / 25
第2章 Android應用程序開發 / 28
2.1 第一個HelloEveryone / 28
2.1.1 創建第一個Android項目HelloEveryone / 28
2.1.2 Android應用工程組成 / 29
2.2 Android應用程序組成 / 31
2.2.1 Activity組件 / 31
2.2.2 Intent組件 / 36
2.2.3?Broadcast Receiver組件 / 39
2.2.4 Service組件 / 39
2.2.5 Content Provider組件 / 39
2.3 使用AndroidManifest文件定義應用程序 / 40
2.3.1 管理應用程序身份 / 42
2.3.2 注冊Activity和其他應用程序組件 / 42
2.3.3 使用許可權限 / 44設備和軟件 / 45
2.3.5 使用庫和Android SDK版本 / 46
2.3.6 定義應用程序的其他配置參數 / 46
2.4?常用Widget控件介紹 / 47
2.4.1?用Widget控件創建Android項目 / 47
2.4.2?按鈕 / 48
2.4.3?文字框 / 50
2.4.4?編輯框 / 51
2.4.5?多項選擇框 / 52
2.4.6?單項選擇框 / 54
2.4.7?下拉列表 / 55
2.4.8?自動完成文本 / 56
2.4.9?日期、時間選擇器 / 58
2.4.10?進度條 / 60
2.4.11?拖動條 / 61
2.4.12?圖片視圖 / 62
2.4.13?基于網格索引的圖片瀏覽器 / 63
2.4.14?選項卡 / 66
2.4.15?列表 / 67
2.4.16?圖片按鈕 / 69
2.4.17?拖動效果 / 70
2.4.18?對話框實例 / 72
2.5 界面布局 / 75
2.5.1 線性布局 / 75
2.5.2 框架布局 / 77
2.5.3 表格布局 / 78
2.5.4 相對布局 / 80
2.5.5 絕對布局 / 81
2.5.6 網格布局 / 82
2.6 菜單 / 84
2.6.1 菜單資源 / 84
2.6.2 選項菜單 / 85
2.6.3 子菜單 / 87
2.6.4 快捷菜單 / 89
2.7 事件處理 / 91
2.7.1 Android的事件處理概述 / 91
2.7.2 基于監聽的事件處理 / 91
2.7.3 基于回調的事件處理 / 94
2.7.4 響應的系統設置的事件 / 97
2.7.5 Handler消息傳遞機制 / 101
第3章 SQLite數據庫程序開發 / 103
3.1 SQLite簡介 / 103
3.1.1 SQLite體系結構 / 103
3.1.2 數據庫基礎 / 104
3.1.3 SQLite語句及語法 / 104
3.1.4 數據庫包 / 107
3.1.5 SQLiteDatabase類 / 109
3.2 SQLite連接 / 111
3.2.1 開始構建 / 112
3.2.2 數據庫基本操作 / 114
3.2.3 數據庫與UI連接 / 120
3.3 數據共享 / 122
3.3.1 Content Provider實現數據共享 / 123
3.3.2 創建Content Provider / 125
3.3.3 使用CRUD基本函數 / 127
3.3.4 注冊與使用Content Provider / 130
3.4 基于SQLite數據庫的日記賬工具 / 135
硬件篇
第4章 Android系統移植 / 152
4.1 Android 結構介紹 / 152
4.2 Android 內核結構和設備驅動 / 153
4.2.1 Android 內核源代碼結構 / 153
4.2.2 Android 常用設備驅動 / 155
4.3 Android 內核基本配置 / 161
4.3.1 Android內核中的Kconf?ig文件 / 162
4.3.2 Android內核配置選項 / 162
4.4 Android 內核編譯 / 165
4.4.1 Android內核中的Makef?ile文件 / 166
4.4.2 解壓Android 內核源代碼 / 167
4.4.3 編譯Android 內核 / 167
4.5 DMA-210XP平臺Android文件系統燒寫 / 168
4.5.1 燒寫u-boot到Nand F?lash / 168
4.5.2 燒寫zImage內核映像文件 / 171
4.5.3 燒寫ramdisk-uboot.img映像文件 / 172
4.5.4 燒寫Android System.img文件 / 172
4.5.5 燒寫Android userdata.img文件 / 173
4.5.6 啟動Android系統 / 173
4.5.7 TF卡自動更新kernel和Android系統文件 / 174
第5章 系統硬件與驅動程序 / 175
5.1 Android硬件抽象層(HAL) / 175
5.1.1 內核硬件驅動程序 / 175
5.1.2 增加C硬件驅動程序 / 184
5.1.3 接口硬件驅動程序 / 185
5.1.4 JNI硬件驅動程序 / 189
5.2 GPIO接口及驅動程序 / 191
5.2.1 GPIO接口 / 191
5.2.2 LED接口電路 / 199
5.2.3 LED驅動程序設計 / 199
5.2.4 LED程序測試 / 214
5.3 PWM定時器及驅動程序 / 215
5.3.1 PWM定時器 / 215
5.3.2 背光接口電路 / 221
5.3.3 背光驅動程序設計 / 224
5.3.4 背光程序測試 / 232
5.4 ADC接口及驅動程序 / 232
5.4.1 ADC轉換器 / 232
5.4.2 ADC接口電路 / 239
5.4.3 ADC驅動程序設計 / 239
5.4.4 ADC程序測試 / 244
5.5 鍵盤接口及驅動程序 / 245
5.5.1 鍵盤掃描原理 / 245
5.5.2 矩陣鍵盤硬件原理圖 / 246
5.5.3 鍵盤驅動程序設計 / 250
5.5.4 鍵盤程序測試 / 259
第6章 外設接口與驅動程序 / 261
6.1 UART串行接口及通信程序 / 261
6.1.1 UART簡介 / 261
6.1.2 UART接口及操作 / 271
6.1.3 UART通信程序設計 / 272
6.1.4 UART程序測試 / 285
6.2 IIC總線接口及驅動程序 / 286
6.2.1 IIC總線簡介 / 286
6.2.2 在Linux內核中添加IIC設備 / 291
6.2.3 IIC驅動程序設計 / 291
6.3 藍牙接口及驅動程序 / 302
6.3.1 藍牙簡介 / 302
6.3.2 Android系統下的藍牙架構 / 304
6.3.3 藍牙驅動程序設計 / 305
6.3.4 藍牙程序測試 / 312
6.4 Wi-Fi接口及通信程序 / 313
6.4.1 Wi-Fi介紹 / 313
6.4.2 Wi-Fi程序設計 / 316
6.4.3 Wi-Fi程序測試 / 323
6.5 MediaPlayer播放器程序 / 324
6.5.1 MediaPlayer簡介 / 324
6.5.2 MediaPlayer的界面與架構 / 325
6.5.3 MediaPlayer播放器程序設計 / 327
6.5.4 MediaPlayer程序測試 / 335
6.6 Camera 拍照及攝影程序 / 336
6.6.1 Camera簡介 / 336
6.6.2 Android 系統的Camera / 337
6.6.3 Camera拍照程序設計 / 338
6.6.4 Camera程序測試 / 343
項目篇
第7章?Android界面與IO設計工具 / 346
7.1 Android界面與IO設計工具介紹 / 346
7.2 Android界面與IO設計工具結構 / 346
7.3 Android界面與IO設計工具界面設計 / 348
7.3.1 界面設計 / 348
7.3.2 界面內容添加 / 348
7.4 Android界面與IO設計工具功能選擇區設計 / 356
7.4.1 界面設計 / 356
7.4.2 IO設計 / 369
7.4.3?數據庫設計 / 371
7.5 Android界面與IO設計工具輔助功能區設計 / 376
7.6 Android界面與IO設計工具程序生成區設計 / 377
7.6.1 Android界面與IO設計工具程序生成區功能介紹 / 377
7.6.2 Android界面與IO設計工具程序生成區的代碼實現 / 378
第8章 GPS與Google Map定位系統 / 392
8.1 MyMap服務系統 / 392
8.2 Android Google Map / 393
8.2.1 申請Google Map Android API Key / 393
8.2.2 編寫Google Map框架程序 / 394
8.2.3 控制地圖 / 396
8.2.4 地圖的顯示模式 / 398
8.2.5 地圖的圖層 / 401
8.2.6 查詢與定位 / 403
8.3 Android定位服務 / 409
8.3.1 開啟定位服務 / 409
8.3.2 模擬測試 / 411
8.3.3 GPS與Google Map定位 / 413
8.4 案例重構 / 414
8.4.1 地圖的顯示模式 / 414
8.4.2 重構“查詢方法” / 417
第9章 Android圖書管理系統 / 420
9.1 系統功能設計 / 420
9.2 系統開發環境 / 420
9.3 數據庫設計 / 421
9.4 圖書管理系統學生端開發 / 424
9.4.1 登錄界面 / 424
9.4.2 查詢界面 / 425
9.4.3 學生預約管理 / 431
9.4.4 掛失管理 / 433
9.5 圖書管理系統管理端開發 / 434
9.5.1 登錄界面 / 434
9.5.2 圖書管理 / 438
9.5.3 學生信息管理 / 439
9.5.4 管理員管理 / 441
9.5.5 借閱預約圖書 / 443
9.5.6 繳納罰款 / 446
參考文獻 / 450