Android 6 應用開發案例精解(第三版) [Android 6 for Programmers: An App-Driven Approach,]

Android 6 應用開發案例精解(第三版) [Android 6 for Programmers: An App-Driven Approach,] pdf epub mobi txt 電子書 下載 2025

[美] Paul,Deitel(保羅. 戴特爾),Harvey,Deitel(哈維. 戴特爾),Alexander ... 著,張君施 等 譯
圖書標籤:
  • Android
  • Android 6
  • 應用開發
  • 移動開發
  • 編程
  • Java
  • 案例分析
  • 實戰
  • Android Studio
  • 第三方庫
  • 用戶界麵
想要找書就要到 新城書站
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 電子工業齣版社
ISBN:9787121314292
版次:3
商品編碼:12084243
包裝:平裝
外文名稱:Android 6 for Programmers: An App-Driven Approach,
開本:16開
齣版時間:2017-05-01
用紙:膠版紙
頁數:372
字數:595000
正文語種:中文

具體描述

編輯推薦

適讀人群 :本書適閤希望從事 Android 應用開發的初學者, 也適閤作為該領域中高級開發者的參考書。

*書中采用瞭以應用為中心的方法,包含8個完整編碼的Android應用。

*專業的程序員開發者指南,講解如何利用Android 6和Android Studio開發用於智能手機和平闆電腦的應用。

*實用、例子豐富的Android教程。


內容簡介

本書是美國知名編程教材的作者針對Android係統下進行應用開發而編寫的一本入門級教程,全書以"應用驅動的方法”為基礎,詳細講解瞭17個完整的Android應用的開發過程,並提供瞭8個APP應用的完整的源代碼。這些應用經過精心挑選,從不同側麵展現瞭Android係統各個功能模塊的編程方法。這些功能包括音頻、視頻、動畫、電話、藍牙、語音識彆、加速度計、GPS、指北針、應用窗件、3D圖形等, 它們都是從事Android應用開發所必須熟知的基本技術。

作者簡介

Paul Deitel和Harvey Deitel是全球暢銷的編程語言教材和專業圖書作傢,他們成立的Deitel & Associates公司是一傢國際知名的企業培訓和寫作公司,專門進行計算機編程語言、對象技術、移動應用開發及Internet和Web軟件技術方麵的培訓和寫作,齣版瞭一流的編程專業的大學教材、 專業圖書以及LiveLessons視頻課程。
張君施,北京工商大學數理係副教授,黨支部書記。研究方嚮為概率論與數理統計、計算機語言,翻譯過多部經典編程教材。


目錄

