《第一行代码》第3版随书源码跑通指南:从环境配置到避坑全攻略 📅 发布时间:2026/8/31 9:46:13 👁 浏览次数: 简介本资源是《第一行代码——Android第3版》官方配套源代码集面向Android开发零基础学习者与转岗初学者解决理论脱离实践、代码无法运行、章节示例难以复现等核心痛点。压缩包共2082个文件涵盖800余个XML布局与资源定义文件、242张UI适配图片、222个Flat编译中间文件、139个JSON配置及数据模拟文件、61个Kotlin源文件.kt与5个Java文件.java辅以Gradle构建脚本、ProGuard混淆配置及调试用properties文件总大小36.2MB结构严格按书中22章内容组织每章对应独立可运行模块。已有243人下载学习源码包含Activity生命周期实战、Room数据库操作、Retrofit网络请求、Jetpack组件集成、定位与多媒体调用等完整功能模块所有项目均经Android Studio验证可直接导入编译注释详尽且含典型异常处理逻辑是贯通Android四大组件、理解现代架构设计与工程化实践的关键实操载体。 拿到《第一行代码 Android第3版》这本书的人十个里有八个第一件事就是想把随书源码跑起来。我也不例外书到手那天晚上就兴冲冲地打开Android Studio结果从源码导入到第一个Demo跑在模拟器上前前后后折腾了快三个小时。中途一度怀疑是自己环境有问题后来才发现这本书的源码本身没问题问题出在“书的出版时间和你的电脑当前时间”之间隔了好几个大版本的Android工具链更新。这篇内容就是把我那次从零跑通《第一行代码》第3版随书源码的完整过程整理出来包括源码仓库怎么找、Android Studio版本怎么选、JDK和SDK怎么配、导入后Gradle报错怎么排查、各章节示例怎么跑起来以及最后老代码在新系统上会遇到哪些坑。适合刚入手这本书、准备照着敲代码的初学者也适合以前学过Java版、现在想看看Kotlin版源码差异的老读者。1. 随书源码的获取方式与仓库结构1.1 源码在哪里下载《第一行代码 Android第3版》的随书源码郭霖是直接托管在GitHub上的仓库地址是guolindev/booksource。这个名字起得比较直白就是“书源码”的拼音里面不只有第3版第一版、第二版的源码也都放在同一个仓库里用目录区分。获取方式有两种直接打开GitHub仓库页面点绿色的Code按钮选Download ZIP把整个仓库下载到本地。如果你装了Git直接在终端执行git clone https://github.com/guolindev/booksource.git我个人推荐用git clone因为郭霖偶尔会修一些书里的错误代码或者补充说明用git拉下来的仓库可以直接git pull同步更新下载ZIP的话就只能重新下。1.2 仓库目录怎么对应书里的章节这个仓库解压之后你会看到类似这样的目录结构具体以你clone下来的实际版本为准booksource/ ├── FirstLineCode/ │ ├── Chapter02/ │ ├── Chapter03/ │ ├── Chapter04/ │ └── ...每个Chapter目录对应书里的一个章节比如Chapter03就是第3章“控件与布局”相关的示例代码。还有一部分章节的代码是分布在多个小项目里的比如第5章广播、第6章数据存储书里每个小节都有独立的小Demo源码目录下会有多个子项目。这里要说一句第3版整本书都是基于Kotlin写的所以源码里的.java文件几乎看不到全是.kt文件。以前学过Java版第二版的读者看这些源码的时候思维要切换一下Kotlin写UI和逻辑的方式比Java简洁很多刚开始可能会有点不适应。1.3 哪些源码能直接跑哪些别急着跑我照着目录逐个打开项目之后发现一个规律书里前几章的示例项目都是独立的、可以直接运行的完整工程比如第2章的Activity生命周期、第3章的UI控件示例每一个都是完整的App。但是到后面有些章节尤其是数据存储和网络相关的部分郭霖会把多个小题目的公共代码抽出来所以你打开某个目录时可能会发现它不是一个独立工程而是嵌在另一个工程里的模块。我的建议是前10章的内容每一章的源码项目都值得你把它完整跑起来一次至少看到界面弹出来、交互能点。到了第12章的酷欧天气CoolWeather那是一个贯穿全书的大项目建议放到你学完整本书之后再来完整跑通它不要一开始就纠结这个项目为什么依赖那么多。2. 环境准备这一步比源码本身更容易卡住2.1 Android Studio和JDK的版本搭配是头号大坑这本书出版的时候主流Android Studio版本还是3.x和4.x但随着工具链更新你2024年去官网下载的Android Studio已经到Koala、Ladybug这种版本号了。新版Android Studio默认自带JDK 17但书里源码工程用的Gradle插件版本AGP非常老比如3.5.0或者4.0.0这样的版本就会和JDK 17完全不兼容报出类似“Unsupported class file major version 61”这种错误。所以环境准备的第一步就是先分析你手里的Android Studio版本再决定怎么处理Android Studio版本自带JDK直接打开老项目的可能结果3.x老版本JDK 8打开第3版源码最顺畅但很难下载到了4.xJDK 8/11基本能跑Gradle同步时可能会提示升级2023年以后的新版本JDK 17大概率Gradle同步失败需要降AGP或降JDK最新Ladbug等版本JDK 21老项目基本跑不起来需要较大改造如果你是新装的Android Studio建议不要被“必须用最新版”绑架。我的实际方案是保留新版Android Studio做日常开发单独下载了一个Android Studio 4.2.2的绿色版专门用来开这本书的源码工程。两个版本互不干扰老版本打开老源码新版本写新项目省掉了大量兼容性折腾。如果你不想装两个Android Studio那就要学会用Android Studio的Gradle JDK设置。在Settings - Build, Execution, Deployment - Build Tools - Gradle里把Gradle JDK切换成JDK 11或者JDK 8然后修改工程里的Gradle和AGP版本手动把它们拉到互相匹配的版本组合上。具体的版本匹配表我后面单独讲。2.2 SDK Platforms和Build-Tools怎么配Android Studio本身装好之后SDK并不会全部自动下载。书里的源码大部分用的compileSdkVersion和targetSdkVersion是29或30对应Android 10和Android 11。新版本Android Studio安装时默认会装最新的SDK Platform但老版本的不一定有。打开Settings - Languages Frameworks - Android SDK在SDK Platforms标签页里勾选Android 10.0 (Q)和Android 11.0 (R)确认安装。SDK Tools标签页里建议勾选展示包详情然后找到Android SDK Build-Tools确保有29.0.3或30.0.3这样的版本。这个步骤很容易被跳过但如果不装对应版本的SDK PlatformGradle同步时会报“Failed to find target with hash string android-29”之类的错误卡得非常冤枉。2.3 中文界面设置和几个必改的Studio配置热搜词里有“android studio怎么设置中文”和“android studio汉化”顺手说一下。新版Android Studio对中文支持做得挺好了在Settings - Plugins里搜索“Chinese”找到“Chinese (Simplified) Language Pack / 中文语言包”这个官方插件安装后重启就是中文界面。不过我要提个醒如果你是照着书上英文界面的截图学操作建议还是保留英文界面不然书里写的“File - New - New Project”和你界面上看到的“文件 - 新建 - 新建项目”对应起来会有点别扭。等书看完了再汉化也不迟。另外两个必改的配置在Appearance Behavior - System Settings - Memory Settings里把IDE堆内存调大一点至少1024MB起步否则打开工程多的时候会卡。在Settings - Build, Execution, Deployment - Build Tools - Gradle里勾选Offline work这个选项等第一次依赖下载完成之后后面每次打开工程就不会反复检查网络。这两个配置看着不起眼实际体验差别很大。3. 导入源码到跑通编译的完整流程3.1 导入工程的操作细节源码解压之后不要在Android Studio的欢迎界面直接点Open而是用File - Open打开工程目录。这里有个关键点Chapter03这种目录下如果只有一个.iml文件或者直接就是app模块说明这就是一个可以直接导入的工程根目录。但如果你打开某个章节目录发现里面还套着一层目录比如Chapter10/ServiceBestPractice那就要把ServiceBestPractice这一层当成工程根目录而不是Chapter10。选错目录会导致Gradle识别不到工程结构同步直接失败。导入之后Android Studio会开始Gradle Sync第一次同步下载Gradle发行版和所有依赖库耗时长短完全取决于你的网络状况。快的时候几分钟慢的时候能拖到半小时以上。3.2 依赖下载慢的根治方法书里的工程默认使用的是google()和mavenCentral()仓库国内网络环境下拉取依赖时经常卡在某个库上下不动。这里建议在工程的根目录build.gradle里加上阿里云的镜像仓库效果立竿见影buildscript { repositories { maven { url https://maven.aliyun.com/repository/google } maven { url https://maven.aliyun.com/repository/central } maven { url https://maven.aliyun.com/repository/public } google() mavenCentral() } } allprojects { repositories { maven { url https://maven.aliyun.com/repository/google } maven { url https://maven.aliyun.com/repository/central } maven { url https://maven.aliyun.com/repository/public } google() mavenCentral() } }注意镜像仓库要写在google()和mavenCentral()前面这样Gradle会优先从镜像拉取。这个方法不仅适用这本书的源码以后你写任何新项目只要拉依赖慢都可以这样配。3.3 第一次编译必见的报错与解决方案以我实际踩坑的经历首次编译最常遇到这几类报错报错关键词原因解决方案Unsupported class file major versionJDK版本太高老Gradle不兼容在Gradle JDK设置里切换到JDK 8/11Failed to find target with hash string android-XX缺少对应版本的SDK Platform在SDK Manager里勾选对应API版本Could not find com.android.tools.build:gradle:X.X.X本地缓存里没有对应AGP版本检查仓库配置换阿里云镜像后重试SDK location not found没有配置SDK路径在local.properties里设置sdk.dirlocal.properties这个文件值得单独说一句它是在导入工程时自动生成的里面有sdk.dir和ndk.dir如果有NDK的话。如果你移动过Android SDK的位置一定要检查一下这个文件里的路径对不对。这个文件是机器相关的不要提交到Git仓库里。4. 各章节源码的运行验证与阅读顺序4.1 前几章的Demo怎么快速验证书里第2章到第9章基本每一章都有两到三个小Demo。以我跑下来的经验这些单独章节的项目结构都差不多一个MainActivity一个activity_main.xml少数章节加了第二个Activity或者Fragment。跑通这些Demo有个技巧不用一个个完整编译。你可以在Android Studio左侧的Project面板里找到对应章节目录下的app模块右键点击Run它会自动选择该模块的入口Activity并安装到模拟器上。这里有个容易搞混的地方书里第3章讲控件时代码里写的是findViewById但第3版对应的源码里郭霖用的是Kotlin的val button findViewByIdButton(R.id.button)这种写法没有直接使用kotlin-android-extensions插件。这是郭霖刻意为之的因为那个插件已经废弃了他在书里专门说明过。你看到源码和你记忆中的写法不完全一样不要惊讶那是版本原因。4.2 酷欧天气大项目的启动前置条件第12章的酷欧天气CoolWeather是整个书里最有价值的完整项目代码量比前面所有章节加起来都多。它的运行依赖和风天气的API Key。CoolWeather里默认的API Key是写死在代码里的测试Key这个Key在书出版时可能还有效但过了一两年基本都会失效。你需要去和风天气官网注册一个开发者账号创建一个免费应用拿到专属API Key替换WeatherActivity.kt里的token变量。省份、城市、县的加载。第一个页面展示的是省列表数据是从网络拉取的如果API Key失效列表会一直转圈。跑起来之前建议先用浏览器访问一下接口地址确认Key是否有效避免在App里反复排查。导入工程后确认build.gradle里的依赖完整。CoolWeather用到了OkHttp、Gson、Glide、LitePal等库如果Gradle同步不报错说明这些库都拉下来了。我第一次跑酷欧天气就卡在“省份列表转圈不显示”上排查了半天才发现是API Key过期了。换了新Key之后整个项目才真正跑起来。所以如果你们碰到一样的问题别急着改代码先查Key。4.3 模拟器还是真机这里有点实际差别这本书里的源码大部分都是针对手机屏幕设计的用模拟器跑完全没问题。但有几个地方我建议用真机第10章Service部分模拟器上启动服务、观察通知栏行为效果不如真机直观。第11章Material Design里的动画效果模拟器的帧率表现不如真机流畅。第8章通知部分的channel相关代码Android 8.0以上系统对通知渠道的要求在真机上验证更准确。如果你用模拟器建议创建Pixel 3或Pixel 4的虚拟设备系统镜像选API 29或30的和书里的源码版本匹配度最好。不要在API 34的模拟器上去跑第3版的老项目很多行为变更会让你误以为代码写错了其实是被新系统限制住了。真机调试方面MIUI、ColorOS这些国产系统默认会限制USB安装权限需要在开发者选项里把“USB安装”开关打开否则装不上App。这点书里没写但实际操作时非常容易绊住人。5. 老代码与新Android系统之间的兼容性问题5.1 Gradle和AGP版本匹配的标准答案很多人在导入这本书的源码后Android Studio会弹出一个提示框劝你升级Gradle版本。我的建议是第一遍学不要升。如果Gradle能同步成功就让它保持老版本跑老版本下载依赖少、编译速度也不算慢最重要的是和书里的代码完全匹配。如果你不得不升级比如Android Studio版本太新Gradle版本不支持那就必须用下面这张匹配表来调整AGP版本最低Gradle版本适用JDK3.5.05.5.0JDK 83.6.05.6.4JDK 84.0.06.1.1JDK 8/114.1.06.5.0JDK 8/114.2.06.7.1JDK 8/117.0.07.0.0JDK 118.0.08.0.0JDK 17操作方法是在项目根目录的build.gradle文件里把com.android.tools.build:gradle后面的版本号改成表里支持的版本再打开gradle/wrapper/gradle-wrapper.properties文件把distributionUrl里的gradle版本改成对应版本。动这两处之后重新Sync一般就能解决版本冲突。但你自己要清楚升级AGP之后项目的compileSdkVersion如果还停留在29、30可能出现警告属于正常现象不影响编译。5.2 Kotlin版本和依赖库API变化书里很多章节用到了Kotlin标准库的API比如协程、扩展函数还有kotlinx.coroutines这个官方库。第3版源码默认的Kotlin版本比较保守大概是1.3.x或1.4.x如果你升级了Gradle和AGPKotlin插件版本最好一起升级否则会报“Kotlin version mismatch”的警告。最典型的例子是kotlinx.coroutines库书里的代码用的是GlobalScope.launch这种老写法新版本协程库里这个API还保留着但官方已经不建议使用了。所以如果你的依赖自动拉到了最新版协程库代码里还是能正常运行的只是会有警告。不影响学习。另外Glide图片加载库老版本4.x在Android 10以上的系统上缓存目录的路径和Android 11的Scoped Storage策略有点冲突如果酷欧天气里加载城市图片偶尔黑屏大概率是这个原因。解决方案是把Glide升级到4.12.0以上版本。但如果书里用的版本能正常运行就什么都不要动。5.3 新系统权限和行为变更带来的影响Android 13和Android 14上跑这本书的老源码有几个地方会直接出现“看起来像BUG但其实不是BUG”的现象通知权限。Android 13开始App要动态申请POST_NOTIFICATIONS权限否则通知栏里看不到任何通知。书里第8章的代码没有申请这个权限在API 33以上的模拟器上运行时你会发现代码逻辑没走错但通知就是不显示。解决办法是为项目加上uses-permission android:nameandroid.permission.POST_NOTIFICATIONS /然后在代码里用ActivityCompat.requestPermissions动态申请。前台服务类型限制。Android 14要求前台服务必须指定foregroundServiceType。书里第10章的Service示例在Android 14设备上启动Service时会直接崩溃或抛异常。需要在你使用的前台服务上加上android:foregroundServiceTypespecialUse或者在代码里按类型声明。读写权限和SAF。书里第6章存储相关的代码如果用了WRITE_EXTERNAL_STORAGE权限在Android 11以上也是失效的。这个年代早就不是“给权限就能读写整个SD卡”的时代了新系统强制走SAFStorage Access Framework框架。书里这部分代码更多是让你理解原理不要真的指望它在Android 14的机器上能把文件随意写到公共目录里。以上这些问题你在初学阶段可以暂时不处理但等你想把书里的项目改造成自己的作品时这些都是绕不开的关卡。6. 用源码学习而不是抄源码我的一点经验6.1 源码的正确打开方式我在带过几个新人之后发现拿到随书源码最糟糕的使用方式就是书上看一段源码里复制一段粘贴到自己的项目里跑通了就下一章。这样学下来代码是一行没少敲但脑子里一点都没留下。我的习惯是每章先看书上的讲解理解大概思路之后自己新建一个空白工程从头写。写到卡住、报错、或者不确定接口怎么调用的时候再翻开源码看郭霖是怎么处理的。这样做的好处是你会深刻感受到“自己去思考”和“看别人思考”的区别。比如第5章广播里郭霖用LocalBroadcastManager管理本地广播你在源码里看到这一行可能毫无感觉但如果你自己先写写完会发现普通广播在系统新版本上频繁提醒你不安全这时候再去看源码里为什么用LocalBroadcastManager你会记住这个知识点一辈子。6.2 想把酷欧天气改成自己的项目从哪里下手书里的大项目酷欧天气非常适合作为你的第一个“改造项目”。我建议你做这几步把包名applicationId改成自己的域名比如com.yourname.weather这样可以独立安装不会和书里的原版冲突。替换App的icon和启动图改成自己的设计。更换网络层里的BaseUrl和API Key。加一个用户登录功能结合第9章的网络知识。把简单的列表页换成Compose或ViewBinding重新实现。每一步都不难但串起来就是一个完整的“从读代码到写代码”的爬坡过程。我自己当年就是靠把酷欧天气翻新成自己的天气应用才彻底搞明白Android网络请求、数据解析、页面跳转这套完整的链路。6.3 关于第3版源码的两点客观评价最后说点个人体会。第3版的源码质量比前两版要高不少郭霖在代码里大量使用了Kotlin的惯用写法而且有些代码做了明显的工程化处理比如注释风格统一、资源命名规范、异常处理完善。对于一个初学者来说这些“看不见”的工程素质其实比功能本身更有学习的价值。但也要客观地说书里源码的代码风格偏向“教学化”和“单模块”很多地方为了把一个大知识点拆细写了很多重复的代码片段。这和真实Android项目里的工程组织方式有挺大差距。真实项目的模块化、依赖注入、ViewModel、LiveData这些现代架构组件在这本书里涉及较少最多是高阶部分点到为止。所以源码的正确使用时机应该是学第一遍的时候配合书看学到一半的时候试着脱离源码自己写学完之后再用源码查漏补缺。不要把它当成一本“答案书”全程放在手边。我跑通全部源码之后最大的一个体会是这些年Android工具链的更新速度确实太快了一本书出版不到两三年环境变化就能让随书源码寸步难行。遇到这种情况别急着怀疑代码有问题先看看版本再改配置把环境对齐了剩下的问题基本都能解决。希望这篇内容能帮你少走点弯路。本文还有配套的精品资源点击获取