《Android Studio开发实战 从零基础到App上线》电子书,源码,见解课件下载和部分内容勘误说明

本文汇总了《AndroidStudio开发实战从零基础到App上线》一书的资源,包括AndroidStudio和NDK版本下载、示例源码、配套PPT、电子文档及工具下载链接,解决源码导入和运行问题,涵盖版本兼容、文件格式、控件兼容性及新控件介绍,附带书籍勘误记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博文为转载,转载于https://blog.youkuaiyun.com/aqi00/article/details/73065392?locationNum=14&fps=1

下面是《Android Studio开发实战 从零基础到App上线》一书用到的工具和代码资源:
1、本书使用的Android Studio版本为2.2.3,因为Android官网现在不提供该版本的下载,所以博主把该版本的64位安装包上传到了百度网盘,点击https://pan.baidu.com/s/1o80opRG进入下载页面。
如需32位的Android Studio安装包,可前往Android官网页面下载。
2、本书使用的Android NDK版本为r13b,64位NDK安装包的下载页面为https://pan.baidu.com/s/1qXZLMsG
如需32位的NDK安装包,可前往Android官网页面下载。
3、本书提供所有示例源码的demo工程下载,源码的下载页面为https://pan.baidu.com/s/1JEpc0w6s4BtWFagrTo_2Dg(注意百度网盘下载的源码注释不全,需要全面注释的源码可访问博主的github获取,github地址是https://github.com/aqi00/android2)。
4、本书提供配套的ppt课件下载,课件的下载链接为:
https://pan.baidu.com/s/1zhVHH6_fKNcFCmxPyqC7rA
5、该书的电子版文档见链接:
https://pan.baidu.com/s/154b-EQRmt0iSAtn42vKPcQ

源码与各章的对应关系表见原博文中,即下图(在源代码中也有文档说明):
https://img-blog.youkuaiyun.com/20170715230658001
4、本书第8章使用了一些反编译和重签名工具,这些工具的下载页面是https://pan.baidu.com/s/1kVRyLwj
5、本书的源码导入和运行问题解答参见博文《Android Studio开发实战 从零基础到App上线》源码运行问题解答。
6、本书的文字叙述的有关问题答疑参见博文《Android Studio开发实战 从零基础到App上线》本书内容问题答疑。

内容说明

一、关于Android Studio的版本
本书采用的Android Studio版本为当时最新的2.2.3,然后2017年3月份谷歌又推出了2.3版本,与2.2.3版本相比,2.3版在安装和使用上主要有两个差别:
1、Android Studio 2.3适配的Gradle版本为3.3,可是安装包自带的Gradle版本却是3.2,造成项目编译失败。为此,如果Android Studio升级到2.3版本,也需要同时把Gradle升级到3.3并做一系列的配置调整才行,具体操作步骤详见博文《Android Studio升级到2.3的编译问题解决办法》。
2、把编译好的工程导出apk安装包,弹出窗口的最后一页多了两个复选框“V1 (Jar Signature)”和“V2 (Full APK Signature)”,这里务必要勾选第一个“V1 (Jar Signature)”,具体原因参见博文《Android Studio 2.3的各种新增疑难杂症》。

二、关于JNI工程的编译问题
Android Studio 2.2之后增强了对NDK的编译支持,具体地说,是允许在编译配置build.gradle的android节点下增加externalNativeBuild节点,然后指定jni目录的mk编译文件;而之前版本只能在defaultConfig节点下补充ndk的编译说明。
在测试中发现,Android Studio 2.2采用defaultConfig方式编译jni工程,生成的App在Android 6.0上运行会闪退,日志报错“java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol “__aeabi_memcpy” referenced by “*.so””。此时不管怎么修改build.gradle里面的ndk配置,可能都无法解决问题。
如果遇到这种情况,只能采用externalNativeBuild方式编译jni工程,即在jni目录下提供专门的Android.mk编译文件,由该mk文件配置jni文件的编译规则。