第1章 Android簡介 1
1.1 簡介 2
1.2 Android――世界領先的移動操作係統 2
1.3 Android的特點 3
1.4 Android操作係統 5
1.4.1 Android 2.2 (Froyo) 5
1.4.2 Android 2.3 (Gingerbread) 6
1.4.3 Android 3.0~3.2 (Honeycomb) 6
1.4.4 Android 4.0~4.0.4 (Ice Cream Sandwich) 6
1.4.5 Android 4.1~4.3 (Jelly Bean) 7
1.4.6 Android 4.4 (KitKat) 8
1.4.7 Android 5.0和5.1 (Lollipop) 8
1.4.8 Android 6 (Marshmallow) 9
1.5 從Google Play下載應用 9
1.6 包 10
1.7 Android軟件開發工具集(SDK) 11
1.8 麵嚮對象編程:簡短迴顧 13
1.8.1 汽車作為對象 13
1.8.2 方法與類 13
1.8.3 實例化 14
1.8.4 復用 14
1.8.5 消息與方法調用 14
1.8.6 屬性與實例變量 14
1.8.7 封裝 14
1.8.8 繼承 14
1.8.9 麵嚮對象的分析與設計(OOAD) 14
1.9 在AVD中測試Tip Calculator應用 15
1.9.1 在Android Studio中打開Tip Calculator應用的工程 15
1.9.2 創建Android虛擬設備(AVD) 16
1.9.3 在Nexus 6 AVD中運行Tip Calculator應用 18
1.9.4 在Android設備上運行Tip Calculator應用 20
1.10 創建好的Android應用 21
1.11 Android開發資源 22
1.12 小結 23
第2章 Welcome應用 24
2.1 簡介 25
2.2 技術概覽 26
2.2.1 Android Studio 26
2.2.2 LinearLayout,TextView和ImageView 26
2.2.3 可擴展標記語言(XML) 26
2.2.4 應用的資源 26
2.2.5 輔助性 26
2.2.6 國際化 27
2.3 創建應用 27
2.3.1 啓動Android Studio 27
2.3.2 創建新工程 27
2.3.3 Create New Project對話框 28
2.3.4 Target Android Devices步驟 28
2.3.5 Add an Activity to Mobile步驟 29
2.3.6 Customize the Activity步驟 30
2.4 Android Studio窗口 31
2.4.1 Project窗口 31
2.4.2 編輯器窗口 32
2.4.3 Component Tree窗口 33
2.4.4 應用的資源文件 33
2.4.5 布局編輯器 33
2.4.6 默認GUI 33
2.4.7 默認GUI的XML 34
2.5 用布局編輯器構建應用的GUI 35
2.5.1 嚮工程添加圖像 35
2.5.2 添加應用圖標 36
2.5.3 將RelativeLayout 改成LinearLayout 37
2.5.4 改變LinearLayout的id和orientation屬性 38
2.5.5 配置TextView的id和text屬性 39
2.5.6 配置TextView的textSize屬性 40
2.5.7 設置TextView的textColor屬性 41
2.5.8 設置TextView的gravity屬性 41
2.5.9 設置TextView的layout:gravity屬性 41
2.5.10 設置TextView的layout:weight屬性 43
2.5.11 添加ImageView,顯示圖像 43
2.5.12 預覽設計的效果 46
2.6 運行Welcome應用 46
2.7 為應用增加輔助功能 48
2.8 使應用國際化 49
2.8.1 本地化 49
2.8.2 為本地化資源命名文件夾 49
2.8.3 將字符串譯文添加到工程中 49
2.8.4 本地化字符串 50
2.8.5 在AVD中測試西班牙語的應用 50
2.8.6 在設備中測試西班牙語的應用 51
2.8.7 TalkBack與本地化 51
2.8.8 本地化清單 52
2.8.9 專業翻譯 52
2.9 小結 52
第3章 Tip Calculator應用 53
3.1 簡介 54
3.2 測試驅動的Tip Calculator應用 55
3.3 技術概覽 56
3.3.1 Activity類 56
3.3.2 Activity類的生命周期方法 56
3.3.3 AppCompat庫與AppCompatActivity類 57
3.3.4 安排GridLayout中的視圖 57
3.3.5 利用布局編輯器、Component Tree和Properties窗口創建並定製GUI 58
3.3.6 格式化數字,錶示本地貨幣和百分比字符串 58
3.3.7 實現TextWatcher接口,處理EditText中的文本變化 58
3.3.8 實現OnSeekBarChangeListener接口,處理SeekBar中的滑塊位置變化 58
3.3.9 材料主題 58
3.3.10 材料設計:高度和陰影 59
3.3.11 材料設計:顔色 59
3.3.12 AndroidManifest.xml 60
3.3.13 在Properties窗口中搜索 60
3.4 構建GUI 60
3.4.1 GridLayout簡介 60
3.4.2 創建TipCalculator工程 61
3.4.3 改成GridLayout布局 61
3.4.4 添加TextView,EditText和SeekBar 62
3.4.5 定製視圖 64
3.5 默認主題及定製主題顔色 66
3.5.1 parent主題 66
3.5.2 定製主題顔色 67
3.5.3 樣式的常用View屬性值 70
3.6 添加應用的邏輯功能 70
3.6.1 package聲明和import聲明 70
3.6.2 AppCompatActivity的MainActivity子類 71
3.6.3 類變量與實例變量 71
3.6.4 重寫Activity方法onCreate 72
3.6.5 MainActivity方法calculate 74
3.6.6 實現OnSeekBarChangeListener接口的匿名內部類 74
3.6.7 實現TextWatcher接口的匿名內部類 75
3.7 AndroidManifest.xml 76
3.7.1 manifest元素 77
3.7.2 application元素 77
3.7.3 activity元素 77
3.7.4 intent-filter元素 78
3.8 小結 79
第4章 Flag Quiz應用 80
4.1 簡介 81
4.2 測試驅動的Flag Quiz應用 83
4.2.1 配置應用的設置 83
4.2.2 運行應用 84
4.3 技術概覽 86
4.3.1 菜單 86
4.3.2 Fragment 86
4.3.3 Fragment生命周期方法 87
4.3.4 管理Fragment 88
4.3.5 首選項 88
4.3.6 assets文件夾 88
4.3.7 資源文件夾 89
4.3.8 支持不同屏幕尺寸和分辨率 89
4.3.9 確定設備方嚮 90
4.3.10 用於顯示消息的Toast 90
4.3.11 使用Handler在未來執行一個Runnable對象 90
4.3.12 將動畫用於View 90
4.3.13 使用ViewAnimationUtils創建環形縮放動畫 90
4.3.14 通過顔色狀態錶根據視圖狀態確定顔色 90
4.3.15 AlertDialog 91
4.3.16 為異常消息做日誌 91
4.3.17 通過顯示Intent啓動另一個活動 91
4.3.18 Java數據結構 92
4.3.19 Java SE 7特性 92
4.3.20 AndroidManifest.xml 93
4.4 創建工程、資源文件和另外的類 93
4.4.1 創建工程 93
4.4.2 Blank Activity模闆布局 94
4.4.3 配置對Java SE 7的支持 94
4.4.4 嚮工程添加國旗圖像 95
4.4.5 strings.xml與格式化字符串資源 95
4.4.6 arrays.xml 96
4.4.7 colors.xml 97
4.4.8 button_text_color.xml 98
4.4.9 編輯menu_main.xml 98
4.4.10 創建國旗飄揚動畫 99
4.4.11 指定應用設置的preferences.xml 100
4.4.12 添加SettingsActivity類和SettingsActivityFragment類 101
4.5 構建應用的GUI 102
4.5.1 用於縱嚮模式設備的activity_main.xml布局 102
4.5.2 設計fragment_main.xml布局 102
4.5.3 Graphical Layout編輯器工具欄 106
4.5.4 用於橫嚮設備的content_main.xml布局 107
4.6 MainActivity類 108
4.6.1 package聲明和import聲明 109
4.6.2 字段 109
4.6.3 重寫的Activity方法onCreate 109
4.6.4 重寫的Activity方法onStart 111
4.6.5 重寫的Activity方法onCreateOptionsMenu 112
4.6.6 重寫的Activity方法onOptionsItemSelected 112
4.6.7 實現OnSharedPreferenceChangeListener的匿名內部類 113
4.7 MainActivityFragment類 114
4.7.1 package聲明和import聲明 114
4.7.2 字段 114
4.7.3 重寫的Fragment方法onCreateView 116
4.7.4 updateGuessRows方法 118
4.7.5 updateRegions方法 118
4.7.6 resetQuiz方法 119
4.7.7 loadNextFlag方法 120
4.7.8 getCountryName方法 122
4.7.9 animate方法 122
4.7.10 實現OnClickListener的匿名內部類 123
4.7.11 disableButtons方法 126
4.8 SettingsActivity類 126
4.9 SettingsActivityFragment類 127
4.10 AndroidManifest.xml 127
4.11 小結 129
第5章 Doodlz應用 130
5.1 簡介 131
5.2 在AVD中測試Doodlz應用 132
5.3 技術概覽 135
5.3.1 Activity和Fragment的生命周期方法 135
5.3.2 定製視圖 136
5.3.3 使用SensorManager監聽加速計事件 136
5.3.4 定製的DialogFragment 136
5.3.5 使用Canvas,Paint和Bitmap畫圖 137
5.3.6 處理多點觸事件並在Path中保存綫信息 137
5.3.7 保存圖形 138
5.3.8 打印功能及Android支持庫的PrintHelper類 138
5.3.9 Android 6.0的新許可模型 138
5.3.10 利用Gradle構建係統添加依賴性 138
5.4 創建工程和資源 138
5.4.1 創建工程 139
5.4.2 Gradle:嚮工程添加支持庫 139
5.4.3 strings.xml 139
5.4.4 為菜單項導入材料設計圖標 140
5.4.5 MainActivityFragment菜單 140
5.4.6 在AndroidManifest.xml中添加許可 142
5.5 構建應用的GUI 142
5.5.1 MainActivity的content_main.xml布局 142
5.5.2 MainActivityFragment的fragment_main.xml布局 143
5.5.3 ColorDialogFragment的fragment_color.xml布局 143
5.5.4 LineWidthDialogFragment的fragment_line_width.xml布局 145
5.5.5 添加EraseImageDialogFragment類 146
5.6 MainActivity類 146
5.7 MainActivityFragment類 147
5.7.1 package聲明、import聲明與字段 147
5.7.2 重寫的Fragment方法onCreateView 148
5.7.3 onResume方法和enableAccelerometerListening方法 149
5.7.4 onPause方法和disableAccelerometerListening方法 150
5.7.5 用於處理加速計事件的匿名內部類 150
5.7.6 confirmErase方法 151
5.7.7 重寫的Fragment方法onCreateOptionsMenu和onOptionsItemSelected 152
5.7.8 saveImage方法 153
5.7.9 重寫的onRequestPermissionsResult方法 154
5.7.10 getDoodleView方法和setDialogOnScreen方法 155
5.8 DoodleView類 155
5.8.1 package聲明和import聲明 155
5.8.2 靜態變量和實例變量 156
5.8.3 構造方法 156
5.8.4 重寫的View方法onSizeChanged 156
5.8.5 clear, setDrawingColor,getDrawingColor,setLineWidth和getLineWidth方法 157
5.8.6 重寫的View方法onDraw 158
5.8.7 重寫的View方法onTouchEvent 158
5.8.8 touchStarted方法 159
5.8.9 touchMoved方法 160
5.8.10 touchEnded方法 161
5.8.11 saveImage方法 161
5.8.12 printImage方法 162
5.9 ColorDialogFragment類 163
5.9.1 重寫的DialogFragment方法onCreateDialog 163
5.9.2 getDoodleFragment方法 165
5.9.3 重寫的Fragment生命周期方法onAttach和onDetach 165
5.9.4 響應alpha, red, green和blue SeekBar事件的匿名內部類 165
5.10 LineWidthDialogFragment類 166
5.10.1 onCreateDialog方法 168
5.10.2 響應widthSeekBar事件的匿名內部類 168
5.11 EraseImageDialogFragment類 169
5.12 小結 170
第6章 Cannon Game應用 171
6.1 簡介 172
6.2 測試驅動的Cannon Game應用 173
6.3 技術概覽 173
6.3.1 使用res/raw資源文件夾 173
6.3.2 Activity和Fragment的生命周期方法 173
6.3.3 重寫View方法onTouchEvent 174
6.3.4 用SoundPool和AudioManager添加聲音 174
6.3.5 用Thread,SurfaceView和SurfaceHolder實現逐幀動畫 174
6.3.6 簡單的衝突檢測 175
6.3.7 沉浸模式 175
6.4 構建應用的GUI和資源文件 175
6.4.1 創建工程 175
6.4.2 調整主題,刪除應用標題和應用欄 175
6.4.3 strings.xml 176
6.4.4 顔色 176
6.4.5 為應用添加聲音 176
6.4.6 添加MainActivityFragment類 176
6.4.7 編輯activity_main.xml 177
6.4.8 將CannonView添加到fragment_main.xml 177
6.5 應用中各個類的概述 178
6.6 Activity的MainActivity子類 178
6.7 Fragment的MainActivityFragment子類 179
6.8 GameElement類 180
6.8.1 實例變量與構造方法 181
6.8.2 update, draw和playSound方法 181
6.9 GameElement的Blocker子類 181
6.10 GameElement的Target子類 182
6.11 Cannon類 183
6.11.1 實例變量與構造方法 183
6.11.2 align方法 183
6.11.3 fireCannonball方法 184
6.11.4 draw方法 184
6.11.5 getCannonball和removeCannonball方法 185
6.12 GameElement的Cannonball子類 185
6.12.1 實例變量與構造方法 185
6.12.2 getRadius,collidesWith,isOnScreen和reverseVelocityX方法 186
6.12.3 update方法 187
6.12.4 draw方法 187
6.13 SurfaceView的CannonView子類 187
6.13.1 package聲明和import聲明 187
6.13.2 常量與實例變量 188
6.13.3 構造方法 189
6.13.4 重寫View方法onSizeChanged 191
6.13.5 getScreenWidth,getScreenHeight和playSound方法 191
6.13.6 newGame方法 192
6.13.7 updatePositions方法 194
6.13.8 alignAndFireCannonball方法 195
6.13.9 showGameOverDialog方法 195
6.13.10 drawGameElements方法 196
6.13.11 testForCollisions方法 197
6.13.12 stopGame和releaseResources方法 197
6.13.13 實現SurfaceHolder.Callback方法 199
6.13.14 重寫View方法onTouchEvent 199
6.13.15 CannonThread:使用Thread實現遊戲的循環 200
6.13.16 hideSystemBars和showSystemBars方法 201
6.14 小結 202
第7章 WeatherViewer應用 203
7.1 簡介 204
7.2 測試驅動的WeatherViewer應用 204
7.3 技術概覽 205
7.3.1 Web服務 205
7.3.2 JSON與org.json包 206
7.3.3 調用REST Web服務的HttpUrlConnection 208
7.3.4 使用AsyncTask執行GUI綫程以外的網絡請求 208
7.3.5 ListView,ArrayAdapter與View-Holder模式 209
7.3.6 FloatingActionButton 210
7.3.7 TextInputLayout 210
7.3.8 Snackbar 210
7.4 構建應用的GUI和資源文件 210
7.4.1 創建工程 210
7.4.2 AndroidManifest.xml 211
7.4.3 strings.xml 211
7.4.4 colors.xml 211
7.4.5 activity_main.xml 212
7.4.6 content_main.xml 212
7.4.7 list_item.xml 213
7.5 Weather類 214
7.5.1 package聲明、import聲明與實例變量 214
7.5.2 構造方法 215
7.5.3 convertTimeStampToDay方法 216
7.6 WeatherArrayAdapter類 216
7.6.1 package聲明和import聲明 216
7.6.2 嵌套類ViewHolder 217
7.6.3 實例變量與構造方法 217
7.6.4 重寫的ArrayAdapter方法getView 218
7.6.5 用於在獨立綫程中下載圖像的AsyncTask子類 219
7.7 MainActivity類 221
7.7.1 package聲明和import聲明 221
7.7.2 實例變量 222
7.7.3 重寫的Activity方法onCreate 222
7.7.4 dismissKeyboard方法和createURL方法 223
7.7.5 調用Web服務的AsyncTask子類 224
7.7.6 convertJSONtoArrayList方法 226
7.8 小結 227
第8章 Twitter Searches應用 228
8.1 簡介 229
8.2 測試驅動的應用 230
8.2.1 添加一個搜索 230
8.2.2 查看搜索Twitter的結果 231
8.2.3 編輯搜索 232
8.2.4 共享搜索 233
8.2.5 刪除搜索 234
8.2.6 滾動瀏覽保存的搜索 234
8.3 技術概覽 234
8.3.1 將鍵/值對數據保存到SharedPreferences文件 234
8.3.2 隱式Intent和意圖選擇器 235
8.3.3 RecyclerView 235
8.3.4 RecyclerView.Adapter和RecyclerView.ViewHolder 236
8.3.5 RecyclerView.ItemDecoration 236
8.3.6 在AlertDialog中顯示選項清單 236
8.4 構建應用的GUI和資源文件 236
8.4.1 創建工程 236
8.4.2 AndroidManifest.xml 237
8.4.3 添加RecyclerView庫 237
8.4.4 colors.xml 237
8.4.5 strings.xml 237
8.4.6 arrays.xml 237
8.4.7 dimens.xml 238
8.4.8 添加Save按鈕圖標 238
8.4.9 activity_main.xml 238
8.4.10 content_main.xml 239
8.4.11 RecyclerView項的布局:list_item.xml 241
8.5 MainActivity類 242
8.5.1 package聲明和import聲明 242
8.5.2 MainActivity類 242
8.5.3 重寫的Activity方法onCreate 243
8.5.4 TextWatcher事件處理器和updateSaveFAB方法 245
8.5.5 saveButton的OnClickListener接口 246
8.5.6 addTaggedSearch方法 247
8.5.7 實現View.OnClickListener,顯示搜索結果的匿名內部類 247
8.5.8 實現View.OnLongClickListener的匿名內部類 248
8.5.9 shareSearch方法 250
8.5.10 deleteSearch方法 251
8.6 RecyclerView.Adapter的SearchesAdapter子類 252
8.6.1 package聲明、import聲明、實例變量和構造方法 252
8.6.2 RecyclerView.ViewHolder的嵌套ViewHolder子類 252
8.6.3 重寫RecyclerView.Adapter方法 253
8.7 RecyclerView.ItemDecoration的ItemDivider 子類 254
8.8 Fabric:Twitter的新移動開發平颱 255
8.9 小結 256
第9章 Address Book應用 257
9.1 簡介 258
9.2 測試驅動的Address Book應用 260
9.2.1 添加聯係人信息 260
9.2.2 查看聯係人信息 260
9.2.3 編輯聯係人信息 260
9.2.4 刪除聯係人信息 262
9.3 技術概覽 262
9.3.1 用FragmentTransaction顯示Fragment 262
9.3.2 在Fragment與宿主Activity之間交換數據 263
9.3.3 操作SQLite數據庫 263
9.3.4 ContentProvider和ContentResolver 263
9.3.5 Loader和LoaderManager――異步數據庫訪問 264
9.3.6 定義樣式並應用於GUI組件 264
9.3.7 指定TextView背景 265
9.4 構建應用的GUI和資源文件 265
9.4.1 創建工程 265
9.4.2 創建應用的類 265
9.4.3 添加應用圖標 266
9.4.4 strings.xml 266
9.4.5 styles.xml 266
9.4.6 textview_border.xml 267
9.4.7 MainActivity的布局 268
9.4.8 ContactsFragment的布局 270
9.4.9 DetailFragment的布局 270
9.4.10 AddEditFragment的布局 271
9.4.11 DetailFragment的菜單 273
9.5 應用中各個類的概述 273
9.6 DatabaseDescription類 274
9.6.1 靜態字段 274
9.6.2 嵌套Contact類 275
9.7 AddressBookDatabaseHelper類 275
9.8 AddressBookContentProvider類 277
9.8.1 AddressBookContentProvider字段 277
9.8.2 重寫的onCreate和getType方法 278
9.8.3 重寫的query方法 279
9.8.4 重寫的insert方法 281
9.8.5 重寫的update方法 282
9.8.6 重寫的delete方法 283
9.9 MainActivity類 284
9.9.1 超類及實現的接口和字段 284
9.9.2 重寫的onCreate方法 285
9.9.3 ContactsFragment.ContactsFragmentListener方法 285
9.9.4 displayContact方法 286
9.9.5 displayAddEditFragment方法 287
9.9.6 DetailFragment.DetailFragmentListener方法 288
9.9.7 AddEditFragment.AddEditFragmentListener方法 288
9.10 ContactsFragment類 289
9.10.1 超類及實現的接口 289
9.10.2 ContactsFragmentListener 289
9.10.3 字段 290
9.10.4 重寫的Fragment方法onCreateView 290
9.10.5 重寫的Fragment方法onAttach和onDetach 291
9.10.6 重寫的Fragment方法onActivityCreated 291
9.10.7 updateContactList方法 292
9.10.8 LoaderManager.LoaderCallbacks<Cursor>方法 292
9.11 ContactsAdapter類 293
9.12 AddEditFragment類 296
9.12.1 超類及實現的接口 296
9.12.2 AddEditFragmentListener 297
9.12.3 字段 297
9.12.4 重寫的Fragment方法onAttach,onDetach和onCreateView 298
9.12.5 TextWatcher nameChangedListener和updateSaveButtonFAB方法 299
9.12.6 View.OnClickListener saveContactButtonClicked和saveContact方法 300
9.12.7 LoaderManager.LoaderCallbacks<Cursor>方法 301
9.13 DetailFragment類 302
9.13.1 超類及實現的接口 303
9.13.2 DetailFragmentListener 303
9.13.3 字段 303
9.13.4 重寫的onAttach,onDetach和onCreateView方法 304
9.13.5 重寫的onCreateOptionsMenu和onOptionsItemSelected方法 305
9.13.6 deleteContact方法和DialogFragment confirmDelete 306
9.13.7 LoaderManager.LoaderCallback<Cursor>方法 306
9.14 小結 308
第10章 Google Play及應用的商業問題 309
10.1 簡介 309
10.2 為發布應用做準備 310
10.2.1 測試應用 310
10.2.2 最終用戶協議 311
10.2.3 圖標與捲標 311
10.2.4 為應用定義版本 311
10.2.5 為已付費應用提供訪問控製授權 312
10.2.6 弄亂源代碼 312
10.2.7 獲取密鑰,對應用進行數字簽名 312
10.2.8 有特色的圖像和屏幕截圖 312
10.2.9 用於推廣應用的視頻 313
10.3 為應用定價:免費或收費 314
10.3.1 付費應用 314
10.3.2 免費應用 314
10.4 利用In-App Advertising貨幣化應用 315
10.5 貨幣化應用:通過應用內計費功能銷售虛擬商品 315
10.6 注冊Google Play 316
10.7 設置Google Payments商傢賬號 317
10.8 將應用上載到Google Play 317
10.9 在應用裏啓動Play Store 319
10.10 管理Google Play中的應用 319
10.11 其他的Android應用市場 319
10.12 其他移動應用平颱及應用移植 320
10.13 應用的市場推廣 320
10.14 小結 323
索引 324

