1. 开篇:这个系列要做什么,环境为什么值得单独讲一课
做啥子嘛,这四个字是四川话里特别日常的一句,意思就是"做什么呢""干嘛呢"。拿它当项目名,是因为这个系列要做的APP本身就是一个帮你解决"眼下不知道干嘛"的小工具——周末在家无聊、晚饭没着落、朋友约你你说随便的时候,打开它摇一摇,给你蹦出一个选择。名字接地气,产品定位也简单,但背后的开发流程可是一点都不含糊。
第一课我没打算直接带着你写代码。先缓一缓,我们把"应用开发环境"这件事彻底搞明白。这是整个系列的第一块地基。我见过太多新人一上来就对着教程敲代码,结果敲到第三天发现项目根本跑不起来,回头一查,是JDK版本不对,Gradle同步失败,SDK组件缺胳膊少腿,一折腾就是一整天,直接劝退。环境这东西平时不显山不露水,但它决定了你后面每一次调试是顺畅还是煎熬。我后面几篇文章规划好了要陆续把界面、交互逻辑、数据存储、上架流程全部讲完,如果基础环境这一关没过,后面每篇你都会做得相当难受。
这篇内容适合谁?第一类是完全没有接触过Android开发的新手,第二类是学过一点Kotlin或者Java,但始终没把整套开发工具链理清楚的人,第三类是手里有电脑,想老老实实把第一个APP跑起来验证一下自己想法的朋友。这篇文章不聊业务逻辑,不写促销活动,只围绕"应用开发环境"这一个点讲透,保证你学完就能把电脑变成一个随时能开工的Android开发工作台。
可能有人会问:现在做APP不是有那种网页上拖拖拽拽就能生成APP的平台吗?为什么还要自己搭环境?我在后面讲技术选型的时候会专门回答,这里先给结论:如果你想做的是一个能长期维护、能上应用商店、能持续加功能的正式产品,标准的技术栈就绕不开。拖拽平台做出来的东西当原型展示可以,真要上架运营,审核、性能、灵活性都会让你头疼。所以别嫌环境搭建这一步啰嗦,它就是你真正入行的门票。这篇文章的实操步骤是我反复验证过的最稳路线,跟着走,快的话半小时,慢也就两三个小时,路上踩过的坑我都提前帮你填平了。
2. 应用开发环境拆解:它不是"一个软件",而是整套工具链
2.1 开发环境包含的五大核心组件
先把最容易搞混的概念理清楚。很多人以为"开发环境=Android Studio",装上就算完事。真不是。Android Studio只是你看到的那个窗口,真正干活的是它背后的一整套工具链。我按重要程度给你拆成五大块:
第一块是JDK,也就是Java开发工具包。Android APP大部分代码最终都要编译成能在虚拟机上运行的字节码,这个编译过程靠的就是JDK。早期你必须自己单独装JDK、配JAVA_HOME环境变量、把Path加上,一套操作下来能劝退半个宿舍的人。现在的Android Studio内置了JetBrains Runtime,也就是JBR,它对Android开发做了专门适配,多数场景下你不需要自己再折腾JDK了。但前提是你得搞清楚用的这个内置JDK版本是多少,后面配置Gradle的时候要用到。
第二块是Android SDK,全称Software Development Kit,这才是Android开发的灵魂。它里面包含了各个安卓版本的平台库、构建工具、调试工具、模拟器镜像等一大堆东西。可以这么理解:SDK是"材料库",你的APP要调用系统功能,比如弹通知、读相册、发起网络请求,靠的就是SDK里提供的API。SDK一般是你在Android Studio里通过SDK Manager按需下载的,不用的版本可以不装,免得占磁盘。
第三块是IDE,也就是集成开发环境。Android开发官方指定的就是Android Studio,它是基于IntelliJ IDEA做的一套专业IDE,界面、代码提示、调试工具、布局预览全是针对安卓开发深度定制过的。
第四块是构建工具链,包括Gradle和Android Gradle Plugin(简称AGP)。它负责把你的源代码、资源文件、第三方库打包成一个可安装的APK或AAB。Gradle是一个自动化构建系统,AGP则是Gradle与Android之间的适配插件。这俩的版本匹配关系经常让人头疼,后面我专门用一张表给你讲清楚。
第五块是运行载体,包括模拟器和真机。模拟器就是你在电脑上虚拟出一台手机,优点是不需要真机也能跑APP,缺点是启动慢、占内存;真机调试则是用USB线把手机连到电脑上,实时、真实、传感器功能完整。
这五块少了哪一个都不算完整环境。我当年第一次配环境时只装了Android Studio,SDK没勾选,模拟器也没建,点运行直接报错,那时候真是丈二和尚摸不着头脑。后来做过的项目多了才明白,环境搭得越完整,后面写代码的效率越高。
2.2 为什么官方推荐的Android Studio是最优解
可能有读者会问了,我能不能用VS Code写安卓?能不能用Eclipse?答案是能,但我不建议。先说说我用过的"野路子"。
早期Android开发确实用过Eclipse加ADT插件,那时候安卓官方都还没推出Studio。后来Google在2013年推出Android Studio的预览版,逐步把SDK工具都收编进去,当时的体验简直是开启了新世界——以前Eclipse里各种插件版本互不兼容的问题一键消失。再后来有人用VS Code加Kotlin插件做安卓,能写代码,但调试、布局预览、模拟器管理这些功能都是靠拼凑出来的,体验支离破碎。所以我的结论很明确:除非你有非常特殊的需求,否则别折腾,直接用Android Studio。它和SDK、模拟器、构建工具的整合是官方设计的,你在官网下载的安装包会自带SDK Manager和AVD Manager,省下来的折腾时间够你多写好几个页面了。
语言选择方面,现在新项目我建议直接用Kotlin。它是JVM上的现代语言,很多语法比Java简洁,空安全机制也能帮你规避一大类崩溃问题,而且Google已经把它定为Android开发的一等公民。当然老项目维护还是Java为主,两种语言在同一个工程里也能共存,不必一上来就搞什么"一刀切迁移",边写边改就行了。
2.3 版本匹配关系:JDK、Gradle、AGP、SDK Platform之间的对应
这部分是我特别想拿出来单独讲的,因为80%的环境问题都出在版本不匹配上。我见过有人电脑里装着JDK 8,结果项目用的AGP 8.x,一构建就报"Unsupported class file major version";也见过Gradle wrapper版本太低,AGP却要求新语法,同步直接失败。版本不是越新越好,关键是匹配。
我自己现在用的主流组合是这样的:
- JDK 17
- Gradle 8.x
- AGP 8.x
- compileSdk 34或35
这几个数字之间的关系,我用一张对照表给你看(这里写的是近年稳定组合,越新的组合对电脑性能要求也越高):
| JDK版本 | 最低AGP版本 | 建议Gradle版本 | 适用场景 |
|---|---|---|---|
| JDK 11 | AGP 7.0+ | Gradle 7.x | 老项目维护,低配置电脑 |
| JDK 17 | AGP 8.0+ | Gradle 8.x | 新项目首选,稳定主流 |
| JDK 21 | AGP 8.4+ | Gradle 8.6+ | 尝鲜新特性,非必要不追 |
判断依据其实很简单:Android Studio里打开一个项目时,它会自动读取工程里的Gradle版本和AGP版本,然后检查你当前IDE和JDK能不能支持。报错信息里一般会直接告诉你"AGP x.y.z requires Gradle x.y.z"或者"requires Java 17"。看到这种提示,不用慌,按它的要求去调整版本就行。我给新手的建议是:别折腾老版本,都是当年被坑过才总结出的血泪经验。你直接用最新稳定版Android Studio,新建项目的时候选择"Empty Views Activity"模板,IDE自动帮你生成一套匹配好的配置,大概率不用手动改。
Android SDK Platform版本则对应的是手机系统版本。比如API 34对应Android 14,API 35对应Android 15。你装的SDK Platform版本至少要等于项目的compileSdk值,否则编译时找不到对应平台库。模拟器的系统镜像又是另一个维度,你可以装低版本的镜像来测试老设备兼容性,也可以装最新的镜像体验新特性。这些都不是多难的事,难的是没人给你讲清楚它们之间的关系,你只能一个个碰。现在我把这颗雷拆了,你照着做就行。
3. 实操记录:从零装出一个能跑的环境
3.1 内置JDK与JAVA_HOME:到底要不要自己装Java
先回答最让人纠结的问题:新版的Android Studio到底要不要单独装JDK?我的结论是:日常开发不需要。Android Studio从Arctic Fox版本开始就内置了JetBrains Runtime,它预装在IDE目录里,安装完Studio就等于有了可用的JDK环境。
那什么情况下需要自己装JDK?一般是命令行打包的时候。你在终端里跑gradle assembleRelease这类命令,如果系统PATH里找不到java,就会报错。另外如果你要在Jenkins这类CI服务器上打包,服务器上通常没有Android Studio,这时候就得手动装一个JDK并配置JAVA_HOME。
验证JDK是否可用非常简单。在终端里执行:
java -version如果系统能打印出类似下面这样的信息,说明JDK已经就绪:
openjdk version "17.0.8" 2023-07-18 OpenJDK Runtime Environment (build 17.0.8+7) OpenJDK 64-Bit Server VM (build 17.0.8+7, mixed mode, sharing)如果你的电脑上没有JDK,可以去发行版官网下载一个JDK 17的安装包,安装后配置环境变量。以macOS为例,在~/.zshrc里加上:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home export PATH=$JAVA_HOME/bin:$PATHWindows用户则需要在系统环境变量里新建JAVA_HOME,指向JDK的安装目录,然后编辑Path变量,加上%JAVA_HOME%\bin。配置完成后重新打开终端,执行java -version确认即可。这里有个小提醒:改完环境变量记得开新的终端窗口,旧窗口读到的还是老配置,很多人改了半天没反应,其实就差这一步。
3.2 Android Studio下载安装与SDK Manager配置
下载Android Studio最简单的方式是到官方开发者网站找到对应自己操作系统的安装包。Windows版是个exe,macOS版是dmg,Linux版有tar.gz和deb两种。我这里以Windows和macOS为例说一下需要注意的点。
Windows安装时有几个选项值得留意:如果你机器上还没有SDK,安装向导会让你选择SDK组件的安装路径,默认在%LOCALAPPDATA%\Android\Sdk。我是建议改成你自己好记忆的路径,比如D:\Android\Sdk,因为后续配置环境变量、命令行工具都要引用这个路径,路径里尽量不要有空格和中文,不然会有一些莫名其妙的问题。安装完打开Android Studio,它会自动进入SDK Manager的引导界面,让你勾选要装的组件。我建议至少勾上这几项:
- Android SDK Platform(选一个最新稳定版即可,一般34或35)
- Android SDK Build-Tools(选一个稳定版本,默认即可)
- Android SDK Platform-Tools(这个是adb调试工具所在)
- Emulator(如果要跑模拟器的话)
至于系统镜像,先不用急着装,等你建虚拟设备的时候再按需下载,省磁盘空间。下载过程的耗时取决于你的网络,这部分确实会有点考验耐心。如果进度条半天不动,可以先把下载任务暂停,检查磁盘空间和网络状况,再重试。国内开发者圈子里有一个通用的优化办法是给Gradle配置国内镜像仓库,这个我在第4节详细说。
3.3 创建第一个工程,完整跑通构建流程
环境装好之后,用一个小项目来验证一切是否通畅。在Android Studio欢迎页选择"New Project",选"Empty Views Activity"模板,这是目前最干净的一个起点,没有多余代码。项目名称可以就叫"ZuoShaZiMa",包名一般用反域名格式,比如com.example.zuoshazima。Package Name是APP的唯一标识,后面上架应用商店要用,虽然可以后改,但改起来牵扯到一堆文件,建议一开始就想好。语言选Kotlin,Minimum SDK我建议选API 24,也就是Android 7.0,这样既能覆盖绝大多数设备,又不用背老系统兼容性的包袱。选完点Finish,Android Studio会开始第一次Gradle同步。
第一次同步是一个比较漫长的过程,它会把Gradle本身、AGP插件、各种依赖库全部下载到本地。原因很简单,Gradle采用"按需下载"模式,本地没有的组件都会临时去找仓库下载。下载完成后,你可以在项目根目录看到这样一个结构:
ZuoShaZiMa/ ├── app/ │ ├── src/main/ │ │ ├── java/com/example/zuoshazima/ │ │ └── res/ │ └── build.gradle.kts ├── gradle/ ├── build.gradle.kts ├── settings.gradle.kts └── gradle.properties看懂这个结构是环境搭建最重要的一步。settings.gradle.kts是工程的顶层配置,告诉Gradle这个项目包含哪些模块;根目录的build.gradle.kts声明插件和公共配置;app/build.gradle.kts才是你写APP级别配置的地方,包括compileSdk、minSdk、依赖库等。构建产物最终会放在app/build/outputs/apk下面,APK就是你能装到手机上的安装包。
首次构建完成后,工具栏上会出现绿色的"Run"按钮。点一下,如果一切正常,你会看到Gradle面板执行assemble任务,最终弹出一个模拟器窗口或者连接的真机列表,APP装上去跑起来了,屏幕上显示一个Hello World的空页面。到这一步,你的开发环境就算正式通关了。
3.4 模拟器配置与真机连接,两种方式怎么选
模拟器的配置在AVD Manager里操作。打开方式是在Studio的欢迎页点"More Actions",选"Virtual Device Manager",然后点"Create Device"。选中你想模拟的手机型号,比如Pixel 8这类参考机型,然后选一个系统镜像。系统镜像我建议优先选"API 34"或者"API 35"的Google APIs版本,带Google APIs的好处是可以调用Google服务接口,调试的时候功能更全。镜像下载好后,模拟器就能启动了。
模拟器性能优化是第一优先级。在现在主流电脑配置下,新建AVD时建议把图形选项设成"Hardware - GLES 2.0",CPU架构选x86_64,内存按你物理机内存的一半左右分配,比如16G内存的电脑分4G给模拟器。初次启动模拟器会比较慢,因为它要冷启动整个安卓系统,之后只要不关机,再打开就快多了。
再说真机连接。以安卓手机为例,先在"设置 -> 关于手机"里连续点击版本号七次,开启开发者选项,然后在开发者选项里打开"USB调试"。用数据线连上电脑,手机弹出"允许USB调试"的授权弹窗,点确定。如果一切顺利,Studio的设备列表里就会出现你的手机型号。Windows用户可能还需要装一下手机厂商的USB驱动,这个通常在手机官网的下载中心能找到。
真机和模拟器怎么选?我的习惯是:UI开发用模拟器,因为可以随便调整屏幕尺寸和系统版本;涉及相机、蓝牙、GPS这类硬件功能,必须用真机实测,因为模拟器对传感器的模拟并不真实。还有一点,真机调试的构建速度快一些,因为不需要启动模拟器那一套虚拟机开销。两条路都走通,环境这边就万无一失了。
4. 环境搭建中的高频问题与排查思路
4.1 构建慢、依赖下载卡住:Gradle镜像仓库的配置方法
只要在国内做开发,这个问题早晚会遇到。Gradle默认从Google的Maven仓库和Maven Central下载依赖,某些网络条件下速度确实不理想。表现就是Gradle同步转圈转半天,偶尔还直接超时报错。
解决办法是为Gradle配置镜像仓库。打开项目根目录的settings.gradle.kts,在dependencyResolutionManagement的repositories块里,把官方仓库替换成镜像仓库,配置完大概是这个样子:
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { maven("https://maven.aliyun.com/repository/google") maven("https://maven.aliyun.com/repository/central") maven("https://maven.aliyun.com/repository/gradle-plugin") google() mavenCentral() } }注意我把镜像仓库写在前面,官方仓库兜底在后面。这种写法的好处是,能走镜像的依赖就走镜像,万一某些冷门依赖镜像里没有,还能回落到原生仓库,不会出现"配置完镜像反而找不到依赖"的尴尬。改完配置后在Android Studio里点一下"Sync Now",再观察下载速度,通常会有立竿见影的效果。
另外还有几个手动加速的办法:一个是修改gradle.properties里的org.gradle.jvmargs,把Gradle运行内存调大,比如-Xmx4096m,这样构建过程不容易因为内存不足被系统杀掉;另一个是打开Android Studio的"File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle",勾上"Offline work",在依赖已经全部下载过一遍之后,离线构建能快很多。但要注意,勾了离线模式之后新依赖下载不了,所以只在旧项目反复构建时用。
4.2 版本冲突与SDK组件缺失:如何读懂构建报错
构建报错大概是开发环境里最劝退人的东西。报错信息一屏一屏刷下来,英文加堆栈,新手很容易慌。我的建议是,第一次遇到报错先别急着全看,只找两类关键词:第一类是FAILURE: Build failed with an exception后面的原因摘要,第二类是What went wrong:后面的直接描述。这两行会把问题定位到具体配置。
最常见的版本类报错有几种。Minimum supported Gradle version is x.x表示Gradle版本太低,去gradle/wrapper/gradle-wrapper.properties里改distributionUrl,把版本号调高再同步。The plugin requires Java x表示JDK版本不够,去检查Studio的JDK设置,或者补装对应版本的JDK。Failed to find target with hash string 'android-34'说明你指定的SDK Platform没装,打开SDK Manager勾上对应版本安装即可。
还有一类是依赖冲突,报错里通常会出现Dependency conflict或者More than one file was found with OS independent path。这类问题多半是多个第三方库带进了同一个底层库的不同版本。解决办法一般有两个:要么在app/build.gradle.kts里用implementation显式指定统一版本,要么用exclude把重复的文件排掉。前者更治本,我一般优先用。
第三方依赖解析失败也是一大类。报错类似Could not resolve com.xxx:yyy:1.0.0,十有八九是仓库里没有这个库的指定版本。遇到这种情况先别怀疑网络,去这个库的官方发布页看看版本号是否存在,很多时候是你根据教程抄的版本号已经下架了,换一个存在的新版本就行。
4.3 高频问题速查表:能查表解决的错误别去翻源码
为了让你在爬坑的时候少走弯路,我把这几年带新手遇到的经典环境问题整理成一张速查表。每个问题都是我或者身边的人真实碰到过的,解决方式也都是实测有效。
| 问题现象 | 常见原因 | 解决方式 |
|---|---|---|
| SDK location not found | Studio没有找到SDK路径 | 在项目里新建local.properties,写上sdk.dir=你的SDK路径 |
| Gradle sync失败:Connection timed out | 网络访问仓库不稳定 | 按4.1节配置镜像仓库,关闭代理设置 |
| 手机连上电脑没反应 | USB调试没开或驱动缺失 | 开启开发者选项和USB调试,安装厂商驱动 |
| 模拟器启动一闪而过 | 硬件加速未启用或Hyper-V冲突 | 检查BIOS里的虚拟化开关,关闭Hyper-V后重启 |
| 构建提示build-tools缺失 | build-tools版本未安装 | 打开SDK Manager安装对应版本并重启 |
| aapt2 process unexpectedly exit | 资源文件里可能有非法字符 | 按报错里的文件路径检查资源文件名和内容 |
| 安装APK提示INCOMPATIBLE | 手机上的旧版APP签名不一致 | 卸载旧版APP后再安装调试包 |
| 启动模拟器特别慢 | 未使用硬件加速或内存分配太小 | 在AVD配置中开启硬件加速,分配至少2G内存 |
| 代码提示不出现 | 项目还没完成Gradle同步 | 等同步完成后点"Sync Project"刷新 |
| 构建内存不足被杀掉 | Gradle运行内存不够 | 在gradle.properties里调大org.gradle.jvmargs |
这张表值得你收藏一下。等哪天真碰上对应问题,先来查表,能省下去网上漫无目的地翻帖子的时间。我当年要是有这么一张表,估计能少熬好几个通宵。
4.4 一个容易被忽略的细节:Gradle的JVM与内存配置
很多人环境装好了,项目也能跑了,但跑大项目的时候构建特别慢,甚至直接报OutOfMemoryError。问题通常不在SDK,不在网络,而在gradle.properties里没配好Gradle自身的内存。
Gradle本身是一个运行在JVM上的程序,默认给它分配的内存是有限制的,一般是2G左右。现代项目动辄几十个模块、几百个依赖,2G明显不够。我推荐你在项目根目录的gradle.properties里加上这几行配置:
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m -Dfile.encoding=UTF-8 org.gradle.parallel=true org.gradle.caching=true org.gradle.daemon=true逐个解释一下。-Xmx4096m是给Gradle分配最大4G堆内存,具体大小按你的电脑内存调整,电脑内存够大可以给到6G甚至8G;MaxMetaspaceSize控制的是类元数据的空间,项目大的时候这里也容易爆;parallel=true开启模块并行构建,多模块项目收益明显;caching=true开启构建缓存,东西只要编译过一次就不会重复编译;daemon=true让Gradle进程常驻在后台,不用每次构建都冷启动。这几项配完之后,你会明显感受到构建速度不一样。
除了Gradle的内存,还有Android Studio自己的内存。在Studio的Help -> Change Memory Settings里,把IDE heap size调高一些,至少2G,代码扫描、索引的时候流畅度会好很多。但注意别把电脑内存全部塞给这些工具,操作系统自己也得留一点余地,否则电脑先卡死,反而更慢。
5. 给后续实战课准备的几个前置建议
5.1 先想清楚"做啥子嘛"这个APP到底怎么做
环境跑通之后,后面文章会开始进入真正的开发环节。我先把项目的整体规划在这里铺垫一下,这样你学习的时候心里有数。做啥子嘛其实是一个典型的"决策助手"类工具,它的核心使用场景就是当你面对一堆选项却不知道该选什么的时候,用它来强制做个决定。核心功能可以拆成这么几块:
第一块是"随机决策"功能:用户输入几个选项,比如"火锅、烧烤、面条",APP随机给你一个结果。实现不复杂,核心就是集合和随机数,用来学习列表操作和状态管理再合适不过。第二块是"日常推荐"功能:预设一些场景化的小建议,比如"不知道去哪儿玩"的时候给你推荐附近公园、咖啡馆、电影院,这就涉及到数据组织和页面跳转。第三块是"历史记录"功能:把你每次纠结出来的决定存到本地数据库里,隔段时间回看还挺有意思,这一块能自然引入数据存储的知识点。
我选择这样一个项目来做整个系列的主线,是因为它足够简单,但又不至于简单到什么都学不到。每一步开发都能对应一个明确的知识点,做完之后是真的能上架的完整产品,不是那种只活在教程里的废物项目。后续的文章我会按照这个规划一步步写下去,第一课环境只是拉开序幕。
5.2 一个多年来的体会:环境搭建的耐心,是最值得的投资
写到这里,我想掏心窝子说几句。从大学第一次配开发环境被虐到怀疑人生,到现在带着团队做项目,我越来越觉得"愿意花时间把环境弄明白"这件事,才是开发路上最值得的投资。工具链就像厨房里的锅碗瓢盆,做饭的手艺再高,锅都点不着火,菜也上不了桌。
我把自己的经验浓缩成三条建议,送给打算跟着这个系列走完的朋友:
第一,遇到环境问题别逞强,善用报错信息。报错信息里每一个英文单词都是线索,把完整报错复制下来去搜索,比你自己盯着屏幕猜强一百倍。第二,每个版本的更新公告都值得读一遍,尤其是Gradle和AGP的版本发布说明,版本适配的坑大多在公告里说得很明白。第三,环境搭建的每一步操作都要知其所以然,别只会点下一步。你用Android Studio点一下按钮能创建模拟器,但如果你明白AVD背后其实就是一台带独立内核的虚拟机,后面排查性能问题的时候思路就会清晰得多。
后面的实战系列马上就会开始动手写代码了。下一课我们会正式创建做啥子嘛这个项目,把它的第一个页面搭出来,从主界面开始一点一点丰富功能。你只要把这一课的环境准备好,到时候跟着敲就行。如果搭建过程中遇到了这篇文章没写到的问题,也欢迎在评论区留个言,我看到了会尽量回复。行,这一课就到这儿,下一课见。