Android Studio开发实战:从零基础到App上线(第2版)

更多详情

内容简介: 本书是一部Android开发的实战教程,由浅入深、由基础到高级,带领读者一步一步走进App开发的神奇世界。
全书共分为16章。其中,前8章是基础部分,主要讲解Android Studio的环境搭建、App开发的各种常用控件、App的数据存储方式、如何调试App并将App发布上线;后8章是进阶部分,主要讲解App开发的设备操作、网络通信、事件、动画、多媒体、融合技术、第三方开发包、性能优化等。书中在讲解知识点的同时给出了大量实战范例,方便读者迅速将所学的知识运用到实际开发中。通过本书的学习,读者能够掌握3类主流App的基本开发技术,包括购物App(电子商务)、聊天App(即时通信)、打车App(交通出行)。另外,能够学会开发一些趣味应用,包括简单计算器、房贷计算器、万年历、日程表、手机安全助手、指南针、卫星浑天仪、应用超市、抠图工具、全景图库、动感影集、影视播放器、音乐播放器、WiFi共享器、电子书架等。
本书适用于Android开发的广大从业者、有志于转型App开发的程序员、App开发的业余爱好者,也可作为大中专院校与培训机构的Android课程教材。

目录:     录
第1章  Android Studio环境搭建    1
1.1  Android Studio简介    1
1.2  Android Studio的安装    2
1.2.1  开发机配置要求    2
1.2.2  安装依赖的软件    2
1.2.3  安装Android Studio    3
1.2.4  下载Android的SDK    5
1.3  运行小应用Hello World    6
1.3.1  创建新项目    6
1.3.2  编译项目/模块    8
1.3.3  创建模拟器    9
1.3.4  在模拟器上运行App    9
1.4  App的工程结构    11
1.4.1  工程目录说明    11
1.4.2  编译配置文件build.gradle    12
1.4.3  App运行配置AndroidManifest.xml    13
1.4.4  在代码中操纵控件    14
1.5  准备开始    15
1.5.1  使用快捷键    15
1.5.2  安装SVN工具    16
1.5.3  安装常用插件    17
1.5.4  导入已经存在的工程    19
1.5.5  新建一个Activity页面    20
1.6  小结    22
第2章  初级控件    23
2.1  屏幕显示    23
2.1.1  像素    23
2.1.2  颜色    25
2.1.3  屏幕分辨率    26
2.2  简单布局    27
2.2.1  视图View的基本属性    27
2.2.2  线性布局LinearLayout    30
2.2.3  滚动视图ScrollView    32
2.3  简单控件    34
2.3.1  文本视图TextView    34
2.3.2  按钮Button    37
2.3.3  图像视图ImageView    39
2.3.4  图像按钮ImageButton    43
2.4  图形基础    45
2.4.1  图形Drawable    45
2.4.2  状态列表图形    46
2.4.3  形状图形    47
2.4.4  九宫格图片    50
2.5  实战项目:简单计算器    53
2.5.1  设计思路    53
2.5.2  小知识:日志Log/提示Toast    55
2.5.3  代码示例    56
2.6  小结    57
第3章  中级控件    59
3.1  其他布局    59
3.1.1  相对布局RelativeLayout    59
3.1.2  框架布局FrameLayout    63
3.2  特殊按钮    64
3.2.1  复选框CheckBox    64
3.2.2  开关按钮Switch    65
3.2.3  单选按钮RadioButton    66
3.3  适配视图基础    68
3.3.1  下拉框Spinner    68
3.3.2  数组适配器ArrayAdapter    69
3.3.3  简单适配器SimpleAdapter    70
3.4  编辑框    72
3.4.1  文本编辑框EditText    72
3.4.2  自动完成编辑框AutoCompleteTextView    77
3.5  活动Activity基础    78
3.5.1  Activity的生命周期    78
3.5.2  使用Intent传递消息    83
3.5.3  向下一个Activity传递参数    85
3.5.4  向上一个Activity返回参数    86
3.6  实战项目:房贷计算器    89
3.6.1  设计思路    89
3.6.2  小知识:文本工具TextUtils    90
3.6.3  代码示例    91
3.7  实战项目:登录App    93
3.7.1  设计思路    93
3.7.2  小知识:提醒对话框AlertDialog    94
3.7.3  代码示例    96
3.8  小结    98
第4章  数据存储    100
4.1  共享参数SharedPreferences    100
4.1.1  共享参数的基本用法    100
4.1.2  实现记住密码功能    102
4.2  数据库SQLite    103
4.2.1  SQLite的基本用法    103
4.2.2  数据库帮助器SQLiteOpenHelper    104
4.2.3  优化记住密码功能    110
4.3  SD卡文件操作    112
4.3.1  SD卡的基本操作    112
4.3.2  公有存储空间与私有存储空间    114
4.3.3  文本文件读写    115
4.3.4  图片文件读写    116
4.4  应用Application基础    118
4.4.1  Application的生命周期    118
4.4.2  利用Application操作全局变量    119
4.5  内容提供与处理    121
4.5.1  内容提供器ContentProvider    121
4.5.2  内容解析器ContentResolver    123
4.5.3  内容观察器ContentObserver    128
4.6  实战项目:购物车    131
4.6.1  设计思路    131
4.6.2  小知识:菜单Menu    132
4.6.3  代码示例    136
4.7  小结    139
第5章  高级控件    140
5.1  日期时间控件    140
5.1.1  日期选择器DatePicker    140
5.1.2  时间选择器TimePicker    142
5.2  列表类视图    144
5.2.1  基本适配器BaseAdapter    144
5.2.2  列表视图ListView    148
5.2.3  网格视图GridView    154
5.3  翻页类视图    158
5.3.1  翻页视图ViewPager    158
5.3.2  翻页标题栏PagerTitleStrip/PagerTabStrip    161
5.3.3  简单的启动引导页    163
5.4  碎片Fragment    166
5.4.1  静态注册    166
5.4.2  动态注册/碎片适配器FragmentStatePagerAdapter    170
5.4.3  改进的启动引导页    173
5.5  广播Broadcast基础    175
5.5.1  发送/接收临时广播    176
5.5.2  定时器AlarmManager    178
5.6  实战项目:万年历    180
5.6.1  设计思路    180
5.6.2  小知识:月份选择器MonthPicker    181
5.6.3  代码示例    183
5.7  实战项目:日程表    184
5.7.1  设计思路    184
5.7.2  小知识:震动器Vibrator    185
5.7.3  代码示例    185
5.8  小结    187
第6章  自定义控件    188
6.1  自定义视图    188
6.1.1  声明属性    188
6.1.2  构造对象    191
6.1.3  测量尺寸    192
6.1.4  宽高尺寸的动态调整    195
6.1.5  绘制视图    198
6.2  自定义动画    204
6.2.1  任务Runnable    204
6.2.2  下拉刷新动画    205
6.2.3  圆弧进度动画    207
6.3  自定义对话框    208
6.3.1  对话框Dialog    208
6.3.2  改进的日期对话框    209
6.3.3  自定义多级对话框    213
6.4  自定义通知栏    214
6.4.1  通知推送Notification    214
6.4.2  进度条ProgressBar    218
6.4.3  远程视图RemoteViews    220
6.4.4  自定义通知的文本颜色设定    223
6.5  服务Service基础    225
6.5.1  Service的生命周期    225
6.5.2  推送服务到前台    229
6.6  实战项目:手机安全助手    230
6.6.1  设计思路    230
6.6.2  小知识:应用包管理器PackageManager    232
6.6.3  代码示例    234
6.7  小结    235
第7章  组合控件    236
7.1  标签栏    236
7.1.1  标签按钮    236
7.1.2  实现底部标签栏    238
7.2  导航栏    246
7.2.1  工具栏Toolbar    246
7.2.2  溢出菜单OverflowMenu    248
7.2.3  搜索框SearchView    250
7.2.4  标签布局TabLayout    253
7.3  横幅条    260
7.3.1  自定义指示器    260
7.3.2  实现横幅轮播Banner    263
7.3.3  仿京东顶到状态栏的Banner    267
7.4  增强型列表    271
7.4.1  循环视图RecyclerView    271
7.4.2  布局管理器LayoutManager    275
7.4.3  动态更新循环视图    280
7.5  材质设计库    282
7.5.1  协调布局CoordinatorLayout    282
7.5.2  应用栏布局AppBarLayout    285
7.5.3  可折叠工具栏布局CollapsingToolbarLayout    287
7.6  实战项目:仿支付宝的头部伸缩特效    290
7.6.1  设计思路    291
7.6.2  小知识:导航栏的滚动标志    292
7.6.3  代码示例    293
7.7  实战项目:仿淘宝主页    298
7.7.1  设计思路    298
7.7.2  小知识:下拉刷新布局SwipeRefreshLayout    299
7.7.3  代码示例    303
7.8  小结    305
第8章  调试与上线    306
8.1  调试工作    306
8.1.1  模拟器调试    306
8.1.2  真机调试    311
8.1.3  导出APK安装包    313
8.2  准备上线    315
8.2.1  版本设置    315
8.2.2  上线模式    316
8.2.3  数据加密    320
8.3  安全加固    325
8.3.1  反编译    325
8.3.2  代码混淆    327
8.3.3  第三方加固及重签名    329
8.4  发布到应用商店    331
8.4.1  注册开发者账号    331
8.4.2  创建并提交应用    332
8.5  小结    334
第9章  设备操作    335
9.1  摄像头    335
9.1.1  表面视图SurfaceView    335
9.1.2  使用Camera拍照    337
9.1.3  纹理视图TextureView    343
9.1.4  使用Camera 2拍照    344
9.1.5  运行时动态授权管理    346
9.2  麦克风    349
9.2.1  拖动条SeekBar    349
9.2.2  音量控制    350
9.2.3  录音与播音    352
9.2.4  录像与放映    360
9.3  传感器    362
9.3.1  传感器的种类    362
9.3.2  摇一摇——加速度传感器    364
9.3.3  指南针——磁场传感器    365
9.3.4  计步器、感光器和陀螺仪    368
9.4  手机定位    370
9.4.1  开启定位功能    371
9.4.2  获取定位信息    373
9.5  短距离通信    378
9.5.1  NFC近场通信    378
9.5.2  红外遥控    384
9.5.3  蓝牙BlueTooth    388
9.6  实战项目:仿微信的发现功能    395
9.6.1  设计思路    395
9.6.2  小知识:全球卫星导航系统    397
9.6.3  代码示例    399
9.7  小结    406
第10章  网络通信    407
10.1  多线程    407
10.1.1  消息传递Message    407
10.1.2  进度对话框ProgressDialog    411
10.1.3  异步任务AsyncTask    414
10.1.4  异步服务IntentService    420
10.2  HTTP接口访问    423
10.2.1  网络连接检查    423
10.2.2  移动数据格式JSON    425
10.2.3  JSON串与实体类自动转换    427
10.2.4  HTTP接口调用    428
10.2.5  HTTP图片获取    432
10.3  上传和下载    434
10.3.1  下载管理器DownloadManager    435
10.3.2  文件对话框    441
10.3.3  文件上传    442
10.4  套接字Socket    445
10.4.1  网络地址InetAddress    445
10.4.2  Socket通信    446
10.5  实战项目:仿应用宝的应用更新功能    451
10.5.1  设计思路    451
10.5.2  小知识:查看APK文件的包信息    452
10.5.3  代码示例    454
10.6  实战项目:仿手机QQ的聊天功能    457
10.6.1  设计思路    457
10.6.2  小知识:可折叠列表视图ExpandableListView    459
10.6.3  代码示例    464
10.7  小结    468
第11章  事件    469
11.1  按键事件    469
11.1.1  检测软键盘    469
11.1.2  检测物理按键    472
11.1.3  音量调节对话框    474
11.2  触摸事件    479
11.2.1  手势事件的分发流程    479
11.2.2  手势事件处理MotionEvent    483
11.2.3  手写签名    486
11.3  手势检测    488
11.3.1  手势检测器GestureDetector    488
11.3.2  飞掠视图ViewFlipper    491
11.3.3  手势控制横幅轮播    494
11.4  手势冲突处理    498
11.4.1  上下滚动与左右滑动的冲突处理    498
11.4.2  内部滑动与翻页滑动的冲突处理    501
11.4.3  正常下拉与下拉刷新的冲突处理    506
11.5  实战项目:抠图神器——美图变变    510
11.5.1  设计思路    510
11.5.2  小知识:二维图像的基本加工    511
11.5.3  代码示例    512
11.6  实战项目:虚拟现实的全景图库    514
11.6.1  设计思路    514
11.6.2  小知识:三维图形接口OpenGL    516
11.6.3  代码示例    529
11.7  小结    532
第12章  动画    534
12.1  帧动画    534
12.1.1  帧动画的实现    534
12.1.2  显示GIF动画    536
12.1.3  淡入淡出动画    538
12.2  补间动画    539
12.2.1  补间动画的种类    539
12.2.2  补间动画的原理    544
12.2.3  集合动画    547
12.2.4  在飞掠横幅中使用补间动画    549
12.3  属性动画    551
12.3.1  属性动画的用法    551
12.3.2  属性动画组合    555
12.3.3  插值器和估值器    557
12.4  矢量动画    561
12.4.1  矢量图形    561
12.4.2  可缩放矢量图形SVG标记    563
12.4.3  利用属性动画实现矢量动画    565
12.4.4  仿支付宝的支付成功动画    568
12.5  动画的实现手段    572
12.5.1  使用延时重绘    572
12.5.2  设置状态参数    574
12.5.3  滚动器Scroller    575
12.6  实战项目:仿QQ空间的动感影集    577
12.6.1  设计思路    577
12.6.2  小知识:画布的绘图层次    578
12.6.3  代码示例    583
12.7  小结    584
第13章  多媒体    585
13.1  相册    585
13.1.1  画廊Gallery    585
13.1.2  图像切换器ImageSwitcher    589
13.1.3  图片查看器——青青相册    592
13.2  音频播放    596
13.2.1  铃声Ringtone    596
13.2.2  声音池SoundPool    599
13.2.3  音轨录播AudioTrack    602
13.3  视频播放    605
13.3.1  视频视图VideoView    606
13.3.2  媒体控制条MediaController    609
13.3.3  自定义播放控制条    611
13.4  多窗口    613
13.4.1  分屏——多窗口模式    614
13.4.2  画中画——特殊的多窗口    617
13.4.3  自定义悬浮窗    619
13.4.4  截图和录屏    624
13.5  实战项目:影视播放器——爱看剧场    626
13.5.1  设计思路    626
13.5.2  小知识:竖屏与横屏切换    627
13.5.3  代码示例    630
13.6  实战项目:音乐播放器——浪花音乐    634
13.6.1  设计思路    634
13.6.2  小知识:可变字符串SpannableString    636
13.6.3  代码示例    639
13.7  小结    644
第14章  融合技术    646
14.1  网页集成    646
14.1.1  资产管理器AssetManager    646
14.1.2  网页视图WebView    648
14.1.3  简单浏览器    651
14.2  JNI开发    658
14.2.1  NDK环境搭建    658
14.2.2  创建JNI接口    661
14.2.3  JNI实现加解密    666
14.3  局域网共享    669
14.3.1  无线网络管理器WifiManager    670
14.3.2  连接指定WiFi    671
14.3.3  开关热点    672
14.3.4  点对点蓝牙传输    674
14.4  实战项目:共享经济弄潮儿——WiFi共享器    683
14.4.1  设计思路    683
14.4.2  小知识:NetBIOS协议    684
14.4.3  代码示例    688
14.5  实战项目:笔墨飘香之电子书架    693
14.5.1  设计思路    693
14.5.2  小知识:PDF文件渲染器PdfRenderer    694
14.5.3  代码示例    696
14.6  小结    701
第15章  第三方开发包    702
15.1  地图SDK    702
15.1.1  查看签名信息    702
15.1.2  百度地图    704
15.1.3  高德地图    710
15.2  分享SDK    714
15.2.1  QQ分享    715
15.2.2  微信分享    716
15.3  支付SDK    721
15.3.1  支付宝支付    721
15.3.2  微信支付    723
15.4  语音SDK    724
15.4.1  文字转语音TextToSpeech    724
15.4.2  语音识别    729
15.4.3  语音合成    733
15.5  实战项目:仿滴滴打车    734
15.5.1  设计思路    734
15.5.2  小知识:评分条RatingBar    735
15.5.3  代码示例    738
15.6  小结    739
第16章  性能优化    741
16.1  布局文件优化    741
16.1.1  减少重复布局    741
16.1.2  自适应调整布局    744
16.1.3  自定义窗口主题    746
16.2  内存泄漏处理    748
16.2.1  内存泄漏的检测    748
16.2.2  内存泄漏的发生    749
16.2.3  内存泄漏的预防    755
16.3  线程池管理    758
16.3.1  普通线程池    758
16.3.2  定时器线程池    760
16.4  省电模式    761
16.4.1  检测当前电量    761
16.4.2  检测屏幕开关    763
16.4.3  休眠模式对App的影响    765
16.5  实战项目:网络图片缓存框架    768
16.5.1  设计思路    768
16.5.2  小知识:LRU缓存策略    769
16.5.3  代码示例    772
16.6  小结    780
附录    781
附录一  仿流行App的常用功能    781
附录二  Android各版本的新增功能说明    782
附录三  手机硬件与App开发的关联    784
附录四  专业术语索引    785


