第 3 篇|Android 项目结构解析与第一个界面 —— Hello, CSDN!
第 3 篇Android 项目结构解析与第一个界面 —— Hello, CSDN!拆解 Android 项目核心文件搭建第一个可运行界面搞定环境与布局基础哈喽各位零基础想入门 Android 开发的小伙伴们 关于Android Studio全面指南可以看Android Studio全面指南从入门到核心功能详解Android Studio开发基石手把手详解JDK与SDK配置这一篇我们正式进入实战环节今天我们要做三件事彻底搞懂 Android 项目的目录结构知道每个文件是干嘛的理解 Android 中最核心的概念之一 —— Context手把手搭建你的第一个 Android 界面并让按钮响应点击事件全程保姆级讲解附带新手必踩的坑点清单跟着做就能把 App 跑起来。废话不多说直接开始一、Android Studio 安装避坑补充版SDK、HAXM、模拟器虽然前面已经讲过 AS 的安装但很多新手在后续配置中还是会踩坑。这里重点补充 3 个核心避坑点直接决定你的项目能否正常运行、模拟器是否流畅。1. SDK 路径配置避坑重中之重SDKSoftware Development Kit是 Android 开发的核心工具包包含了编译、调试、运行 App 所需的所有资源。路径配置错误会导致项目无法编译。✅ 正确操作打开 AS进入 File → Settings → Appearance Behavior → System Settings → Android SDKMac 系统为 Android Studio → Settings → 同上SDK Platforms 选项卡勾选推荐版本新手选 API 33 或 34兼容性好点击 Apply 下载SDK Tools 选项卡勾选 Android SDK Build-Tools、Android Emulator、Android SDK Platform-Tools、Intel x86 Emulator Accelerator (HAXM installer)Intel CPU 必装重点检查 SDK 路径确保路径是纯英文、无空格、无中文例如 D:\Android\SDK❌ 常见坑点路径含中文或空格如 C:\Users\张三\AppData…→ 编译时会出现莫名其妙的错误SDK 下载失败或速度慢 → 配置国内镜像源百度「Android SDK 国内镜像」获取地址随意删除 SDK 文件夹内的文件 → 可能导致工具缺失只能重新下载2. HAXM 加速安装避坑模拟器流畅关键HAXMIntel Hardware Accelerated Execution Manager是 Intel 的硬件加速工具能让模拟器运行速度提升 10 倍以上。没有它模拟器会卡到怀疑人生。✅ 正确操作在 SDK Tools 中勾选 Intel x86 Emulator Accelerator (HAXM installer) 并下载安装安装完成后重启电脑进入 BIOS开机按 F2/F10/Del视主板而定找到 Intel Virtualization TechnologyVT-x设置为 Enabled❌ 常见坑点提示「未开启 VT-x」→ 进 BIOS 开启虚拟化技术– 提示「与其他虚拟化软件冲突」→ 关闭 VMware、VirtualBox 等软件后重装AMD 处理器用户 → 无需安装 HAXM改选 Android Emulator Hypervisor Driver for AMD Processors3. 模拟器创建避坑避免黑屏、启动失败模拟器是调试 App 的核心工具创建不当容易出现「启动失败」「黑屏」「卡死」等问题。✅ 正确操作点击 AS 顶部工具栏的 Device Manager手机小图标→ Create device选择设备型号新手推荐 Pixel 5 或 Pixel 6尺寸适中兼容性好选择系统镜像勾选 x86_64 架构选择与 SDK 对应的版本如 API 33点击 Download 下载镜像模拟器配置默认即可可修改名称方便识别启动模拟器选中后点击 Launch首次启动需 1-2 分钟耐心等待❌ 常见坑点启动后黑屏 → 检查 HAXM/Hyper-V 是否安装成功若不行删除模拟器重新创建模拟器卡顿 → 关闭后台程序或编辑模拟器设置将 Memory 调整为 2GB模拟器占用 C 盘空间 → 可在 SDK 设置中修改 AVD 存储路径至其他盘二、Android 项目核心目录解析3 个核心看懂就能上手创建一个新的 Empty Views Activity 项目后AS 会生成一堆文件和文件夹。很多新手看到直接懵了别慌我们只讲最核心的 3 个文件/目录搞懂它们就够你入门了。项目目录一览Project 视图MyApplication/ ├── app/ # 主模块99% 的代码都在这里 │ ├── src/ │ │ ├── main/ │ │ │ ├── java/com/example/... # Kotlin/Java 源代码 │ │ │ │ └── MainActivity.kt # 主界面逻辑 │ │ │ ├── res/ # 资源文件夹重点 │ │ │ │ ├── layout/ # 界面布局 XML │ │ │ │ │ └── activity_main.xml # 主界面布局 │ │ │ │ ├── drawable/ # 图片、形状等 │ │ │ │ ├── values/ # 颜色、字符串、尺寸 │ │ │ │ └── mipmap/ # 应用图标 │ │ │ └── AndroidManifest.xml # 应用清单文件重点 │ └── build.gradle.kts # 模块级构建配置 ├── build.gradle.kts # 项目级构建配置 └── settings.gradle.kts # 项目设置1. AndroidManifest.xml —— 应用的「身份证」这个文件是整个 App 的全局配置文件系统通过它识别应用的核心信息。所有界面Activity、权限、服务都必须在此声明。?xml version1.0 encodingutf-8?manifestxmlns:androidhttp://schemas.android.com/apk/res/androidpackagecom.example.hellocsdn!-- 应用包名唯一标识 --!-- 权限声明示例 --!-- uses-permission android:nameandroid.permission.INTERNET / --applicationandroid:allowBackuptrueandroid:iconmipmap/ic_launcher!--桌面图标--android:labelstring/app_name!-- 应用名称 --android:themestyle/Theme.HelloCSDN!-- 全局主题 --!-- 声明主界面 Activity --activityandroid:name.MainActivityandroid:exportedtrue!-- 意图过滤器标识这是启动界面 --intent-filteractionandroid:nameandroid.intent.action.MAIN/categoryandroid:nameandroid.intent.category.LAUNCHER//intent-filter/activity/application/manifest关键点解读package 属性应用唯一包名发布后不可更改intent-filter 中的 MAIN LAUNCHER表示这是 App 的入口界面点击桌面图标打开的就是它需要网络、相机等权限时在 manifest 内添加 uses-permission 标签2. res/layout —— 界面布局的「骨架」res 目录存放所有非代码资源layout 子目录专门放界面布局 XML 文件。每个布局文件对应一个界面相当于界面的「骨架」。默认生成 activity_main.xml是 MainActivity 的布局文件命名规范小写字母 下划线如 activity_main.xml、item_user.xml打开后可切换三种视图Design可视化拖拽所见即所得Code纯 XML 代码编辑Split左右分屏同时查看拖拽和代码新手推荐3. build.gradle.kts —— 项目的「编译配置」Android 项目中有两个 build.gradle.kts 文件新手重点关注 模块级 的位于 app/ 目录下。它控制当前模块的编译配置直接决定项目能否正常运行。// app/build.gradle.ktsandroid{namespacecom.example.hellocsdncompileSdk34// 编译使用的 SDK 版本defaultConfig{applicationIdcom.example.hellocsdnminSdk24// 最低支持 Android 7.0targetSdk34// 目标 SDK 版本versionCode1versionName1.0}}dependencies{// 项目依赖相当于引入外部工具包implementation(androidx.core:core-ktx:1.12.0)implementation(androidx.appcompat:appcompat:1.6.1)// ... 其他依赖}关键注意点compileSdk、minSdk、targetSdk 需匹配新手保持默认即可修改 build.gradle.kts 后必须点击顶部的「Sync Now」同步配置否则修改不生效需要引入第三方库时如 Glide、Retrofit在 dependencies 中添加语句并 Sync三、Context 通俗理解 —— Android 的「环境句柄」Context 是 Android 开发中最基础、也最容易被新手忽略的概念。很多新手写代码时遇到「Context 找不到」「Context 用错」的问题其实用通俗的方式理解一点都不难。Context 就是 Android 应用的「环境句柄」相当于应用的「万能钥匙」或「场景说明书」。生活例子你去餐厅吃饭Context 就相当于餐厅的 「前台」。你需要通过前台才能拿到菜单获取资源、叫服务员调用系统服务、结账执行操作。同样在代码中我们需要通过 Context 才能完成各种操作。Context 的核心作用新手常用作用代码示例获取资源getString(R.string.app_name)启动新界面startActivity(Intent(this, SecondActivity::class.java))弹出 ToastToast.makeText(this, “提示”, Toast.LENGTH_SHORT).show()获取系统服务getSystemService(Context.LAYOUT_INFLATER_SERVICE)新手必记2 种常用 Context类型获取方式生命周期使用场景Activity Contextthis在 Activity 内部与 Activity 一致启动页面、弹 Toast、操作 UIApplication ContextapplicationContext与整个 App 一致数据库初始化、网络请求等全局操作⚠️ 注意不要在 Activity 已销毁后还持有它的 Context否则会造成内存泄漏。工具类中需要使用 Context 时优先传入 Application Context。四、第一个界面ConstraintLayout 拖拽 代码混合开发ConstraintLayout约束布局是 AS 默认的布局方式也是目前最常用、最灵活的布局。新手可以先用拖拽快速搭建再通过代码精细化调整。1. 认识 ConstraintLayout 的核心概念ConstraintLayout 的核心思想是每个控件的位置由它与其他控件或父容器的约束关系决定。每个控件四周有 4 个「约束锚点」小圆圈把锚点拖到父容器边缘或其他控件边缘就建立了约束关系至少需要 水平和垂直各一个约束控件的位置才能确定2. 拖拽搭建「Hello, CSDN!」界面打开 activity_main.xml切换到 Design 视图从左侧 Palette 面板找到 TextView拖到预览界面中央选中 TextView在右侧 Attributes 面板修改属性text输入 Hello, CSDN!textSize输入 24sptextColor选择红色或输入 #FF0000添加约束拖动 TextView 四周的约束点分别连接到父布局的 上、下、左、右 边缘约束线变蓝色即成功3. 查看并理解生成的 XML 代码切换到 Code 视图你会看到以下代码?xml version1.0 encodingutf-8?androidx.constraintlayout.widget.ConstraintLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentTextViewandroid:idid/tv_helloandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textHello, CSDN!android:textColor#FF0000android:textSize24spapp:layout_constraintBottom_toBottomOfparentapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparent//androidx.constraintlayout.widget.ConstraintLayout代码解读属性含义常用取值layout_width / layout_height控件的宽/高match_parent撑满父容器、wrap_content包裹内容、固定值如 100dptext显示的文本任意字符串textSize文字大小单位用 sp可随系统字体缩放textColor文字颜色十六进制颜色值如 #FF0000app:layout_constraintXXX约束属性定义控件与其他控件或父容器的对齐关系4. 运行验证点击 AS 顶部工具栏的绿色三角 Run 按钮选择你创建的模拟器等待编译安装。几秒钟后模拟器上会显示你的 App中间写着红色的 Hello, CSDN!。 恭喜你的第一个 Android 界面成功运行了五、新手必踩坑点清单收藏备用新手开发时90% 的报错都源于以下两个坑提前记住避免走弯路坑点 ①运行报错 INSTALL_FAILED_OLDER_SDK错误信息Installation failed with message INSTALL_FAILED_OLDER_SDK原因模拟器的 Android 版本低于 App 要求的 minSdk。解决方法二选一修改 app/build.gradle.kts 中的 minSdk调低到模拟器支持的版本不推荐会失去新特性推荐创建一个 API Level ≥ minSdk 的新模拟器坑点 ②修改 XML 后运行无变化现象改了 activity_main.xml 里的文字重新运行模拟器上还是老样子。常见原因及解决原因解决方法文件未保存Ctrl SWindows/ Command SMac保存R 文件未同步点击顶部 Sync Now大象图标同步项目缓存问题Build → Clean Project再 Build → Rebuild ProjectXML 语法错误检查标签是否闭合、属性是否写错修复后重新同步改错了布局文件确认修改的是当前 Activity 使用的布局文件六、综合小案例个人名片界面让我们把今天学到的知识综合起来做一个漂亮的个人名片界面。需求说明顶部放置一个圆形头像ImageView头像下方显示姓名TextView姓名下方显示个人简介TextView底部放置一个「关注」按钮Button点击按钮弹出 Toast 提示「感谢关注」步骤 1准备图片资源将头像图片jpg/png复制到 app/src/main/res/drawable 目录命名为 avatar.png小写字母下划线若没有图片可右键 res → New → Image Asset选择一张图片或使用系统图标步骤 2编写布局 XML打开 activity_main.xml切换到 Code 视图输入以下代码?xml version1.0 encodingutf-8?androidx.constraintlayout.widget.ConstraintLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:padding24dpandroid:background#F5F5F5!-- 头像 --ImageViewandroid:idid/iv_avatarandroid:layout_width120dpandroid:layout_height120dpandroid:srcdrawable/avatarandroid:scaleTypecenterCropapp:layout_constraintTop_toTopOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintEnd_toEndOfparentandroid:layout_marginTop48dp/!-- 姓名 --TextViewandroid:idid/tv_nameandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textAndroid 开发之道android:textSize28spandroid:textStyleboldandroid:textColor#333333android:layout_marginTop24dpapp:layout_constraintTop_toBottomOfid/iv_avatarapp:layout_constraintStart_toStartOfparentapp:layout_constraintEnd_toEndOfparent/!-- 简介 --TextViewandroid:idid/tv_bioandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text分享 Android 干货陪你从小白到高手android:textSize16spandroid:textColor#666666android:layout_marginTop12dpapp:layout_constraintTop_toBottomOfid/tv_nameapp:layout_constraintStart_toStartOfparentapp:layout_constraintEnd_toEndOfparent/!-- 分隔线 --Viewandroid:idid/dividerandroid:layout_widthmatch_parentandroid:layout_height1dpandroid:background#DDDDDDandroid:layout_marginTop32dpapp:layout_constraintTop_toBottomOfid/tv_bio/!-- 详细信息 --TextViewandroid:idid/tv_detail1android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text 公众号Android 开发之道android:textSize14spandroid:textColor#555555android:layout_marginTop20dpapp:layout_constraintTop_toBottomOfid/dividerapp:layout_constraintStart_toStartOfparent/TextViewandroid:idid/tv_detail2android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text 坐标北京android:textSize14spandroid:textColor#555555android:layout_marginTop12dpapp:layout_constraintTop_toBottomOfid/tv_detail1app:layout_constraintStart_toStartOfparent/!-- 关注按钮 --Buttonandroid:idid/btn_followandroid:layout_width0dpandroid:layout_height56dpandroid:text关 注android:textSize18spandroid:textColor#FFFFFFandroid:backgroundTint#018786android:layout_marginTop48dpandroid:layout_marginBottom32dpapp:layout_constraintBottom_toBottomOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintEnd_toEndOfparent//androidx.constraintlayout.widget.ConstraintLayout步骤 3编写 Kotlin 逻辑代码打开 MainActivity.kt修改为以下代码packagecom.example.hellocsdnimportandroid.os.Bundleimportandroid.widget.Buttonimportandroid.widget.Toastimportandroidx.appcompat.app.AppCompatActivityclassMainActivity:AppCompatActivity(){overridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)// 关联布局文件setContentView(R.layout.activity_main)// 通过 ID 找到按钮控件valbtnFollowfindViewByIdButton(R.id.btn_follow)// 设置点击监听器btnFollow.setOnClickListener{// 弹出 Toast 提示Toast.makeText(this,感谢关注,Toast.LENGTH_SHORT).show()}}}代码解读setContentView(R.layout.activity_main)将布局文件与当前 Activity 关联findViewById(R.id.btn_follow)通过 ID 获取布局中的按钮控件setOnClickListener { … }Lambda 风格的点击事件代码更简洁Toast.makeText(this, …).show()弹出短暂提示步骤 4运行效果点击 Run等待编译完成。你会看到一个精美的个人名片界面顶部居中显示圆形头像姓名「Android 开发之道」醒目突出底部绿色「关注」按钮点击按钮后屏幕底部弹出「感谢关注」提示2 秒后自动消失七、总结与下篇预告今天的内容信息量不小我们一起来回顾核心收获✅ 环境避坑SDK 路径纯英文无空格、HAXM 加速要装、模拟器创建选对镜像✅ 项目目录AndroidManifest.xml 是身份证、res/layout 放界面、build.gradle 管编译✅ Context 通俗理解它就是访问系统资源的「通行证」Activity 本身就是 Context✅ ConstraintLayout 基础通过约束关系定位控件可拖拽也可手写代码✅ 综合实战完成了个人名片界面掌握 ImageView、TextView、Button 的用法以及点击事件和 Toast从下一篇开始我们将深入 Android 的核心组件首先就是 Activity 的生命周期与页面跳转。理解生命周期是写出稳定、不崩溃 App 的必修课我们下篇见✨ 如果本文对你有帮助欢迎点赞、收藏让更多零基础的小伙伴少走弯路