说起来有点好笑,我见过太多人学 Android 开发,卡住的第一步不是 Java 也不是 Kotlin,而是打开 Android Studio 之后那个 New Project 窗口。一堆英文选项、模板、SDK 版本、包名,还没写一行代码就先懵了。这个工具确实越来越强大,但新版本的功能越多,向导页面对新手就越不友好。这篇文章我就把创建项目的完整过程和每个选项背后的真实含义讲清楚,从安装配置讲到项目跑起来,再讲几个一定会遇到的小毛病,希望能帮你少走点弯路。
我默认看这篇文章的你属于两种情况:一种是完全零基础,刚装好 Android Studio 想建第一个项目试试水;另一种是有过其他语言或平台开发经验,但对 Android 项目的工程结构不太熟。两种情况我下面都会照顾到。
1. 动手之前:先把环境这桶水端平
很多人直接跳过安装细节,一路点 Next,结果建完项目发现模拟器起不来、Gradle 同步失败,回头还得重装,反而更浪费时间。Android Studio 虽然是 IDE,但它不像记事本一样装完就能写,它的核心工作是管理一整条 Android 构建链,所以环境配不齐,后面每一步都可能莫名其妙地报错。
我建议安装的时候留意三个事情。
第一,安装向导会问你需不需要装 Android SDK。这个必须勾上。所谓 SDK,其实就是系统给你提供的一套开发工具包,包括编译用的库、调试工具、模拟器镜像,你可以把它理解成一个装满零件的工具箱。没有它,你写的代码就没有对应的系统 API 可以调用,相当于有了菜谱却没有锅。新手最容易犯的错就是装了 Studio 本体却漏了 SDK,之后再创建一个项目,IDE 直接提示找不到 SDK,火急火燎地跑去重新下载,非常折腾。
第二,要把 SDK 的安装位置记下来。Windows 上默认多半是在C:\Users\你的用户名\AppData\Local\Android\Sdk,macOS 则可能是~/Library/Android/sdk。你不需要背路径,但要大概知道它在哪,因为后面很多配置和报错排查都要用到这个路径。安卓的工具链非常依赖环境变量,ANDROID_HOME这个环境变量在很多场景下需要手动指向上面这个目录,我碰到过很多次“SDK location not found”的报错,最后就是重新指定 SDK 路径解决的。
第三,检查一下 JDK。Android Studio 一般会自带一个 JBR(JetBrains Runtime),大多数情况下你不用手动配 JDK。但如果你电脑里已经装了多个版本的 Java,或者你之前搞过后端开发,那就要小心了,系统环境变量里的全局 JDK 版本可能和 Android 工具链要求的不匹配。新版 Android Studio 对内置 JBR 的版本有一定要求,你没必要死记版本号,遇到问题知道往这个方向排查就行。
再说一下首次启动。打开新装的 Android Studio,它会先跑一个初始化向导,可能要下载一些组件,时间长短取决于你的网速。这里有一个容易踩的坑:初始化过程千万别急着关掉或者中断,否则有些组件只下了一半,下次启动的时候 IDE 会一直卡在加载界面,看起来像死机一样。真遇到这种情况也别慌,去 SDK 目录把未完成的临时文件清掉,重启一下通常就好了。
环境齐了,接下来才轮到真正的创建流程。别小看这一步,你在这个阶段做的每一个选择,都会写在项目配置里,影响你接下来整个开发过程。
2. 向导页面的每个选项,背后都有一笔账
网上很多教程对 New Project 向导都是直接跳过的,跟着视频点几下就完事,根本不管每个字段是什么意思。可等你做到第二、第三个项目的时候,这种“照葫芦画瓢”的方式就会让你非常被动。所以我决定把这个窗口里的每个字段掰开揉碎了讲一遍。
2.1 Application Name 和 Package Name:名字决定包名
你填写的 Application Name 是给用户看的应用名称,也就是桌面图标下面显示的那个名字,中文英文都无所谓。但是注意,这个名字会影响后面代码里很多字符串资源,比如strings.xml里的app_name。所以不要填个“测试123”就完事,你以后要真在自己手机上装这个 App,桌面显示“测试123”,看着就不舒服。
下面那行 Package Name(包名)才是真正重要的事儿。它在开发里扮演的角色的应用的唯一身份标识,你可以理解成你在安卓世界里的身份证号。一旦应用发布到应用商店,这个包名基本就不能改了,所有签名、渠道、热修复体系都要以它为准。如果两个应用包名相同,新安装的会把旧覆盖掉,这是系统层面的规则。
包名的规范写法一般是域名倒过来,比如com.example.myproject。如果你没有自己的域名,用com.example开头也完全可以,很多学习项目都是这么干的。但我有一个建议:从第一个项目开始就养成用完整逆向域名的习惯,别偷懒起一个myapp之类的名字,因为越到后面你越会发现包名是全局的命名空间,所有代码都用它做前缀,起得太缩略,代码组织会很混乱。
2.2 Language、Minimum SDK 和模板:新手怎么选不后悔
Language 选项,现在大部分情况下就是 Kotlin 和 Java 之间的选择。我的建议很直白:新学 Android 开发,直接选 Kotlin。这不是说 Java 不好,而是目前新项目的默认方向、官方文档示例和各类库的适配都已经全面偏向 Kotlin,这门语言的空安全设计也确实能帮你少掉进很多崩溃坑。你如果是零基础,没必要在 Java 上先耗几个月再转 Kotlin,直接主流路线,走得反而顺。
Minimum SDK 的选项,旁边的下拉框直接决定你的应用最低支持到哪个安卓版本。很多人不理解这个概念,我就打个比方:这个选项相当于你只承诺给年龄大于等于某个值的人提供服务。选 23 就是 API 23(Android 6.0),意味着所有安卓 6.0 及以上的设备都能装上你的应用;选 33 就是 API 33(Android 13),那更老一点的手机就没法装了。
这里我特别提醒一句:最低版本选定之后是可以改的,但是提前想清楚会让你少改很多代码。因为有些系统 API 是要判断版本号的,比如动态权限要针对 API 23 以上做适配,如果你的minSdk设置得太高,代码里可能永远走不到老版本分支,可将来一旦你想降级支持老设备,就得回头补一大堆兼容判断。普通学习项目建议选一个覆盖大多数设备的中坚版本,不需要追求覆盖全,能让自己测试方便就行。
接下来是模板。这一块让很多人犯晕,尤其是新版多了不少模板之后。对纯新手来说,最建议选Empty Views Activity,它是“空视图 Activity”,会给你生成一个传统的 XML 布局和对应的 Activity 文件,结构干净,没有任何多余的装饰。而另一个叫 Empty Activity 的模板,在较新版本的 Android Studio 中往往会搭配 Jetpack Compose 来用,生成的是完全用代码写 UI 的 Compose 项目,如果你连 UI 的概念都还没建立,建议先不要碰。
我这么推荐的逻辑是:新手阶段先通过 XML 布局直观地看到界面的层级关系,理解“一个布局文件里套着按钮和文本”,这比一头扎进纯代码的 Compose 思维更贴近安卓的传统知识体系,也方便你搜索各种历史资料。
2.3 Save location 这类隐藏项:目录安排决定后路
很多新手根本不看 Save location 选在哪,默认在用户目录底下,然后所有项目就一股脑堆在那儿了。等你学了三个月,项目数量一多,你会发现目录一片混乱,根本分不清哪个是哪个。
我建议从一开始就建立一个清晰的工作目录,比如在某盘下建一个AndroidProjects文件夹,每个项目以你的应用名或包名的最后一段命名,例如AndroidProjects/MyFirstProject。这样即使以后你换电脑,也能在一分钟之内把整个项目打包带走,而且不用到处找文件。
顺带提一下,向导页底部可能会有 “Create a Git repository” 的勾选项,我推荐第一次就勾上。Git 的版本管理技能,越早接触越有利。哪怕你现在只会 commit 一个命令,也能在你的整个开发生涯里积累下无数个“后悔药”。详情后面我会专门写一节。
3. 点 Finish 之后的前五分钟:Gradle 在替你跑腿
点了 Finish 以后,底部的状态栏会开始疯狂滚动日志,左边是 Gradle 的构建任务列表,很多新手以为这是 IDE 出问题了,其实这是 Gradle 正在初始化项目、拉取依赖、构建构建脚本。你得明白这个过程发生了什么,才会知道哪些等一等就过去,哪些是出错了需要人工介入。
3.1 Gradle 同步到底在同步什么
你要理解 Gradle 干的事,可以用一个比喻:它是整个项目的“施工总指挥”,负责调度所有工序——编译哪些代码、处理哪些资源、打包成什么样、输出到哪里。Android 项目跟纯后端项目不太一样,它的最终产出不是一堆 class 文件了事,而是要打包成 APK,过程中需要处理资源合并、代码压缩、签名、多模块依赖等一大堆事情,别的手工环境搞不定,所以 Gradle 才显得这么重要。
当你创建项目后,Gradle 会读取build.gradle和settings.gradle这些文件,然后去远程仓库下载所有声明过的依赖库。你看到的那些滚动日志,大部分是在干这个。第一次同步往往特别慢,因为需要把基础依赖全部拉下来,几分钟甚至十几分钟都是正常的。如果你网络状况不好,可能同步到一半就失败,这里的高频病我放到后面“踩坑记”里集中说。
这里有个很重要的判断经验:观察日志末端有没有出现“BUILD SUCCESSFUL”字样,有,就说明这次同步成功了,可以继续干活;出现红色的FAILURE,那才是失败了,需要点开“Build Output”看具体是什么问题。不要一看到密密麻麻的日志就慌,多数情况下那个滚动的过程本身就是正常的。
3.2 项目目录只需要先认四个关键位置
同步完成后,展开左侧的Project面板,你会看到一个挺复杂的目录树。别被它吓到,你现阶段只需要认识四个地方。
第一,app模块目录。这是你的应用主体代码所在,几乎 90% 的工作都在这里展开,包括src/main/java(Kotlin 源码)、src/main/res(资源文件)、以及 AndroidManifest.xml。注意,整个项目叫 Project,里面可能会有多个app这种 module,做一个普通应用时,一个app模块就足够了。
第二,app/src/main/java这个包名目录。前面说的包名就在这里变成一个真实的路径层级,你的 MainActivity 就在这个目录下。点开 MainActivity.kt(如果你选了 Kotlin),会看到一个类,它继承自AppCompatActivity或者ComponentActivity,这就是你的“入口页面”。
第三,app/src/main/res/layout下的activity_main.xml,这就是界面布局文件,叫“activity_main”是因为它就是 MainActivity 的布局。你拖拽或者手写控件,改动就会体现在你 App 的界面上。
第四,Gradle Scripts那一堆文件。其中build.gradle.kts(模块级的)才是你以后经常改的东西,依赖库、SDK 版本、应用的版本号都在里面。项目级的build.gradle.kts一般只做全局配置,新手可以不看。
我的建议是,第一周把精力只放在上面这四个位置,其他目录看一眼有个印象就行。不要试图把每个文件都搞懂,否则你会在各种gradle-wrapper.properties、proguard-rules.pro上浪费大量时间,而那些东西短期内跟你的需求没有关系。
4. 第一次运行:从模拟器到屏幕上的 Hello World
项目同步完成,写不写代码都不急,先把它跑起来,这件事本身就会给你一个很大的正反馈——你创建的不只是一个文件夹,而是一个能在屏幕上打开的应用。
4.1 创建模拟器时要避开的镜像坑
点工具栏里的设备下拉框,选择 AVD Manager,然后 Create Virtual Device。AVD 就是 Android Virtual Device 的缩写,模拟器设备。这里有几个坑,我逐个说。
设备型号选择时,建议选一个普通的 Pixel 系列设备配置就行。别小看这一步,屏幕分辨率、有无刘海、是否有物理按键,都会影响你的 UI 预览,所以并不建议一上来就选最顶配的设备,普通款最稳。
最关键的是选系统镜像的步骤。你会看到一列 API Level 的选择,后面还标注了带不带 Google APIs / Google Play。我给你的建议是:学开发阶段,选择不带 Google Play 的镜像(通常写在 System Image 列表里),因为你测试应用时如果需要调试一些能力,不带 Google Play 的镜像权限限制反而少一些。带 Google Play 的镜像虽然更像真机,但它会锁定系统分区,有时候会阻碍调试,纯新手没必要纠结这个差异。
另外是模拟器性能。你在创建时或第一次启动时,可能会碰到提示“x86 emulation currently requires hardware acceleration”,这时你需要到 BIOS 里确认虚拟化技术是否开启。真不是段子,我见过好几个同事的电脑就是这里没开,模拟器启动到了五六分钟还卡在黑屏,都以为是下载的镜像坏了。这个设置改完要重启电脑,所以建议你提前确认好,别等创建完再临时卡壳。
4.2 真机调试的开坑准备
模拟器虽然方便,但跑起来占内存,毕竟它是虚拟了一整个手机系统。如果你身边有安卓手机,我更推荐直接连真机调试,速度和体验都甩模拟器几条街。
真机调试有两个准备工作。第一,进入手机“设置→关于手机”,连续点击版本号大概七次,开发者选项就会被激活。然后回到设置里找到“开发者选项”,打开“USB 调试”。这个操作是官方设计的,不是什么神秘技巧,但确实藏得比较深,第一次找半天很正常。
第二,用 USB 数据线连接电脑,在弹出的 USB 调试授权框上打勾并允许。如果你连着数据线但不弹授权框,多半是数据线只支持充电但不支持数据传输,换一根线就好。还有就是 Windows 上可能需要安装相应的 USB 驱动,主板厂商或者手机厂商官网一般都有,按提示装完即可。
把设备连好后,Android Studio 顶部运行按钮旁边的设备下拉框里会出现你这台手机的设备名,选中它直接点运行,应用就会安装到手机上。注意很多手机上的“USB 安装确认”“仅充电模式弹出”这些系统提示,都得先放行,不然应用一直装不进去。
4.3 常见的三种运行失败
第一次运行失败是最常见的“初体验”,一点也不丢人。我把最多见的情况列一下,你遇到时可以直接对号入座。
第一种,Failed to find target hash。这种通常是系统镜像没装全,或者 API 版本不匹配。解决方法是打开 SDK Manager,把对应版本的 SDK Platform 和 System Image 下载好。因为你创建项目时选的最低版本跟模拟器镜像版本没对上,工具链当然跑不起来。
第二种,The application could not be installed: INSTALL_FAILED_OLDER_SDK。这个就是应用的minSdk比模拟器系统版本还高,模拟器装不上。要么在 AVD 里建一个更高版本系统的镜像,要么在模块级build.gradle.kts里把minSdk降到比模拟器版本低。
第三种,Cannot start emulator。这种错误信息千奇百怪,但多半是硬件加速或镜像文件损坏问题。先检查虚拟化是否开启,再在 AVD Manager 里把你创建镜像右侧的下拉箭头点开,选“Cold Boot Now”,相当于从头冷启动一次模拟器,这个问题非常容易解决。
把应用跑起来以后,看到界面显示出默认的“Hello World!”或者Hello Android!那一刻,你就算正式迈进了 Android 开发的门。不过别高兴太早,接下来的内容才是新项目阶段真正考验人的地方。
5. 新项目跑通之后,这五个问题你会大概率遇到
我接触过很多新手项目,大家遇到的问题高度相似。这些问题不是你的代码写得不对,而是工具链本身的使用问题。把它们一次性讲清楚,你后续可以省掉很多搜报错的时间。
第一大问题:Gradle 下载慢或同步失败。这个太经典了。首次同步要拉一堆依赖,网络一差就是脑溢血现场。解决办法有几个层次:首先,尽量选择在网络状况较好的时间段做首次同步;其次,在国内环境最容易见效的是配置仓库镜像,修改settings.gradle.kts里的仓库地址,把默认远程仓库替换成能快速访问的 mirror 地址,这样依赖下载速度能快不少。这里要养成一个意识:仓库地址是可以配置的,而且你应该把它看懂,因为关系到你以后集成库的体验。
还有一个容易忽略的点:Gradle 和 Android Gradle Plugin(AGP)的版本是有对应关系的,两边不匹配就会同步报错。当你换了项目模板、或者升级了 Android Studio,有时同步就挂了,不用恐慌,去查一下 AGP 版本兼容表,把项目里的版本改成匹配的即可。这个“版本兼容表”是官方给出的,属于开发者的基础常识。
第二大问题:SDK location not found或 “SDK components” 缺失。这种报错往往出现在项目被换过电脑、或者 SDK 路径改了的情况下。你需要做的是:把 Android Studio 的设置里 SDK 路径重新指定到 SDK 的真实位置;或者直接去 SDK Manager 把缺失组件补装。有时候你会发现路径是对的但还是报错,那就关掉整个 IDE,去环境变量里手动加一个ANDROID_HOME指向 SDK 目录,重启一切,问题基本消失。
第三大问题:布局预览视图一片空白。当你打开activity_main.xml的设计视图,结果预览区不显示任何东西,大概率是预览所用的主题或 API 版本有问题。你可以在预览窗口上方把 Android 版本切换成项目支持好的版本,或者改一下应用的 theme 配置。这个问题很碍眼但很安全,不会让程序崩溃,只是 IDE 预览不到罢了。
第四大问题:运行时报错ClassNotFoundException或者ActivityNotFoundException。新手遇到这个会很慌,其实多数情况是AndroidManifest.xml里没有注册对应的 Activity。你在模板创建时它已经帮你注册了 MainActivity,但你自己后来新增页面时,如果忘了在 Manifest 里补一条注册记录,运行的时候就找不到这个活动类。记住一句话:Android 四大组件基本上都要在 Manifest 里“登记”之后系统才知道它存在,这条规则在开发早期会反复遇到。
第五大问题:R类报错或者资源文件丢失。R是 Android 系统生成的资源索引类,它把布局、图片、字符串全部编成整数 ID。当你改了资源文件名、删了图片但代码里还引用它、或者 XML 里的资源引用语法写错了,就会出现R.xxx相关的一堆红色波浪线。这里给一个实用的排查路径:先看右侧 Gradle 面板有没有同步错,没同步就同步一遍看看;再看资源文件命名是否含大写字母或中文(资源文件命名只允许小写字母、数字和下划线,这个规定坑过很多人);最后再确认代码里引用的那个资源确实存在。十几分钟打不住的话,可以做一次Build > Clean Project,再Rebuild Project,大多能恢复。
此外我强烈建议你尽早学会看 Logcat 日志。它相当于手机系统的“黑匣子”,应用一崩溃,红色FATAL EXCEPTION就能看到崩在哪一行、原因是什么。新手最常见的错误是看到一屏日志找不着重点,这时你在 Logcat 上面筛选栏输入FATAL,或者按包名过滤,立刻就能定位崩溃信息。
我把这些常见问题写在最前面,是因为“新项目跑不起来”这个坎真的卡掉很多人。工具这东西,好用是真好用,脾气也真不小,但绝大多数问题靠配置和习惯就能提前避免。
6. 我创建新项目时一直在用的几个小习惯
最后分享几个我刚开始带项目时留下的习惯。它们不一定是最优解,但是经过很多年迭代以后,我确信它们能让你的新项目从第一天起就少踩坑。
第一个习惯,模板一律选 Empty Views Activity 起步。不管外界怎么鼓吹新框架,我都建议新手从最朴素的模板开始。等你有足够的项目感以后,再去尝试 Jetpack Compose、多模块架构,那时候你会明白有哪些东西是框架的功劳,有哪些是你自己写出来的,这种感知很重要。
第二个习惯,项目命名用“类型+名称”的结构。比如WeatherApp、TodoListApp,而不要叫Test001、MyApplication。应用名可以之后改,但工程名和目录名改起来很麻烦。你可以想象一下,Git 提交历史里全是 “Test001 first commit”,时间一长你会根本不知道这个项目是用来干嘛的。
第三个习惯,创建完项目先做一次 Git 初始 commit。不管你在向导页勾没勾 Git,项目创建成功后我会先改一版默认的MainActivity和布局,把里面生成的“Hello World”文本换成有自己项目意义的内容,然后提交一次。这样做的价值是:以后无论怎么改代码,都有一个干净的基线可以回溯,随时能知道“最初的完整状态”是什么样。
第四个习惯,给我的新项目装上几个“基础工具”:Fragment 容器布局、资源目录下的字符串整理、还有日志工具封装。这一步对纯新手可能有点超前,但我想传达的是:新建项目不是写“Hello World”就完了,你后面所有的学习都要在这片土地上展开,基础打牢一点,后面每一课都会轻松一点。
我还习惯把常用设置固定下来,比如关闭自动导入弹窗、打开显示行号、设置统一的代码缩进。这些操作都在 IDE 的 Preferences 里,花不了十分钟,但能省掉后面每一小时的重复操作。记住一些高频快捷键也很有用:Alt+Enter是万能修复键,光标放到红线错误上直接呼出修改建议;Ctrl+Shift+F10运行当前模块;Shift+Shift全局搜索。这几个是使用频率最高的,不夸张地说,每天会用到几十次。
写完这些,我想再重新强调一遍最开始的话:创建 Android 项目这件事,门槛不高,但细节不少。很多人在这一步被工具唬住,以为自己还没准备好学开发,其实只是因为没人把这些选项的“人话版本”讲给他们听。希望这篇文章能帮你把这第一脚踢出去,等你亲手把第一个应用装进模拟器或者真机的时候,那种感觉真的很不错。
以后在开发路上如果再遇到什么看着玄乎的报错,你可以回想一下今天这条链路:环境、向导、Gradle、运行、排错。大部分安卓开发的挫折,最后都能归到这条链路的某一段里,能定位到段落,问题就解决了一半。还有什么想问的,评论区聊。