三、关于源码的文件格式问题
注意Android Studio对文件格式的校验要比Eclipse严格,如果把原来Eclipse工程的代码复制或者导入到Android Studio工程中,则很有可能发生编译失败的问题。原因是有部分文件的格式是“UTF带BOM”,由于Eclipse会自动处理因此在Eclipse上编译不会报错;但是Android Studio无法正确处理带BOM的文件,所以编译就报错了。此时需要使用UEStudio等文本编辑软件,把这些文件另存为“UTF无BOM”的格式才可以。
带BOM造成的编译问题主要影响下面两类文件:
1、.java文件,编译报错“Error:(1, 1) 错误: 非法字符: ‘\ufeff’”;
2、.mk文件,无法正常编译jni代码;

四、关于部分控件的兼容性问题与新控件的介绍
Android的碎片化问题由来已久,每个版本对同一控件的处理不尽相同,经常导致某个控件在A版本上运行正常,在B版本上却运行异常。所以Android开发对控件进行兼容适配也是不小的工作量,限于篇幅,书中对部分控件的兼容性问题未做深入阐述。另外,Android自5.0之后引入了大量新控件,虽然书中已经对其中常用的新控件进行描述(包括Toolbar、TabLayout、RecyclerView、SwipeRefreshLayout、camera2、DrawerLayout、CardView、Palette等等),但是仍有许多新控件未能在有限的篇幅中加以介绍。此外,Android6.0之后引入了新的权限管理和休眠模式,也对部分功能的开发造成一定影响。
为了弥补缺憾,现在下面列出部分控件的兼容性问题说明,以及所有新控件的介绍:
1、对于RecyclerView的兼容性问题说明,可参见博文《RecyclerView的各种版本兼容问题处理集锦》。
2、对于选项菜单、上下文菜单、溢出菜单的兼容性问题说明,可参见博文《三种菜单控件的兼容性问题处理集锦》。
3、对于Android5.0之后新增的控件介绍,可参见博文《Android5.0和6.0之后新增的控件说明》中的索引。
4、对于Android6.0的权限管理和休眠模式造成的影响,可参见博文《Android6.0之后的权限机制对App开发的影响》。

勘误记录

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

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

1、第2页“1.1 Android Studio简介”一节的第三段话中,
“Android Studio当前的最新版本是2016年12月6日发布的2.2.3”,这句话的本意是“本书使用的Android Studio为2016年12月6日发布的2.2.3版本”。

2、第4页最后一行(“1.2.2 安装依赖的软件”一节),
“腾讯Bugly,地址:android-mirror.bugly.qq.com,端口:8080”,这行文字描述的地址已经失效,要换成另外一个地址,即改为“mirrors.dormforce.net,端口:80”

3、第47页“2.4.2 状态列表图形”一节的第三段,
“值为true表示按下时显示button_selected图像”,此处的“button_selected”要改为“button_pressed”。

4、第48页“2.4.3 形状图形”一节的“3.gradien”段落,
“gradien是shape的下级节点”,这里的“gradien”末尾少了一个t,该段落里的几个“gradien”都要改为“gradient”。

5、第67页“3.2.3 单选按钮RadioButton”一节常用方法的第一个,
“setCheckedId:选中指定资源编号的单选按钮。”,这里的“setCheckedId”要改为“check”。

6、第437页“11.4.1 上下滚动与左右滑动的冲突处理”一节“2. 下级视图告诉滚动视图能否拦截手势”段落的第二段话中,
“Banner采用手势监听器就是重写监听器的onScroll方法”,为准确表达,要改为“对于Banner采用手势监听器的情况,可重写监听器的onScroll方法”。

7、第457页“12.1.3 淡入淡出动画”一节,
表12-1中第五行的“gradien”要改为“gradient”。

8、第463页“12.2.2 补间动画的原理”一节的倒数第二段,
“第一个参数为插值时间逝去的时间的百分比”,这句话中间要加上“,即”,也就是改为“第一个参数为插值时间,即逝去的时间所占的百分比”。

9、第508页“13.2.3 影视播放器——爱看剧场”一节“2. 定制MediaController的样式”段落的第一段话中,
“因为媒体控制条的内部控件都是私有的,即使继承了也无法修改,因此只能自己写一个全新的视频控制条VideoController”,这里使用了“由于……,因此……”的句式,所以前面的“因为”要改为“由于”。

10、第514页“13.2.3 影视播放器——爱看剧场”一节的中间一段话中,
“音量对话框的实现过程参见第9章”,这里的“第9章”要改为“第11章”。因为自定义的音量对话框来源于“11.1.3 音量调节对话框”,该节是在第11章,不是第9章。

