ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Android Studio入门教程:从环境配置到构建第一个App

2026/10/6 3:16:36 拓冰建站 浏览量
Android Studio入门教程:从环境配置到构建第一个App 如果你决定做安卓App不管是为了交课程作业、验证一个点子还是认认真真想入门移动开发Android Studio这套工具链迟早要过一遍。很多新手真正卡住的往往不是代码逻辑本身而是环境那一堆事下载装哪个版本、首次启动怎么配置、Gradle同步怎么这么慢、模拟器怎么起不来。这篇教程就把“从零到第一个能跑的App”整条路完整走一遍按我平时带新人时最常踩坑的顺序来讲尽量让你少走弯路。适合刚接触编程、或者有点Java/Python基础但没碰过安卓的同学参考。1. 环境准备装好工具链再谈写代码1.1 版本选择最新稳定版优先别碰 Canary打开 Android Studio 官网developer.android.com/studio就能看到下载页这里有 Windows、macOS、Linux 三个平台的安装包Windows 用户直接下载 .exe。我建议第一次接触的直接选最新稳定版别碰 Canary 或 Beta那些版本是给喜欢尝鲜的人准备的功能不完整还容易出现莫名其妙的问题新手完全没必要凑热闹。电脑配置方面官方要求的底线很低4GB内存但实际体验下来8GB内存是舒服的底线16GB更稳。Android Studio 本身吃内存再加上模拟器、浏览器开个文档4GB机器开个工程风扇就起飞了。硬盘建议预留至少20GBSDK、系统镜像、Gradle缓存都是吃硬盘的大户。如果遇到旧项目打不开、需要历史版本的情况官网页面左侧有“Previous releases / 历史版本”入口或者去 JetBrains 的存档页面翻。我个人经验是新项目用新版本老项目用老版本别强行用最新版打开老工程Gradle 和 AGP 的兼容性问题能把人折腾到怀疑人生。1.2 下载安装与中文界面设置安装过程没什么技术含量一直 Next 就行。唯一要注意的是安装路径不要带中文和空格比如别装到C:\Program Files (x86)这种默认路径其实可以但要避免C:\下载软件\这种中文目录。同理工程文件路径也尽量不要中文编码问题都是在这种细节上埋雷的。首次启动会进入 Setup Wizard安装向导会让你选 Standard 还是 Custom建议直接选 Standard它会自动帮你装好 SDK 基础组件。这里有一个容易忽略的知识点Android Studio 自带 JDK叫 JBRJetBrains Runtime所以你不需要单独装 Java 环境网上很多老教程让你先配 JDK那都是老黄历了。关于中文界面现在比以前方便太多了。新版 Android Studio 在File - Settings - Plugins里搜Chinese Language Pack安装后重启就是中文界面。另外部分新版本在Settings - Appearance Behavior - System Settings - Language and Region里能直接切换语言。建议老手用英文新手用中文会顺很多至少按钮位置不会找错。1.3 第一道坎Gradle 同步到底在干嘛装好之后你随便新建一个项目打开过程会卡在一个叫Gradle Sync的步骤上第一次可能转圈几分钟甚至更久。这个阶段劝退了无数新手所以提前说一下它是什么。Gradle 是一个构建工具负责帮你下载依赖库、编译代码、打包资源。你的项目里写了很多“我要用XXX库”Gradle 就去网络仓库把这些库下载下来再关联到工程里。第一次同步之所以慢是因为它要下载两样东西一是 Gradle 本体几十一百多MB二是项目声明的所有依赖库。国内市场访问默认仓库速度不稳定这时候配置国内镜像就能大幅提速。具体操作是在settings.gradle.kts文件里加上阿里云镜像位置在仓库配置段类似这样pluginManagement { repositories { maven(https://maven.aliyun.com/repository/public) maven(https://maven.aliyun.com/repository/google) google() mavenCentral() gradlePluginPortal() } }配置完记得点一下Sync Now。我试过很多次加了镜像后同步时间能从十分钟级别降到一两分钟。还有一个建议保持网络环境稳定别频繁打断同步半途取消再来更容易出问题。如果同步报错先看底部 Build 窗口里的具体日志不要直接百度报错关键词很多情况看完整错误信息自己就能判断。注意定位 Gradle 问题的核心原则是“看第一条红色错误”不是看最后一堆失败信息。Gradle 报错经常是连环炸最后那个错误往往只是“被连累”的真正的根因通常在第一行。2. 创建第一个App新建工程与目录拆解2.1 新建项目的正确姿势打开 Android Studio选择New Project会看到一堆模板。新手别被“Empty Activity”和“Empty Views Activity”搞晕了。简单说新版本默认推荐Empty Views Activity它给你一个最简单的单页面应用适合做入门起点。如果你看到 Compose 模板那是另一套声明式UI写法我建议第一次接触安卓还是先学传统 View 体系也就是 XML 布局这一套生态和教程资料都更成熟。创建时需要填三个关键信息Name应用显示名称比如“我的第一个App”Package name包名应用唯一ID规范写法是反域名格式比如com.example.myfirstapp全小写不要用中文和大写字母Language选 Kotlin 还是 Java。我的建议是直接选 Kotlin这是当前安卓开发的主流语言新工程模板也都是 Kotlin学起来并不比 Java 更难保存位置注意不要中文路径Minimum SDK 保持默认即可那只是“最低支持安卓版本”的意思默认值足够大多数场景使用。2.2 工程目录逐项拆解项目创建成功后默认展示的是 Android 视图。这个视图帮你把文件分类整理好了但很多新手点进去一脸懵。我建议你先在左上角切换到Project 视图下拉框选 Project看清楚真实的目录结构app/manifests/AndroidManifest.xml应用的“户口本”声明应用包名、组件、权限等核心信息app/java/包名路径/你的 Kotlin 源码所在目录MainActivity.kt就在这里app/res/layout/XML布局文件界面长什么样由这里决定app/res/values/字符串、颜色、主题等资源相当于把“文字和颜色集中管理”app/build.gradle.ktsApp级别的构建配置依赖库都在这里声明Gradle Scripts/整个工程用的 Gradle 配置文件新手最常见的错误是搞不清哪些文件是“代码”、哪些是“布局”。记住一条简单规则界面长什么样看 res/layout界面做什么事看 java 里的 Kotlin 文件。两者通过setContentView(R.layout.activity_main)关联起来这个方法接收布局ID作用是“把这套布局加载成当前Activity的界面”。2.3 资源体系与命名规范res 目录是个很有设计感的东西它把界面、文字、颜色、图片都抽成“资源”运行时按需加载。常用的几个子目录资源类型存放位置作用布局res/layout/界面结构字符串res/values/strings.xml文本集中管理支持多语言颜色res/values/colors.xml配色统一尺寸res/values/dimens.xmldp/sp 尺寸统一管理图片res/drawable/普通图、选择器等应用图标res/mipmap/各分辨率图标命名规范建议全小写、下划线分隔比如activity_login.xml、btn_login、tv_info。这里有一个常见的坑也是很多人搜“android studio 资源重复错误”的原因res 目录下的所有文件默认按文件名去重比如layout/login.xml和drawable/login.xml虽然类型不同但资源名容易混淆会报编译错误更明显的错误是在同目录下放了两个同名不同后缀的文件。解决方法是名字里加上类型前缀比如布局用activity_login、图片用bg_login不要都叫login了事。3. 写界面、写逻辑、跑起来从空白到可交互3.1 用XML搭一个登录页认识三种基本控件新手第一次写界面不用急着学很复杂的布局。以登录页为例只需要三个控件EditText输入框、Button按钮、TextView文本。布局容器我建议先用最直观的LinearLayout它按垂直或水平方向排列子控件比约束布局ConstraintLayout好理解得多。打开app/res/layout/activity_main.xml粘贴如下内容?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android android:layout_widthmatch_parent android:layout_heightmatch_parent android:orientationvertical android:gravitycenter_horizontal android:padding24dp EditText android:idid/etUsername android:layout_widthmatch_parent android:layout_heightwrap_content android:hint请输入用户名 android:inputTypetext / EditText android:idid/etPassword android:layout_widthmatch_parent android:layout_heightwrap_content android:hint请输入密码至少6位 android:inputTypetextPassword / Button android:idid/btnLogin android:layout_widthmatch_parent android:layout_heightwrap_content android:textstring/login / /LinearLayout花几分钟理解这段代码里的门道。layout_width和layout_height是每个控件都必须写的两个属性match_parent表示铺满父容器wrap_content表示跟随内容大小。dp是安卓的长度单位sp是字体专用单位——字体一定要用 sp 而不是 dp因为 sp 会跟随系统的字体缩放设置对无障碍访问很重要。这也是很多人问“app字体设置怎么做”的底层答案想在应用里设置字号定义文本字号用 sp想跟手写字号可以先从 XML 里动态改 textSize也可以引入自定义字体文件放到res/font/目录使用。3.2 用Kotlin写交互逻辑点击、提示与页面跳转界面只是静态的样子真正让它“活起来”的是代码逻辑。打开MainActivity.kt我写一个最简单的交互点击登录按钮校验输入是否为空、长度是否够然后弹一个提示再放一个跳转按钮点击打开第二个页面。package com.example.myfirstapp import android.content.Intent import android.os.Bundle import android.widget.Button import android.widget.EditText import android.widget.Toast import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val etUsername findViewByIdEditText(R.id.etUsername) val etPassword findViewByIdEditText(R.id.etPassword) val btnLogin findViewByIdButton(R.id.btnLogin) btnLogin.setOnClickListener { val username etUsername.text.toString() val password etPassword.text.toString() if (username.isNotEmpty() password.length 6) { Toast.makeText(this, 登录成功, Toast.LENGTH_SHORT).show() } else { Toast.makeText(this, 用户名不能为空密码至少6位, Toast.LENGTH_SHORT).show() } } } }几个关键点要理解。findViewByIdT(R.id.xxx)是“根据ID找到界面控件”的动作然后给按钮设置点击监听器setOnClickListener括号里放的是点击后要执行的代码。Toast.makeText就是弹出一个小提示条。这套“找控件 - 设监听 - 处理事件”的流程是安卓开发最核心的套路几乎每个页面都离不开。页面跳转需要多写一步。先新建一个空页面在app/java/包名路径/下右键选择New - Activity - Empty Views Activity它会自动帮你生成SecondActivity.kt和对应的布局文件这是一个便捷做法不用手动建文件再注册。然后给跳转按钮加监听btnRegister.setOnClickListener { val intent Intent(this, SecondActivity::class.java) startActivity(intent) }如果你用了finish()可以关掉当前页面比如登录成功后不想让用户返回登录页就调用它。3.3 把App跑起来模拟器与真机调试点击工具栏的Run 按钮绿色三角形Android Studio 会让你选择运行设备。如果没设备就要先创建一个模拟器。打开 Device Manager工具栏小手机图标点Create device选一个主流机型比如 Pixel 系列系统镜像选 API 30 以上的 x86_64 镜像。第一次创建模拟器要下载镜像几百MB大小耐心等一下。创建完成后启动模拟器这个环节有几个常见体验问题首次启动极慢、冷启动能转一分钟启动后屏幕显示小、卡顿。慢是正常的模拟器本质是一个完整操作系统跑在虚拟机里吃CPU和内存。内存足够的机器建议给模拟器至少2GB内存。真机调试其实更推荐安装测试比模拟器快且真实。步骤很简单手机打开设置 - 关于手机连点“版本号”7次开启开发者模式然后到开发者选项里打开USB调试插上数据线手机弹窗问“允许USB调试”就点允许。之后在 Android Studio 的 Run 设备列表里就能看到你的手机直接运行就行。命令行爱好者可以用 adb 工具查看和管理设备这在排查问题时会救你命adb devices adb install app-debug.apk adb logcatadb logcat是查看应用运行日志的方式App 崩溃时红色的FATAL EXCEPTION就是我们需要盯住的线索。经验不要在第一次运行时就追求看懂所有代码。第一遍只要做到“能跑起来、能点击、能跳转”这个目标就算成功了。很多细节是在后续使用里慢慢理解的先跑通再深入是学安卓最快的路径。3.4 一学完就想做的进阶功能列表、底部导航与WebView很多新手做完第一个页面立刻想做一个“App的主界面”最常见的需求就是底部一级导航栏。这个需求背后的学名叫BottomNavigationView Fragment 架构。思路是这样底部放3个或4个 Tab每个 Tab 对应一个 Fragment页面片段点击 Tab 时动态切换 Fragment 显示区的内容。Fragment 可以理解成“页面里的区块”能独立管理自己的布局和生命周期比直接用三个 Activity 管理起来更简洁。布局大致的结构是LinearLayout FragmentContainerView android:idid/fragment_container / BottomNavigationView android:idid/bottom_nav / /LinearLayout代码侧用FragmentManager做切换这个模板在 Android Studio 里都有现成例子搜Bottom Navigation模板就能生成骨架。先看懂这个结构以后看任何主流App的首页都不懵。还有一个被反复问到的方向是“Android Studio 怎么打包HTML成App”。这个需求通常是想把网页包进壳子里做法是用WebView控件加载本地 HTML 文件或者远程网址。关键代码就几行val webView findViewByIdWebView(R.id.webView) webView.settings.javaScriptEnabled true webView.loadUrl(file:///android_asset/index.html)把 HTML 放到app/src/main/assets/目录下就能在 App 里展示。这样做的应用本质是一个“浏览器壳”适合展示型页面但涉及登录、支付等复杂交互还是写原生页面更稳。4. 新手高频报错与排查实录4.1 Gradle版本与SDK版本不匹配“Gradle sync failed”是新手遇到最多的报错。常见原因有三类网络问题依赖仓库下载慢或失败。对策是配置国内镜像仓库参考上文1.3节。插件版本不匹配项目的build.gradle.kts里声明了 Android Gradle PluginAGP版本比如8.1.0但 Gradle 本体版本太低会报“requires Gradle X.Y”之类的错误。对策是打开File - Project Structure - Project调整 Gradle 版本或者在gradle-wrapper.properties里修改distributionUrl指向正确版本。打开别人的工程从网上下载的教程项目或同事的代码SDK 版本和 Gradle 版本经常和你的环境不一致。我的建议是先别乱改让它同步一次如果同步不成功再看具体是哪一步失败然后针对性调整。解决这类问题的通用套路是先看Build窗口的完整日志把第一条红色错误复制到搜索引擎。不要只看“BUILD FAILED”就觉得完了那个大标题下面往往藏着具体到某个文件甚至某一行的错误位置。4.2 资源重复错误与 R 文件消失资源重复错误英文出现在构建日志里大概是Duplicate resources或Resource ... is already defined。这通常由两种原因引起一是不同目录下出现同名资源文件二是某些文件移动后旧引用还在。解决方法是检查 res 下所有目录确认没有同文件名的文件然后Build - Clean Project再重新构建。还有一种更让人抓狂的情况写代码时R类突然变红报错。这个 R 类是资源和代码间的“翻译官”它不是手写的而是构建时自动生成的。当你的资源文件有错误、XML 语法不对、或者字符串资源里混入了中文字符R 类就可能生成失败导致所有R.id.xxx一起报错。遇到这种情况不要一个一个改 R 引用第一件事是检查res 目录下有没有红点报错的地方改掉后再重新构建。4.3 Android 6.0 运行时权限模拟器上行真机上不行很多新手会经历这个诡异场景代码在模拟器跑得好好的换到真机就闪退或者打电话、拍照的功能明明写了权限却无法申请成功。原因在安卓的安全模型。早期版本安装App时一次性授权所有权限从 Android 6.0API 23开始涉及隐私的权限摄像头、麦克风、定位、通讯录等必须在运行到那一刻动态申请用户可以选择拒绝或“仅在使用时允许”。正确写法是先检查是否已授权没有授权就发起申请在回调里判断结果if (checkSelfPermission(Manifest.permission.CAMERA) ! PackageManager.PERMISSION_GRANTED) { requestPermissions(arrayOf(Manifest.permission.CAMERA), 100) }同时别忘了在AndroidManifest.xml中声明权限uses-permission android:nameandroid.permission.CAMERA /这两个地方缺一不可Manifest 声明是“告诉系统我需要”运行时申请是“征得用户同意”。新手最容易漏掉的是前者或者两者都写了但忘了处理拒绝回调导致用户点了拒绝后App没活路可走。好一点的交互是拒绝后再弹一次说明引导甚至引导用户去系统设置里手动开启。4.4 数据存储与一个安全提醒别在本地存明文密码新手做登录功能经常顺手把用户名密码放进SharedPreferences。这个类用起来确实简单两三行就能存取值val sp getSharedPreferences(user, MODE_PRIVATE) sp.edit().putString(password, password).apply()但它有个让人不安的性质数据会以明文形式存到本地XML文件里。没有加密、没有防护Root 过的手机或者有调试工具的环境下读取这些数据并不困难。我自己早期做过这种功能后来逆向分析时看到明文密码文件感觉就是给自己埋雷。如果只是练手项目我的建议是密码这种敏感信息根本不落盘登录成功后存服务端下发的 Token用EncryptedSharedPreferences或 Keystore 加密存储。这也算是一个安全意识启蒙功能能跑通不等于可以上线安全是从第一行代码就要考虑的。关于“Android Studio 有没有数据库插件”这个问题现在官方已经内置了一个叫Database Inspector的工具在View - Tool Windows - App Inspection里可以实时查看运行中App的数据库表结构和数据。它支持 SQLite 和 Room安卓官方的数据库框架。如果你用 Room 建表完全不需要安装第三方插件就能调试这点比以前方便太多。5. 从跑起来到上架打包、签名与发布成本5.1 Debug版与Release版不只是名字不同Android Studio 默认有一个叫 Build Variants构建变体的概念新手时期只需要知道两种debug和release。在左下角 Build Variants 面板里能切换。Debug版开发调试用包名后缀通常是.debug默认带调试签名可以直接安装到手机日志全开放方便调试。Release版发布商店用默认经过代码压缩和混淆R8体积更小也更难被逆向。发布应用时用的是 Release 版而 Release 包默认不带签名所以你没法直接安装 Release 包必须在打包时配置签名文件。这就是引出签名的原因。5.2 签名文件别把密钥搞丢了安卓应用要求每个正式包必须用签名文件keystore签名签名的作用既是为了证明开发者身份也是为了防止应用被篡改。同一个应用后续更新必须用同一个签名否则系统会拒绝覆盖安装提示“应用未安装”或“签名不一致”。生成签名文件的方式最直观的是在 Android Studio 里操作Build - Generate Signed Bundle / APK - APK - Create new...填写路径、密码、别名。也可以直接用命令行工具生成原理一样keytool -genkeypair -alias myfirstapp -keyalg RSA -validity 3650 -keystore myfirstapp.keystore生成的.keystore文件一定要备份好密码也要记牢。我见过不止一个人因为重装电脑、丢签名文件导致线上应用无法更新的惨案。签名文件丢了等于丢了应用的身份证这是新手中少有人关注但代价极高的坑。打包过程中还会遇到签名版本选择V1、V2、V3。我的建议是默认全选因为 V2 从 Android 7.0 开始支持验证速度更快更安全V1 兼容老版本V3 支持密钥轮换。全选可以让你的 APK 覆盖尽量多的设备。5.3 AAB 和 APK 的区别以及发布成本2021年之后Google Play 要求新应用改用AABAndroid App Bundle格式提交。AAB 不是一个可安装包而是把不同设备所需的资源拆分开再由商店根据用户设备生成对应的 APK好处是体积更小。国内应用市场目前基本还是以 APK 为主所以国内上架通常传 APK。很多人关心“开发一个App并上架大概要多少钱”我用两种视角给个参考。从工具成本看Android Studio 免费、SDK 免费、个人练手成本几乎为零时间才是最大的投入一个简单App从零到能跑认真学一个月就能做到。从商业成本看如果你找外包团队做一个带界面的简单应用市场行情通常两三万起步带后端服务、管理后台、第三方支付等复杂业务的话几万到几十万都很正常。上架平台本身Google Play 注册开发者账号是 25美元一次性费用国内各应用商店以企业或个人开发者身份注册大多不收基础费用但要求提交各类资质材料具体以平台最新指引为准。我的建议是如果这是你第一个练手App不要一上来就想着上架。先在一个自己手机上安装体验收集使用反馈把崩溃率压到接近零再考虑商店审核这些事。上架只是最后一道工序不是目的。5.4 上线前的自检清单我邀请朋友测试过好几个练手项目也被人问过“为什么商店审核没过”这类问题十有八九是下面几个细节没照顾到检查项具体内容图标与名称各尺寸 mipmap 图标是否齐全、应用名称没有违规词权限最小化有没有申请一些根本用不到的权限商店审核非常在意这个隐私合规涉及用户输入数据的是否有隐私政策页面内置日志有没有在发布版里打印敏感日志确认 release 包日志关闭版本与签名versionCode 是否递增、签名文件是否一致真机测试至少考虑 Android 10 和 Android 14 两台真机各跑一遍其中权限最小化是我最想强调的很多人习惯在网上复制代码把人家的权限声明也一起搬来了比如做个计算器却申请了定位权限审核被拒基本板上钉钉。做一个App只申请它真正需要的权限这是基本的专业素养。最后再分享几句大实话我从第一次打开 Android Studio 到现在印象最深的不是某个框架的用法而是“环境问题才是新手第一课”这件事。下载、安装、Gradle、SDK、模拟器每一环都能卡住人而且互联网上很多教程已经过时了版本对不上反而更乱。所以我在文章里反复强调的都是这些年真正把新人绊倒过的地方。这个入门路径接下来的扩展方向我简单指几个自己觉得值得走的基础熟了可以去试试蓝牙开发比如用 App 控制一块 ESP32 开发板这套玩法既硬件又软件特别有成就感也可以认真啃一下 Jetpack Compose那是目前界面开发的新趋势一句话列表、导航、网络请求这两关过了你就从一个“能跑通教程的人”变成了“能做点小东西的人”后面的路越走越宽。