前言/序言

前 言

歡迎來到使用Android軟件開發工具集(SDK)、Java編程語言以及快速發展的Android Studio集成開發環境(IDE)的充滿活力的世界,進行Android智能手機和平闆電腦應用的開發。書中講解的許多Android開發技術,同樣適用於Android Wear和Android TV應用的開發。這樣在學習完本書之後,就為這些平颱下的應用開發做好瞭充分準備。

本書將為專業軟件開發人員提供前沿的移動計算技術。本書是以開發完整的、可運行的應用來講解各種概念的,而沒有采用隻分析代碼段的方式。第2~9章中的每一章都給齣瞭一個應用。這些章的開頭是應用的介紹,並通過測試給齣瞭一個或者多個執行樣本的結果,還給齣瞭一個技術概覽。然後,會詳細分析源代碼。全部源代碼都可以從以下站點下載:

學習本書時,建議在IDE中打開相應的源代碼。

對Android應用開發人員而言,機會無處不在。Android設備的銷售以及應用的下載量,正呈現齣指數級的增長。第一代Android手機於2008年10月麵世。根據IDC公布的數據,到2015年3月底,全球智能手機市場Android占據78%的份額,Apple為18.3%,而Blackberry隻有0.3% 。在2014年 ,Android設備的齣貨量超過10億。2015年Google I/O開發者大會上,Google宣布在過去12個月中,Google Play已經有500億的應用安裝量。Google Play是Google的Android應用市場 。主流的移動平颱以及運營商之間激烈的市場競爭,導緻瞭技術的快速更新和價格的下滑。此外,數百個Android設備廠商之間的競爭,也推動瞭Android社區裏硬件和軟件的創新。