11、第541页的“14.1.2 网页视图WebView”一节的最后一段话中,
“但是套用固定的代码模板使用也不错”,这里的“不错”应改为“不难”。

12、第591页“15.1.2 百度地图”的开头一段话中,
“进行测量时。还要在地图上添加标记”,这里的句号要改为逗号,即改为“进行测量时,还要在地图上添加标记”。

13、第598页“15.2.2 微信分享”的第一段话中,
“尽管微信与QQ虽然都是腾讯公司开发”,这里的“尽管”和“虽然”表达重复了,要改为“尽管微信与QQ都是腾讯公司开发”。

14、第639页“16.5.1 设计思路”一节的第一段话中,
“如果在SK卡找到图片”,这里的“SK卡”要改为“SD卡”。

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

1、第83页的“3.5.2 使用Intent传递消息”的表3-6
第七行第一列的“ACTION_SEND”改为“ACTION_SENDTO”,第二列的“android.intent.action.SEND”改为“android.intent.action.SENDTO”。

2、第99页的“4.2.1 SQLite基本用法”上面的参考代码需要把数据库文件改成完整路径,也就是改为下面这样:
// 创建名叫test.db的数据库。数据库如果不存在就创建它,如果存在就打开它
SQLiteDatabase db = openOrCreateDatabase(getFilesDir() + “/test.db”, Context.MODE_PRIVATE, null);
// 删除名叫test.db数据库
// deleteDatabase(getFilesDir() + “/test.db”);
原因是这里的数据库名称必须是包括目录在内的全路径,否则运行会报错。

3、第117页的“4.5.2 小知识:菜单Menu”里面弹出选项菜单途径的第3种
“这个在后续介绍工具栏时进行介绍”改为“这个在第7章介绍工具栏时进行介绍”。

4、第174页的“6.1.1 声明属性”的表6-1
第8行第3列的“取值为末尾带sp的尺寸数值”改为“取值为末尾带px的尺寸数值”,也就是把sp改为px。

5、第198页的“6.4.2 进度条ProcessBar”
该小节标题改为“6.4.2 进度条ProgressBar”,也就是把ProcessBar改为ProgressBar。同时该小节第一段的“有必要了解一下ProcessBar的具体用法”也要改为“有必要了解一下ProgressBar的具体用法”。

6、第303页的“9.1.2 使用Camera拍照”前半页对setFocusMode方法的介绍
“一般使用Camera.Parameters.FOCUS_MODE_AUTO表示自动对焦”改为“取值Camera.Parameters.FOCUS_MODE_AUTO只会自动对焦一次,取值FOCUS_MODE_CONTINUOUS_PICTURE则会连续对焦”。

7、第385页的“10.3.2 文件对话框”
“图10-24 文件打开对话框”改为“图10-25 文件打开对话框”,也就是把这里的24改为25。

8、第401页的“10.5.3 代码示例”编码注意的第一点
在权限配置末尾增加下面两行权限:

9、第525页的“13.4.1 设计思路”
该页最后一行的“通知Notify”改为“通知Notification”。

10、第529页的“13.4.3 代码示例”
该页最后两行的两处“Android 4.4.2”都改为“Android 4.4”,也就是把4.4.2改为4.4。

三、第三批勘误记录

1、第9页的“1.3.1 创建新项目”
图1-16的描述文字改为“图1-16 activity_main.xml的设计图”,也就是把“activity.xml”要改为“activity_main.xml”。同样,图1-17的描述文字改为“图1-17 activity_main.xml的源代码”。

2、第15页的“1.4.4 在代码中操纵控件”
第一段的两个“activity.xml”都改为“activity_main.xml”,翻过来第16页第3段的两个“activity.xml”也改为“activity_main.xml”。

3、第23页的“第2章 初级控件”
“本章介绍Android屏幕显示初级视图的相关知识”改为“本章介绍Android屏幕显示与初级视图的相关知识”,也就是在“屏幕显示”和“初级视图”中间增加一个“与”字。

4、第29页的“2.2.1 视图View的基本属性”
倒数第四行的“视图组ViewGroup是一类特殊视图,所有布局视图类都是从它派生而来的。”,这里的“所有布局视图类”改为“所有的布局类视图”。