前言: 再版前言
时光荏苒犹如白驹过隙,转瞬之间本书离初版已近两年,在此期间信息科技的快速发展令人目不暇接。物联网方兴未艾,虚拟现实潮起潮落,共享经济遍地开花,人工智能火得一塌糊涂,第四次工业革命蓄势待发,而移动互联网从狂飙回归到常态。
单就App开发而言,安卓系统版本从2016年的Android 7到2017年的Android 8再到2018年的Android 9,Android Studio的版本也从2016年的2.2更新到2.3、3.0、3.1直到2018年的3.2,同时Android的开发语言除了Java以外又多了一个Kotlin。从应用场景来说,早期只运行于手机和平板电脑的安卓系统,现在逐步拓展到了互联网电视、可穿戴设备、车载终端、智能家居等其他设备之上。而搭载安卓系统的智能手机,也从仅含通话、上网等基本功能的通信工具,逐渐演化成集拍照、定位、社交、支付等生活服务为一身的全能小秘书。
有鉴于此,本书亟需补充这期间风起云涌的新技术新知识,以跟上时代发展的滔滔浪潮。种种机缘际会,加上第一版读者的热忱建议,因此便有了重新修订之后的本书第二版问世。第二版图书不是第一版的简单更新,而是百炼成钢的全面升级,与第一版相比,第二版图书主要有以下五处重要的增补变化:
1.工具更新颖
第二版的App开发全部基于Android 9.0环境,使用的开发工具为2018年9月发布的Android Studio 3.2,JNI用到的NDK则为2018年6月发布的r17c。相关的功能点都根据上述最新版本的工具展开论述,比如Android 8新增的画中画功能、Android 9新增的WebP动图播放、Android Studio 3新增的内存用量查看窗口,以及NDK的r17不再支持ARM5(armeabi)的so文件编译等。
2.技术更先进
移动互联网的后继发展方向如物联网、虚拟现实、人工智能等如火如荼,第二版为此投入了大量笔墨深入描述相关技术细节,例如物联网涉及到的二维码、NFC、红外、蓝牙等,虚拟现实涉及到的陀螺仪、三维图形、全景照片等,人工智能涉及到的TTS、语音识别、语音合成等,还有最新科研成果如北斗导航、SM3国密等,本书都有专门章节加以叙述。
3.案例更丰富
本书的一大特色是突出实战,每章末尾都给出了技术精炼的实战项目。第二版更是将这个优良传统发扬光大,除了原有的十几个实战项目之外,又对房贷计算器、万年历、影视播放器等开辟专门章节详细描述,另外新增了电商头部、应用超市、全景图库、矢量动画、电子书架等全新的实战项目,力图把常见的App种类一网打尽。
4.代码更易懂
作为一部软件开发方面的专著,少不了给出范例代码进行演示,代码可读易懂的重要性毋庸置疑。第二版在这方面大力改善,首先对书中的代码全面添加注释,务求让读者看得懂、学得会;其次,针对Android不同系统之间的方法差异,分别说明每个版本的代码兼容处理;再次,在实战项目示例中,讲清楚每个代码的业务逻辑,以及它们之间的相互关系。
5.编排更合理
第一版对个别知识点的编排不甚合理,第二版对这些知识点重新组织编排,使之更连贯、更系统。比如内容提供器ContentProvider原来只在第13章做介绍,再版之后将其提前到第4章的数据存储中进行介绍,然后分别在第6章、第10章、第13章的实战项目中加以运用,有助于不断地巩固和提高。又如蓝牙BlueTooth原本只在第14章的一个小节中作介绍,再版之后将其提前到第9章的短距离通信中进行介绍,然后分别在第9章的实战项目蓝牙音箱,以及第14章的蓝牙传输中加以运用,从而拓宽了这些技术的应用场景。
综上所述,经过精心修订的第二版图书,无论是广度还是深度,从数量到质量,都比第一版有了飞跃的提升。全书的写作目的,不但是教会读者怎么快速开发一个好玩、好看、好用的App,更是让读者领略行业前沿的移动互联网学科。深度揭秘流行App背后的手机开发技术,展示移动信息科技的最新工程实践,这才是第二版想要呈献给读者的知识盛宴。
第二版的所有代码都基于Android Studio 3.2开发,并使用API 28的SDK(Android 9.0)编译与调试通过。读者在阅读本书时,若对书中内容有任何疑问,均可在笔者的CSDN博客留言。也可关注笔者的微信公众号
最后,感谢王金柱编辑的热情指点,感谢出版社同仁的辛勤工作,感谢我的家人一直以来的支持,感谢各位师长的谆谆教导,没有他们的鼎力相助,本书就无法顺利完成。
                                                                 欧阳燊
                                                               2018年10月