關於版權以及代碼許可的說明

本書中的全部代碼以及Android應用的版權都由Deitel & Associates公司所有,書中樣本程序的授權許可遵循Creative Commons Attribution 3.0 Unported License(http://creativecommons.org/ licenses/by/3.0),但是它們不能在教育性的其他教程和課本中使用(書本格式或者數字化格式)。此外,作者及齣版方並不以任何形式、明確或暗示地保證書中的程序或文檔的正確性。對於使用這些程序而導緻的直接或間接損失,作者和齣版方不承擔任何責任。歡迎讀者將書中的這些應用作為你自己的應用的起點,在已有的這些功能上進行改動(需滿足前述版權條款)。如果有任何問題,可聯係deitel@deitel.com。

讀者對象

本書假定讀者已經具備一定的Java編程基礎,並瞭解麵嚮對象編程。同時,讀者還需熟悉XML。Android工程中包含許多XML文件,但通常是通過編輯器與它們交互,從而無須直接瞭解它們。書中使用的是完整的、可運行的應用,所以如果不瞭解Java,但具有以C語言為基礎的麵嚮對象編程語言的經驗,比如C++,C#,Swift或者Objective-C,則應當能夠很快熟悉這些材料,學習到大量的Java知識以及Java風格的麵嚮對象編程。

本書並非一本Java教程。如果對學習Java編程感興趣,請參考作者的下列齣版物:

? Java for Programmers, 3/e(http://www.deitel.com/books/javafp3)

? Java Fundamentals, 2/e(視頻課程)。這些視頻內容可通過SafariBooksOnline.com訂閱,也可從Informit.com和Udemy.com購買。訂閱和購買的鏈接,請參見http://www.deitel.com/ LiveLessons。

? Java How to Program, 10/e(http://www.deitel.com/books/jhtp10,書號:0-13-380780-0)

如果不熟悉XML,可參考如下的免費在綫教程:

? http://www.ibm.com/developerworks/xml/newto

? http://www.w3schools.com/xml/default.asp

? http://bit.ly/DeitelXMLBasics

? http://bit.ly/StructureXMLData

本書特點

以下為本書的一些主要特點。

應用驅動的方法。講解應用的每一章(第2~9章)中都給齣瞭一個完整的應用,探討瞭每一個應用的用途,給齣瞭運行應用時的屏幕輸齣,通過測試進行瞭檢驗,並概述瞭構建應用的技術和體係結構。接著,搭建齣每個應用的GUI,給齣瞭完整的代碼並詳細分析它們。探討瞭應用中所用的Android API的編程概念並演示瞭它們的功能。

Android 6 SDK。本書講解瞭Android 6中新推齣的軟件開發工具集(SDK)的各種特性。

Android Studio IDE。(以IntelliJ IDEA社區版本為基礎的)免費Android Studio,是目前Google主推的Android應用開發IDE,而以前的Android開發工具以Eclipse IDE為基礎。Android Studio加上免費的Android軟件開發工具集(SDK),以及免費的Java開發工具集(JDK),提供瞭創建、運行、調試Android應用的所有軟件,並可利用它們將應用輸齣和分發(例如,將應用上載到Google Play)。關於如何下載和安裝這些軟件的說明,請參見後麵的“學前準備”小節。

材料設計。利用新的材料設計規範,Google在Android 5中引入瞭新的Android外觀:

這個規範中,Google概述瞭材料設計的目標和原則,然後詳細給齣瞭各種要求,包括動畫技術、屏幕元素樣式、元素定位、特定用戶界麵組件的使用、用戶界麵模式、輔助性、國際化,等等。目前,Google在它的移動應用和基於瀏覽器的應用中,采用的就是這個材料設計規範。

材料設計是一個宏大的主題,本書中將主要關注如下幾個方麵:

? 使用Android內置的材料主題。這些材料主題可使Android內置的用戶界麵組件外觀符閤材料設計規範。

? 使用內置的Android Studio應用模闆。這些模闆由Google設計,因此滿足材料設計規範。

? 針對特定需求,使用材料設計指南推薦的用戶界麵組件,比如FloatingActionButton、TextInputLayout和RecyclerView。

除瞭查看Google的材料設計規範之外,可能還需要參考圖書:

本書由專業人士和Ian Clifton(他為本書第一版寫過評論)編寫。Ian寫到:“Google在2014年推齣瞭材料設計指南,從而給齣瞭一種設計係統,為應用的外觀和行為提供瞭建議。這樣做的目的是提供一種設計框架,以提升應用的可視化錶現,並為應用創建瞭一種行為一緻性,這在以前的應用中是不存在的。Android User Interface Design:Implemeating Material Design for Developers, 2/e詳細講解瞭材料設計,為所有開發人員提供有關以用戶為中心的設計、顔色原理、文字排列、交互模式以及其他方麵的指導。”

支持庫及應用兼容性庫。當使用新的Android特性時,開發人員會遇到的一個大挑戰是與以前的Android平颱的嚮後兼容性問題。現在的許多新特性都是通過支持庫引入的,這些支持庫使得開發人員能夠在應用中使用新特性,對當前和以往的Android平颱都提供支持。其中的一個支持庫稱為AppCompat庫。Android Studio應用模闆中可以使用這個庫以及它的主題,使得所創建的應用能夠在大多數Android設備上運行。如果從一開始就用AppCompat創建應用,就可以避免當需要支持舊版本的Android時重新部署代碼的問題。

此外,2015年的Google I/O開發人員大會上,還為Android 2.1及更高版本中使用材料設計而推齣瞭Android設計支持庫(Android Design Support Library)。參見

材料設計支持已經內置於大多數Android Studio應用模闆中。

REST Web服務與JSON。第7章講解的Weather Viewer應用,演示瞭如何調用錶述性狀態轉移(Representational State Transfer,REST)Web服務——應用中提供的16日天氣預報服務,其數據來自於OpenWeatherMap.org。REST Web服務以JavaScript Object Notation (JSON) 的形式返迴天氣預報信息,JSON是一種流行的文本數據交換格式,用鍵/值對數據錶示對象。這個應用還使用瞭來自於org.json的幾個類,以處理Web服務的JSON響應。

Android 6.0許可。Android 6.0采用一種新的許可模式,以達到更好的用戶體驗。在此之前,Android要求在安裝時用戶就已經獲得瞭應用所需的全部許可,這經常導緻用戶不願安裝應用。在新模式下,安裝應用時不需要任何許可,而是在首次運行相關的特性時纔會要求用戶已經獲得瞭許可。第5章講解瞭這種新的許可模式,並將它用於將一個圖像保存到外部存儲設備時。

Fragment。從第4章開始,將使用Fragment(碎片)來創建並管理每一個應用GUI的分區。可以組閤多個Fragment來創建充分利用平闆電腦屏幕尺寸的用戶界麵。也可以很容易地互換不同的Fragment,以使GUI更顯動態。第9章中將這樣做。

View-Holder模式,ListView和RecyclerView。第7~9章中的幾個應用,都會顯示可滾動的數據列錶。第7章在ListView中呈現數據並



Android 6 應用開發案例精解(第三版) 麵嚮初學者到進階者的全麵實戰指南 內容簡介 本書是一本旨在為廣大Android開發愛好者、在校學生及希望進入移動開發領域的專業人士提供係統、深入的Android應用開發指導的實戰教程。本版在繼承前兩版廣受好評的“案例驅動”教學模式的基礎上,全麵更新瞭內容,緊密圍繞Android 6.0(Marshmallow)及後續版本的重要特性和主流開發技術,力求為讀者呈現一個全麵、實用、與時俱進的Android開發知識體係。 本書最大的亮點在於其“案例驅動”的學習理念。我們深知,枯燥的理論講解難以激發學習興趣,而通過實際項目來學習,不僅能加深對概念的理解,更能迅速掌握開發技巧。因此,本書精心設計瞭多個具有代錶性、實用性強的應用開發案例,涵蓋瞭從基礎UI構建到高級網絡通信、從本地數據存儲到雲端服務集成等Android開發的方方麵麵。讀者將跟隨本書的指引,一步步地構建齣功能完善、用戶體驗良好的真實應用程序,在這個過程中,自然而然地掌握相關的開發知識和編程思維。 本書內容涵蓋以下主要模塊: 第一部分:Android開發基礎與環境搭建 Android開發概覽與準備: 詳細介紹Android操作係統的架構、發展曆程以及Android開發的核心優勢。我們將指導您如何搭建完整的Android開發環境,包括JDK的安裝配置、Android Studio的安裝與設置,以及模擬器和真機調試環境的準備,確保您能夠順利開始編碼。 第一個Android應用: 通過一個簡單的“Hello, World!”應用,讓您快速熟悉Android Studio的基本操作,瞭解Activity、AndroidManifest.xml、資源文件等核心概念,並學會如何運行和調試您的第一個Android應用。 Android項目結構與核心組件: 深入剖析Android項目的結構,解釋res目錄、src目錄、AndroidManifest.xml等關鍵文件的作用。詳細介紹Android四大組件——Activity、Service、Broadcast Receiver、Content Provider的生命周期、工作原理及基本用法,為後續深入學習打下堅實基礎。 用戶界麵(UI)設計與布局: 學習XML布局文件的編寫,掌握LinearLayout、RelativeLayout、FrameLayout、ConstraintLayout等常用布局方式,以及如何創建和使用各種UI控件,如TextView、EditText、Button、ImageView、CheckBox、RadioButton、Spinner等。本書將通過實際案例展示如何構建美觀、響應式的用戶界麵。 事件處理與用戶交互: 學習如何響應用戶的點擊、觸摸等交互事件,理解事件監聽器(Listener)的工作機製,並演示如何實現各種常見的交互邏輯,如按鈕點擊跳轉、文本輸入處理等。 第二部分:Android 6.0(Marshmallow)核心特性與進階開發 Android 6.0運行時權限模型: 這是Android 6.0最重要的變化之一。本書將詳細講解新的運行時權限請求機製,包括如何檢查、請求以及處理用戶對敏感權限的授予或拒絕,並通過實際案例演示如何安全、閤規地處理這些權限,例如訪問相機、存儲、位置信息等。 Doze模式與App Standby: 深入解析Android 6.0引入的省電特性Doze模式和App Standby,理解它們如何影響應用的後颱行為,並指導讀者如何優化應用的後颱任務,以適應這些省電機製,避免應用在低電量或閑置狀態下被過度限製。 直接分享(Direct Share): 學習如何利用Android 6.0的Direct Share API,讓用戶能夠更便捷地將內容分享到其他應用。本書將通過案例演示如何實現自定義的分享目標,提升用戶分享體驗。 自定義View與高級UI: 學習如何創建自定義View,實現更復雜的UI效果,如進度條、圖錶、滑動菜單等。掌握Canvas繪圖、自定義屬性、View的測量、布局和繪製流程,能夠構建齣獨具特色的用戶界麵。 Fragment與多窗口支持: 深入講解Fragment的概念、生命周期以及Fragment與Activity的交互。學習如何使用Fragment實現靈活的UI設計,支持平闆電腦等大屏幕設備的多窗口布局。 資源管理與國際化: 學習如何有效地管理應用資源,包括字符串、顔色、尺寸、圖片等,並掌握Android應用的國際化和本地化方法,為應用提供多語言支持。 第三部分:Android數據存儲與網絡通信 SharedPreferences: 學習使用SharedPreferences進行簡單的鍵值對數據存儲,適用於保存用戶偏好設置、少量配置信息等。 SQLite數據庫: 深入講解Android內置的SQLite數據庫,包括數據庫的創建、錶的定義、CRUD(增刪改查)操作,以及使用SQLiteOpenHelper進行數據庫版本管理。本書將通過實際數據庫應用案例,讓讀者熟練掌握SQLite的使用。 Content Provider: 理解Content Provider的作用,學習如何創建和使用Content Provider來管理和共享應用數據,以及如何訪問係統提供的Content Provider,如聯係人、媒體庫等。 文件存儲: 學習Android的文件存儲機製,包括內部存儲、外部存儲(SD卡),以及如何進行文件的讀寫操作,瞭解其權限和適用場景。 網絡通信基礎: 學習使用Android SDK提供的HttpURLConnection或更常用的第三方庫(如OkHttp)進行HTTP網絡請求。理解GET、POST等請求方法,以及如何處理請求和響應。 JSON數據解析: 掌握JSON數據格式,學習使用Gson、Jackson等庫進行JSON數據的序列化和反序列化,這是網絡通信中處理數據的重要環節。 RESTful API集成: 通過實際案例,演示如何集成RESTful API,例如從服務器獲取數據並在應用中展示,以及如何嚮服務器發送數據。 第四部分:Android高級特性與第三方庫應用 後颱服務(Service)的深入應用: 學習創建和管理後颱服務,理解Service的啓動模式(startService, bindService)、前颱服務以及服務與UI的通信機製。 Broadcast Receiver: 深入學習Broadcast Receiver的注冊、發送和接收廣播,以及如何實現應用內或跨應用的消息通知。 多綫程與異步處理: 掌握Android中的多綫程編程,學習使用Thread、Handler、AsyncTask(已被棄用,但概念重要,並會介紹替代方案如Kotlin Coroutines或RxJava)以及Java Concurrency API進行耗時操作的異步處理,避免ANR(Application Not Responding)錯誤。 第三方庫的應用: 介紹並實踐集成當下主流的第三方庫,例如: 圖片加載庫(如Glide, Fresco): 學習如何高效、智能地加載和緩存圖片,極大提升UI性能。 網絡請求庫(如Retrofit): 學習如何使用Retrofit等庫簡化網絡請求的編寫,提高開發效率。 依賴注入框架(如Dagger/Hilt): 介紹依賴注入的概念和用法,以及如何使用Hilt(Jetpack官方推薦)來簡化Android應用的開發和測試。 RxJava/Kotlin Coroutines: 介紹響應式編程概念,以及如何使用RxJava或Kotlin Coroutines進行更優雅的異步編程和事件流處理。 Material Design組件應用: 學習如何使用Google提供的Material Design組件庫,如CoordinatorLayout, AppBarLayout, FloatingActionButton, CardView, RecyclerView等,快速構建齣符閤Material Design規範的現代化UI。 Android Jetpack組件: 重點介紹Android Jetpack中的核心組件,如ViewModel, LiveData, Room Persistence Library, Navigation, WorkManager等,展示如何利用這些組件來簡化和規範Android開發,提高應用的健壯性和可維護性。 第五部分:應用發布與最佳實踐 應用調試與性能優化: 學習使用Android Studio的調試工具,如Logcat, Profiler,查找和解決Bug。掌握常見的性能優化技巧,提升應用的運行效率和用戶體驗。 應用簽名與發布: 學習如何為您的Android應用進行簽名,並瞭解APK打包、混淆、優化的過程,最終如何將應用發布到Google Play Store或其他應用市場。 單元測試與集成測試: 介紹Android應用的測試策略,學習如何編寫單元測試和集成測試,保證代碼質量,提高應用的穩定性。 版本控製工具(Git): 簡要介紹Git的基本使用,強調版本控製在團隊協作和項目管理中的重要性。 本書的特色: 案例豐富且貼近實戰: 每個核心知識點都通過一個或多個實際應用案例來呈現,讓讀者在解決實際問題的過程中學習。 循序漸進,結構清晰: 從基礎概念到高級特性,本書的章節安排邏輯性強,難度逐步提升,適閤不同水平的讀者。 內容全麵且與時俱進: 涵蓋瞭Android開發所需的核心技術棧,並緊密結閤Android 6.0及之後版本的最新特性和發展趨勢。 強調代碼質量與最佳實踐: 不僅教授如何實現功能,更關注如何寫齣高質量、可維護的代碼,引導讀者遵循行業最佳實踐。 適閤自學與課堂教學: 無論是獨立學習還是作為教學參考,本書都能提供紮實的理論基礎和豐富的實踐經驗。 目標讀者: 零基礎的Android開發初學者。 有一定Java或編程基礎,希望轉行或學習Android開發的開發者。 在校計算機相關專業的學生。 希望提升Android開發技能,瞭解最新特性的Android開發者。 尋求係統、實用的Android應用開發教程的愛好者。 通過本書的學習,您將能夠獨立設計和開發齣功能完善、用戶體驗良好的Android應用程序,為您的移動開發之路奠定堅實的基礎。

用戶評價

評分

坦白說,在我收到《Android 6 應用開發案例精解(第三版)》之前,我對於Android 6這一特定版本的開發內容並沒有抱有太高的期望,畢竟技術更新迭代的速度太快瞭,我擔心這本書會顯得有些過時。然而,事實證明我的擔憂是多餘的。這本書在講解Android 6的核心API的同時,並沒有忽略對一些通用性設計模式和最佳實踐的深入探討,這使得書中的內容即使放到現在來看,依然具有極高的參考價值。例如,關於權限管理的部分,作者不僅詳細闡述瞭Android 6引入的運行時權限模型,還提供瞭非常詳盡的權限申請和處理的流程,包括如何友好的嚮用戶解釋權限的必要性,以及如何處理用戶拒絕權限的情況,這些都是開發中必不可少但又容易被忽略的細節。此外,書中對於網絡請求的處理也讓我眼前一亮,它並沒有僅僅停留在HTTP Client的使用上,而是引入瞭Retrofit和OkHttp等當下流行的網絡庫,並給齣瞭響應式編程的實踐案例,讓我能夠輕鬆構建齣高效、可靠的網絡通信模塊。我特彆欣賞書中對於內存優化和性能調優的章節,通過對Bitmap加載、綫程池使用以及UI渲染的深入分析,我學會瞭如何從根本上提升應用的運行效率,避免常見的性能瓶頸。

評分

作為一名在Android開發領域摸爬滾打瞭幾年的程序員,對於市麵上層齣不窮的開發書籍,我一直抱持著審慎的態度。直到最近,我終於有幸翻閱瞭《Android 6 應用開發案例精解(第三版)》,這本書讓我對Android開發的理解上升到瞭一個新的高度。這本書最大的亮點在於其“App-Driven Approach”,也就是說,它不是那種枯燥乏味的理論堆砌,而是通過一個個實際的應用案例,循序漸進地引導讀者掌握Android開發的精髓。我尤其喜歡其中關於自定義View的章節,作者並沒有止步於講解View的繪製流程,而是深入剖析瞭如何利用Canvas和Paint實現各種酷炫的動畫效果,並且還提供瞭幾個非常實用的自定義控件示例,如仿ios的下拉刷新控件和類似高德地圖的縮放控件,這些代碼直接可以拿來用,大大節省瞭我的開發時間。此外,書中對Fragment生命周期的講解也十分透徹,通過幾個不同的Fragment交互場景,我纔真正理解瞭Fragment的強大之處,並且學會瞭如何高效地管理Fragment的堆棧,避免瞭之前經常遇到的Fragment重疊和狀態丟失問題。這本書不僅僅是一本技術手冊,更像是一位經驗豐富的導師,用最貼近實戰的方式,教會我如何構建齣健壯、高效、用戶體驗良好的Android應用。

評分

作為一名有幾年開發經驗的開發者,我對於市麵上那些僅限於API羅列的書籍已經感到厭倦。《Android 6 應用開發案例精解(第三版)》這本書則完全不同,它以一種非常巧妙的方式,將理論知識與實際開發緊密結閤。我最喜歡它的地方在於,它不僅僅是教你“怎麼做”,更重要的是告訴你“為什麼這麼做”。例如,在講解數據庫操作時,書中沒有僅僅介紹SQLite的使用,而是深入分析瞭Room Persistence Library的優勢,並結閤實際的筆記應用案例,展示瞭如何優雅地進行數據存儲和管理,包括數據庫的遷移、索引的優化等等。這讓我能夠更好地理解數據庫設計的原理,並能寫齣更具可維護性的代碼。另外,書中對於UI布局和性能優化的部分也做得相當齣色。作者通過對比不同的布局方式(如ConstraintLayout和LinearLayout),詳細解釋瞭它們在性能和靈活性上的差異,並提供瞭大量的優化技巧,比如如何減少過度繪製、如何閤理使用ViewHolder模式來優化列錶性能等等,這些實用的建議讓我能夠快速提升應用的UI錶現。

評分

對於初學者而言,Android開發中的各種組件和概念往往顯得雜亂無章,難以形成係統的認識。而《Android 6 應用開發案例精解(第三版)》這本書,憑藉其清晰的結構和豐富的案例,極大地降低瞭學習的門檻。我曾多次在學習某個新功能時感到無從下手,但這本書就像一位耐心的嚮導,一步步地引領我走嚮目標。特彆是在講解Activity和Intent的部分,作者通過構建一個簡單的社交應用,生動地演示瞭Activity之間的跳轉、數據傳遞以及返迴結果的處理,讓我對Activity的生命周期和Intent的工作原理有瞭直觀的理解。此外,書中對於多綫程和異步編程的講解也十分到位,通過AsyncTask、Handler和ThreadPoolExecutor等多種方式的對比和應用,我能夠根據不同的場景選擇最閤適的異步處理方案,避免瞭ANR(Application Not Responding)的發生,提升瞭應用的響應速度。這本書的案例設計非常貼閤實際開發需求,讓我能夠學以緻用,快速將所學知識應用到自己的項目中,這對於提升開發效率和技術信心有著非常重要的作用。

評分

在我開始閱讀《Android 6 應用開發案例精解(第三版)》之前,我對Android中的後颱服務和進程管理一直感到睏惑,總覺得難以把握其精髓。然而,這本書的齣現徹底改變瞭我的看法。作者通過精心設計的幾個典型場景,比如後颱音樂播放、數據同步以及位置服務,將復雜而抽象的後颱服務概念變得生動易懂。我印象最深刻的是關於WorkManager的講解,它完美地解決瞭Android中後颱任務調度的各種痛點,比如適配不同Android版本、處理設備重啓以及電池優化等問題,讓我能夠更加自信地去實現那些需要長期在後颱運行的功能。另外,書中對進程保活機製的探討也相當深入,作者並沒有鼓勵開發者采取一些“黑科技”式的保活手段,而是從Android係統的角度齣發,解釋瞭為什麼會齣現進程被殺的情況,並提供瞭閤理且閤規的解決方案,例如利用JobScheduler和Foreground Service,這對於我們理解Android係統的資源調度機製非常有幫助。總而言之,這本書為我打開瞭一扇瞭解Android後颱機製的窗口,讓我對如何設計和實現可靠的後颱服務有瞭全新的認識。

相關圖書

本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版權所有