5、第34页的“2.3.1 文本视图TextView”
表2-4 TextView的基本属性和设置方法说明
第二行第一列的“text:”改为“text”,也就是去掉末尾的冒号。

6、第48页的“2.4.3 形状图形”
第二段第二行的“gradien(渐变)”,这里的gradien改为gradient,也就是在末尾补充一个t。

7、第66页的“3.2.2 开关按钮Switch”
第一段第一行“Android从4.1.2版本开始支持该控件”,把这里的“4.1.2”改为“4.0”。

8、第136页的“5.2.2 列表视图ListView”
文字部分倒数第一行的“如果已经指定分隔线的高度,就不用使用分隔图片的高度了”,这里的“不用使用”改为“不使用”。

9、第173页的“6.1.1 声明属性”
文字部分第一段第三行的“app:textColoe与app:textSize”,这里的“textColoe”改成“textColor”。

10、第175行的“6.1.2 构造对象”
第四行的“重写测量函数onMesure”改为“重写测量函数onMesure”,也就是把“onMesure”改为“onMeasure”。

11、第176行的“6.1.3 测量尺寸”
该小节第一段第二行的“如此,在绘制图案之前系统得先知道这个图案的尺寸”,这里把“如此”改为“因此”。

12、第248页的“7.4.1 循环视图RecyclerView”
“3. 可以直接调用的方法”下面一行的“scrollToPosition:滚动到指定位置”,该方法属于RecyclerView,要挪到前半页“removeOnItemTouchListener:移除列表项的触摸监听器”下方。

13、第395页的“10.5.1 设计思路”
“图10-33 好友列表页面图”改为“图10-33 好友列表页面”,“10-34 聊天窗口页面”改为“图10-34 聊天窗口页面”,也就是把前面文字末尾的“图”搬到后面文字的开头。

14、第492页的“12.6 小 结”
第一段倒数第一行的“另外。介绍了画布的绘图层次”,中间的句号改为逗号,也就是改为“另外,介绍了画布的绘图层次”。

15、第562页的“14.3.2 蓝牙BlueTooth”
第三行的“完整流程主要分为以下5个步骤”改为“完整流程主要分为以下4个步骤”,因为后面实际只有四个步骤。

16、第571页的“14.4.2 小知识:NetBIOS协议”
该小节第二段第一行的“NetBIOS提供的名字包括计算机名称”改为“NetBIOS提供的信息包括计算机名称”,也就是把“名字”改为“信息”。

17、第604页的“15.3.2 微信支付”
倒数第三行的“所示只能使用官方DEMO工程里的测试账号进行演示”,这里的“所示”要改为“所以”。

18、第608页的“15.4.1 语音识别”
第5小电后面一行“讯飞SDK的语音识别功能主要通过SpeechRecognizer类实现,看以下常用方法。”,这里的“看”改为“有”。

19、第636页的“16.4.2 检测屏幕开关”
倒数第五行的“熄屏事件监听的是系统广播Intent.ACTION_SCREEN_ON,亮屏事件监听的是系统广播Intent.ACTION_SCREEN_OFF”,这里把“ON”和“OFF”调换一下,也就是改为“熄屏事件监听的是系统广播Intent.ACTION_SCREEN_OFF,亮屏事件监听的是系统广播Intent.ACTION_SCREEN_ON”。

