《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误[通俗易懂]

《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误[通俗易懂]资源下载下面是《AndroidStudio开发实战从零基础到App上线(第2版)》一书用到的工具和代码资源:1、本书使用的AndroidStudio版本为3.2,最新的安装包可前往Android官网页面下载。2、本书使用的AndroidNDK版本为r17,最新的安装包可前往Android官网页面下载。3、本书提供所有示例源码的demo工程下载,源码(适配Android4.1到9….

大家好,又见面了,我是你们的朋友全栈君。

资源下载

下面是《Android Studio开发实战 从零基础到App上线(第2版)》一书用到的工具和代码资源:
1、本书使用的Android Studio版本为3.2,最新的安装包可前往Android官网页面下载
2、本书使用的Android NDK版本为r17,最新的安装包可前往Android官网页面下载
3、本书提供所有示例源码的demo工程下载,源码(适配Android4.1到9.0和Android Studio 3.2到3.4)的下载页面为https://pan.baidu.com/s/14NE2DD-frXxuDXUAlTfRaw。最新的源码也可访问我的github获取,github地址是https://github.com/aqi00/android2,服务端的github地址是https://github.com/aqi00/net_server。(部分地区如新疆既访问不了百度网盘也访问不了github,此时可访问csdn的下载页面获取源码https://download.csdn.net/download/aqi00/11223223)。另外,AS3.4之后默认开了androidx,如需获取适配了androidx的本书源码,可访问这个github页面https://github.com/aqi00/androidx
有的读者反映从github下载本书源码很慢,或者下载不完整,这是国外服务器连接不稳定造成的。建议访问这个代下载网站https://d.serctl.com/,按照网站左上角的“如何下载教程”,找到本书源码的github下载地址并提交,等待几秒后就能在该网站下载完整的源码了。
源码与各章的对应关系表见下图:

《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误[通俗易懂]

4、本书提供配套的ppt课件下载,第二版课件的下载页面为https://www.jianguoyun.com/p/DX7Y1J4QlP6kCBiUoIkD
5、本书第8章使用了一些反编译和重签名工具,这些工具的下载页面是https://pan.baidu.com/s/1EzDMLNdTdh2pDO7NBMiiww (提取码93i5)

参考资料

1、学习本书需要具备Java基础,所谓“零基础”指的是安卓零基础,如果您没学过Java的话,可学习以下系列的Java教程《Java开发笔记》
2、由于篇幅所限,本书只覆盖了较为常见的Android开发技术,其余的Android开发技术可参考以下的Android笔记《Android开发笔记》
3、本书的技术实现采用的是Java编码,若您想进一步了解App开发中的Kotlin编程技术,可阅读以下系列的Kotlin教程《Kotlin入门教程》
4、更多有关本书内容的常见问题参见博文《Android Studio开发实战 从零基础到App上线(第2版)》常见问题解答
5、有关Android8、Android9、Android10的更多代码适配参见博文《Android8.0、9.0、10.0的新特性兼容适配代码修改》。
 

勘误记录

下面对书中的笔误之处进行更正说明:

一、第一批勘误记录(以下的勘误记录在2019年1月的第二次印刷时均已修正):

1、第1页“1.1  Android Studio简介”
该小节第三段第三行“本书使用的Android Studio为2018年4月发布的3.1.2版本”,这里的“4月”改为“9月”,“3.1.2版本”改为“3.2版本”。

2、第428页“10.2.4 HTTP接口访问”
倒数第四行的connect方法,该行后面的“该方法在getOutputStream后调用,在getInputStream前调用。”整个删掉。因为connect方法和getOutputStream方法没有先后调用关系,getOutputStream方法内部会自动调用connect方法。

3、第430页“1. URL串中对汉字的转义处理”
在“具体的转义代码参见本书下载资源的URLtoUTF8.java”这句后面补充“,也可使用系统自带的java.net.URLEncoder和java.net.URLDecoder”。

4、第451页“10.5.1 设计思路”下面的第三行
“于是在打开系统自带的应用宝”,这句前半部分的“”字删掉。

5、第675页“2. 蓝牙设备BluetoothDevice”
表14-6出现了两个BOND_BONDING,要把后面的“BOND_BONDING”改为“BOND_BONDED”。

二、第二批勘误记录(以下的勘误记录在2019年6月的第四次印刷时均已修正):

1、第46页“2.4.1  图形Drawable”
该页中间“开发者拿到一张图片”这段的第二行中“Android Postfix Completion”要改为“Android Drawable Importer”。

2、第447页的“10.4.2  Socket通信”
在“1. Socket”该段下面的方法说明中,“getOutputStream:获取输入流”,这里的“输入流”要改为“输出流”。

3、第650页“14.1.2  网页视图WebView”
该页代码的倒数第七行,把“http://”改为“https://”,也就是添加字母s

4、第654页“14.1.3  简单浏览器”
该页代码的倒数第八行,把“http://”改为“https://”,也就是添加字母s

三、第三批勘误记录(以下的勘误记录在2019年11月的第六次印刷时均已修正):

1、第94页的图3-31,最后一行“2012年07月06日 五年期商贷利率”的数值改为 “6.55%”,原来的6.15%跟2014年的商贷利率重复了。

2、第271页的“7.4.1  循环视图RecyclerView”
该小节第二段第一行的“为了兼容以前的Adnroid版本”,这里的Adnroid拼错了,要改为Android

3、第409页的“10.1.1  消息传递Message”
第6行的注释“// 从布局文件中获取名叫tv_control的文本视图”,这里的“tv_control”改为“tv_message

4、第410页的“10.1.1  消息传递Message”
代码倒数第10行的“下面播放新闻”,这里的“下面”改为“开始”。

四、第四批勘误记录(以下的勘误记录在2020年4月的第八次印刷时均已修正):

1、第225页的“6.5.1  Service的生命周期”
    该节第一段第三行在“App也可以有自己的服务。”后面补充以下红字部分:
App也可以有自己的服务。此时需要在AndroidManifest.xml中添加新服务的Service节点配置,比如:
        <service android:name=”.service.NormalService” />

2、第353页的表9-6
    该表最后两行的说明都是“高效率的高级编码”,需要把最后一行AAC_ELD的说明改为“增强型低延时的高级编码”。
3、第430页的“10.2.4  HTTP接口调用”
    该页中间在“下面用一个阶段性的实战小项目练练手”这句前面补充以下红字部分:
除此之外,从Android9开始默认只能访问以https打头的安全地址,不能直接访问http打头的网络地址。如果应用仍想访问以http开头的普通地址,就得修改AndroidManifest.xml,给application节点添加如下属性,表示继续使用HTTP明文地址:
        android:usesCleartextTraffic=”true”

下面用一个阶段性的实战小项目练练手

五、第五批勘误记录(以下的勘误记录在2020年9月的第九次印刷时均已修正):

1、第21页的“1.5.5  新建一个Activity页面”
该页第一段在“在res\layout下面生成页面布局activity_main2.xml”后面补充以下红字部分:
在res\layout下面生成页面布局activity_main2.xml,还会在AndroidManifest.xml的application节点增加下面一行配置:
        <activity android:name=”.Main2Activity”></activity>

新页面创建之后的工程结构如图1-37所示。

2、第52页的“2.4.4  九宫格图片”
图2-26下面说明文字的第二行,“未拉伸预览”改为“两方向同时拉伸预览

3、第66页的“3.2.2  开关按钮Switch”
表3-2,倒数第二行thumb的说明列改为“设置开关标识的图标”,倒数第一行track的说明列改为“设置开关轨道的背景”,也就是倒数两行的说明文字互换

4、第72页的“3.4.1  文本编辑框EditText”
表3-3,第三行textPassword和第七行numberPassword两行右边的说明列,“星号“*””改为“圆点“•”

5、第83页的“3.5.2  使用Intent传递消息”
表3-5的第六行第三列的“数据类型,用于指定Data类型的定义”,这里的表达比较拗口不易理解,要把“Data类型的定义”改为“消息的数据类型

6、第88页的“3.5.4  向上一个Activity返回参数”
第一段第三行的“如果还要处理一下个页面的应答数据”,这里的“一下个页面”改为“下一个页面

7、第171页的“5.4.2  动态注册/碎片适配器FragmentStatePagerAdapter”
该页第一行“然后在Fragment的onCreateView函数中调用getArguments方获得请求数据”,这里的“getArguments方”改为“getArguments方法”,也就是添加“法”字。

8、第214页的“6.4.1  通知推送Notification”
参数构建方法的第三个方法setUsesChronometer,把“设置是否显示计数器”里面的“计数器”改为“计时器”。

9、第237页的“7.1.1  标签按钮”
该页第二行的“读者还记得第2章”,这里的“第2章”改为“第3章

10、第663页的“14.2.2  创建JNI接口”
“具体的编译配置修改说明如下”这句后面的代码有若干处需要修改,修改之处见下面的红字:
android {

    compileSdkVersion 28
    buildToolsVersion “28.0.3″

    defaultConfig {

        applicationId “com.example.mixture”
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName “1.0”

        // 此处说明mk文件未能指定的编译参数
        externalNativeBuild {

            ndkBuild {

                // 说明需要生成哪些处理器的so文件
                // NDK的r17版本开始不再支持ARM5(armeabi)、MIPS、MIPS64这几种类型
                abiFilters “arm64-v8a”, “armeabi-v7a”
                // 指定C++编译器的版本,比如下面这行用的是C++11
                //cppFlags “-std=c++11”
            }
        }
    }

    // 下面指定拾取的第一个so库路径,编译时才不会重复链接
    packagingOptions {

        pickFirst ‘lib/arm64-v8a/libjni_mix.so’
        pickFirst ‘lib/armeabi-v7a/libjni_mix.so’
        pickFirst ‘lib/arm64-v8a/libvudroid.so’
        pickFirst ‘lib/armeabi-v7a/libvudroid.so’
    }

    // Android Studio 2.2之后才引入externalNativeBuild。此处指定mk文件的路径
    externalNativeBuild {

        ndkBuild {

            // 下面是编译CPU信息、加解密、获取主机名专用的mk文件
            path “src/main/jni/Android.mk”
            //path file(“src\\main\\jni\\Android.mk”)
        }
    }
}

六、第六批勘误记录(以下的勘误记录在2021年2月的第十次印刷时均已修正):

1、第35页的“2.2.3  滚动视图ScrollView”
该小节示例代码中的两处“线性视图”都改为“线性布局”。

2、第97页的“3.7.2  小知识:提醒对话框AlertDialog”
该小节示例代码第七行的“给建造器设置对话框的信息文本”,把“信息文本”改为“内容文本”。

3、第195页的““6.1.1  声明属性””
表6-1删掉第七行整行(getDimension那行),同时第八行(getDimensionPixelSize那行)的说明列文字改为“尺寸值。单位为px”。

4、第204页的“6.1.5  绘制视图”
在“2. onDraw”的“(1)划定可绘制的区域”下的第一句“虽然本视图内的所有区域都是可以绘制的”,改为“虽然视图内的所有区域都是可以绘制的”,也就是去掉“本”字

5、第233页的“6.5.1  Service的生命周期”
“3. 延迟绑定”小节的第二行,把“因为启动操作在先”改为“因为启动操作在先、绑定操作在后”,也就是补充“、绑定操作在后”这几个字。

6、第335页的“9.2.3  录音与播音”
“1. 媒体录制器MediaRecorder”小节的常用方法列表中,第一行reset后面的文字说明“重置录制资源”改为“重置录制器”,第五行release后面的的文字说明“释放录制资源”改为“释放录制器”。

七、第七批勘误记录:

1、第55页“2.5.2  小知识:日志Log/提示Toast”开始
“2.5.2  小知识:日志Log/提示Toast”和“2.5.3  代码示例”这两个小节共有七处“被除数”要改为“除数”,因为除法运算要检查除数是否为零,而不是检查被除数是否为零。

2、第114页的“4.3.1  SD卡的基本操作”
第三行“<uses-permission android:name=”android.permission.READ_EXTERNAL_STORAG” />”改为“<uses-permission android:name=”android.permission.READ_EXTERNAL_STORAGE” />”,也就是在STORAG末尾加个E变成STORAGE

3、第136页的“4.6.3  代码示例”
该页中间“声明SD卡的操作权限”下面第三行“<uses-permission android:name=”android.permission.READ_EXTERNAL_STORAG” />”改为“<uses-permission android:name=”android.permission.READ_EXTERNAL_STORAGE” />”,也就是在STORAG末尾加个E变成STORAGE

4、第232页的“6.6.2  小知识:应用包管理器PackageManager”
该小节开始的代码例子第9行的“PackageManager.PERMISSION_GRANTED”改为“PackageManager.MATCH_UNINSTALLED_PACKAGES”。

5、第336页的“9.1.1  表面视图SurfaceView” 
该页第二行的“这个途径便是内部类表面持有者SurfaceHolder外部调用”改为“这个途径便是内部类表面持有者SurfaceHolder外部调用”,也就是在“外部调用”前面增加一个句号。

6、第338页的“9.1.2  使用Camera拍照” 
autoFocus方法的说明文字“参数自动对焦接口AutoFocusCallback的onAutoFocus方法在对焦完成时触发”语句不通顺,改为“输入参数为自动对焦接口AutoFocusCallback的实例,该接口的onAutoFocus方法在对焦完成时触发”。

7、第345页的“9.1.4  使用Camera 2拍照”
该页最后一行,“4. 图像读取器ImageReader”小节中,getSurface的方法说明文字“获得图像读取的表面对象”改为“获得图像读取的表面对象”,也就是增加一个“”字。

8、第349页的“9.2.1  拖动条SeekBar”
该小节第一行“拖动条SeekBar继承自进度条ProcessBar”,把“ProcessBar”改为“ProgressBar”。

9、第353页的“9.2.3  录音与播音” 
setAudioSamplingRate方法后面的描述文字“单位千赫兹(kHz)”改为“单位赫兹(Hz)”。

10、第364页的“9.3.2  摇一摇——加速度传感器”
该小节第二行末尾的“其他类似的应用还摇骰子”改为“其他类似的应用还摇骰子”,也就是增加一个“”字。

11、第381页的“9.5.1  NFC近场通信” 
“2. 启用NFC感应/禁用NFC感应”小节第一段第一行和第三行的两处“重载”改为“重写”。

12、第516页的“11.6.2  小知识:三维图形接口OpenGL” 
该小节第三段第四行的“比如显示生活中黑板的漆面”改为“比如现实生活中黑板的漆面”,也就是把“显示”改为“现实”。

13、第520页的“11.6.2  小知识:三维图形接口OpenGL” 
“此时自定义的渲染器GLRender必须重载onSurfaceCreated”这句里面的“重载”改为“重写”。

14、第553页的“12.3.1  属性动画的用法” 
removeListener的方法说明改为“移除指定的动画监听器”,也就是把“移出”改为“移除”。
removeAllListeners的方法说明改为“移除所有动画监听器”,也就是把“移出”改为“移除”。

15、第557页的“12.3.3  插值器和估值器” 
该小节第二段第一行的“默认是匀速播放”改为“默认是先加速再减速”。

16、第662页的“14.2.2  创建JNI接口”
表14-2  基本数据类型的转换关系,“Java的数据类型”该列的Int和Float要改为小写的intfloat

17、第725页的“15.4.1  文字转语音TextToSpeech”
图例“15-39  小米手机内置的语音引擎”改为“15-39  小米手机内置的语音引擎”,也就是在“15-39”前面加个“”。

8、第725页的“15.4.1  文字转语音TextToSpeech”
表15-5  setLanguage方法的返回值说明,下面表格左侧的标题由“TextToSpeech类的返回值”改为“setLanguage方法的返回值”。

19、第726页的“15.4.1  文字转语音TextToSpeech”
图15-41下方的文字“接下来就可以大胆设置朗读的语音了”改为“接下来就可以大胆设置朗读的语言了”,也就是把“语音”改为“语言”。
 

若对本书内容有任何疑问,可加入QQ群进行咨询,群号是493199768

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138853.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 微信API接口大全「建议收藏」

    微信API接口大全「建议收藏」微信API接口1、基础消息类型1、客户端发送的心跳包HeartBeatReq=1001;2、消息接收确认回复(接收或拒绝接收)MsgReceivedAck=1002;3、错误单独提升为一种消息类型Error=1003;4、通用任务执行结果通知TaskResultNotice=1025;2、设备客户端授权类消息1、设备(手机客户端、客服客户端)获取通信token请求与响应DeviceAuthReq=1010;设备(手机客户端、客服客户端)获取通信token响应D…

  • PySpark-prophet预测

    PySpark-prophet预测简介Prophet是facebook开源时间序列预测工具,使用时间序列分解与机器学习拟合的方法进行建模预测。关于prophet模型优点我不打算说,网络上的文章非常多,各种可视化,和参数的解释与demo演示。但是在正在用到工业上大规模的可供学习的中文材料并不多。本文打算使用pyspark进行多序列预测建模,会给出一个比较详细的脚本,供交流学习,重点在于使用hive数据/分布式,以及中间数据预处理,以及pandas_udf对多条序列进行循环执行。背景说明,在十万级别的sku序列上使用prophet预测每

  • spss k均值聚类_K均值法与系统聚类法的异同

    spss k均值聚类_K均值法与系统聚类法的异同总目录:SPSS学习整理SPSS实现快速聚类(K-Means/K-均值聚类)目的适用情景数据处理SPSS操作SPSS输出结果分析知识点目的利用K均值聚类对数据快速分类适用情景数据处理SPSS操作分析——分类——K-均值聚类最大迭代次数根据数据量,分类数量,电脑情况自己调整,能选多点就把上限调高点。SPSS输出结果分析在数据集最右两列保存了该个案的分类结果与到聚类中心的距离。由于没有自定义初始中心,系统设定了三个。迭代9次后中心值不变。最终个三个聚类中心以及他们

    2022年10月29日
  • SVN和Git 介绍,区别,优缺点以及适用范围

    SVN和Git 介绍,区别,优缺点以及适用范围

    2021年10月30日
  • quotename函数的理解

    quotename函数的理解首先,sqlserver里的标识符有一定的规则,比如你createtableabc123(…)那么中间含有空格,它不是符合规则的。你会写做createtable[abc123](….)即以[]来定界标识符。quotename将字串成为有效的标识符。它有什么用呢?我举个例子。你有个表名字叫做aa[]bb当某些应用动

  • c语言中toupper函数_c中输出字符串的函数

    c语言中toupper函数_c中输出字符串的函数std::string&str_toupper(std::string&s){std::transform(s.begin(),s.end(),s.begin(),[](

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号