<think>好的,我现在需要回答用户关于Android Studio开发App时所需的Java版本兼容性的问题。用户提到他们参考了三个引用,我需要结合这些信息来给出准确的回答。首先,我需要确认用户提供的引用内容是否包含相关的Java版本信息。 首先看引用[1]:“由于Android Studio是基于JavaKotlin开发,所以我们一般选择Java,要搭好所需的环境。”这里提到Android Studio使用Java,但没具体说明版本。引用[2]提到使用Kotlin语言进行编程,并推荐Android Studio作为IDE。引用[3]是关于书籍勘误,里面提到Android Studio的版本更新,但未涉及Java版本。因此,用户提供的引用中没有直接说明Java版本的信息,可能需要结合外部知识。 不过,根据我的知识,Android Studio的Java版本兼容性通常与Android Gradle插件项目的编译设置有关。不同版本的Android Studio可能支持不同的Java版本。例如,较新版本的Android Studio可能要求使用JDK 11或更高,而旧版本可能支持JDK 8。此外,Android应用开发中,Java版本的选择还受到目标API级别的影响。需要具体说明各个Android Studio版本对应的JDK要求,以及如何配置项目中的Java版本。 此外,用户可能需要了解如何在Android Studio中设置更改JDK版本,以及如何处理可能出现的兼容性问题。例如,从Android Studio 3.0开始,默认支持Java 8的部分特性,但可能需要特定的配置。同时,使用Kotlin作为开发语言时,Java版本的选择是否会影响Kotlin的编译? 还需要考虑官方文档的建议,比如Android开发者网站上的说明,以及不同JDK版本在构建过程中的差异。例如,JDK 11引入的模块化系统可能会影响依赖项的管理,而JDK 8的Lambda表达式在Android中的支持情况等。 总结需要回答的要点: 1. Android Studio不同版本对应的JDK要求。 2. 如何检查配置项目中的Java版本。 3. Java版本与Android API级别的兼容性。 4. 使用Kotlin时的Java版本影响。 5. 常见兼容性问题解决方法。 需要确保信息准确,并建议用户参考官方文档或可靠的来源来确认具体版本要求,特别是在版本更新后可能会有变化。同时,可能还需要提到Gradle构建工具在其中的作用,因为Gradle配置中的sourceCompatibilitytargetCompatibility设置会影响编译的Java版本。</think>### Android Studio开发App所需Java版本兼容性详解 #### 一、Android Studio版本与JDK对应关系 1. **Android Studio Arctic Fox (2020.3.1)及更高版本**:要求使用**JDK 11**,且不再支持JDK 8[^4]。 2. **Android Studio 3.0~4.2**:默认支持**JDK 8**(部分特性需手动启用),但可向下兼容JDK 7。 3. **Android Studio 2.3及更早版本**:仅支持**JDK 7**或更低版本。 开发时需注意:Android Studio会自带捆绑的JDK(如OpenJDK),但也可通过`File > Project Structure > SDK Location`手动指定本地JDK路径[^5]。 #### 二、项目级别Java版本配置 在`build.gradle`中需明确设置编译选项: ```groovy android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 // 源码兼容版本 targetCompatibility JavaVersion.VERSION_1_8 // 目标字节码版本 } } ``` - 若使用Java 11特性,需将`VERSION_1_8`改为`VERSION_11`。 - **Kotlin项目兼容性**:Kotlin/JVM完全兼容JDK 6~17,但实际版本受限于Android Gradle插件[^6]。 #### 三、Java版本与Android API的关联 | Android API级别 | 支持的Java版本 | 限制条件 | |----------------|-----------------------|-----------------------------| | API 24+ (Nougat)| Java 8(默认) | 需启用`jackOptions`(已弃用) | | API 21+ (Lollipop)| Java 7或8(需Desugar) | 使用Android Gradle插件4.0+ | | API <21 | Java 6/7 | 无法使用Lambda等特性 | > **注意**:从Android Gradle插件4.0开始,通过[Desugar](https://developer.android.com/studio/write/java8-support)实现Java 8特性向后兼容[^7]。 #### 四、常见问题与解决方案 1. **错误提示`Unsupported class file major version 61`** **原因**:项目使用了JDK 17编译,但Gradle未配置支持。 **解决**: - 升级Android Gradle插件至7.0+ - 修改`gradle-wrapper.properties`: ```properties distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip ``` 2. **Kotlin与Java版本冲突** **示例**:Kotlin 1.6需JDK 11+,但项目设置为JDK 8。 **方案**:在`gradle.properties`中添加: ```properties kotlin.jvm.target=1.8 org.gradle.java.home=/path/to/jdk11 ``` 3. **多模块版本不一致** 统一所有模块的`compileOptions`,或使用`subprojects`全局配置: ```groovy subprojects { afterEvaluate { android { compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } } } } ``` #### 五、推荐实践 1. **优先使用Android Studio捆绑的JDK**以减少环境问题。 2. **定期更新Gradle插件**,参考[官方兼容性表格](https://developer.android.com/studio/releases/gradle-plugin#updating-plugin)。 3. **使用JDK版本管理器**(如jEnv)灵活切换版本。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值