从零开始:使用Android Studio构建首个天气查询应用
1. 项目概述从零构建你的第一个安卓应用2003年安迪·鲁宾创立安卓系统时可能没想到如今全球会有超过30亿台活跃设备运行这个绿色机器人标志的系统。作为移动开发领域的绝对霸主安卓开发已成为程序员必备技能之一。这个教程将带你用最新版Android Studio2023.3.1完成首个具备完整交互功能的APP从环境搭建到最终打包APK全程避开我当年踩过的那些坑。不同于其他教程假设你已经掌握Java基础我会特别说明每个代码片段对应的编程概念。你最终将做出一个带按钮点击事件、页面跳转和简单数据传递的天气查询应用虽然界面简陋但包含了90%安卓应用都具备的核心要素。整个过程不需要任何付费工具你的电脑只要能运行Win10或macOS Big Sur即可。重要提示安装Android Studio时务必确保磁盘剩余空间大于8GBSDK和模拟器会占用大量存储。我见过太多新手卡在安装环节就因为C盘空间不足。2. 开发环境配置2.1 Android Studio安装详解访问官网developer.android.com/studio下载时你会看到两个版本包含Android SDK的完整包约1GB仅IDE的基本包建议选这个后面单独下载SDK选择后者能避免默认安装过时的SDK版本。安装过程中有三个关键选项需要特别注意安装类型选择勾选Standard模式会让IDE自动下载最新SDK但可能包含你不需要的组件。我推荐Custom后手动勾选Android SDKAndroid Virtual DevicePerformanceIntel HAXM或AMD HypervisorSDK组件选择至少勾选Android SDK Platform 34对应Android 14Sources for Android 34查看源码用Android EmulatorAndroid SDK Build-Tools 34.0.0硬件加速配置根据CPU型号选择Intel处理器启用HAXMAMD处理器启用Hypervisor苹果M系列无需特别设置安装完成后别急着创建项目先到Configure → SDK Manager检查以下项目SDK Platforms选项卡确认Android 14已安装SDK Tools选项卡确保Android SDK Command-line Tools已勾选2.2 解决首次运行的典型问题新手常遇到的三个拦路虎及解决方案问题1Gradle构建卡在Downloading gradle-x.x.x-all.zip原因国内网络访问Gradle服务器不稳定解决方案1. 手动下载对应版本zip包版本号看报错信息 2. 放入C:\Users\你的用户名\.gradle\wrapper\dists\gradle-x.x.x-all\一串随机字符\ 3. 重启Android Studio问题2模拟器启动黑屏尝试以下步骤关闭Windows Hyper-V功能在BIOS中开启VT-x虚拟化支持删除现有AVD新建时选择x86_64系统镜像问题3中文乱码修改安装目录下bin/idea.properties文件追加-Dfile.encodingUTF-8 -Dsun.jnu.encodingUTF-83. 创建首个项目3.1 项目模板选择启动Android Studio后选择New Project你会看到各种模板Empty Activity最干净的单页面推荐新手选这个Basic Activity带导航抽屉和悬浮按钮Bottom Navigation底部Tab布局我们选择Empty Activity注意三个关键配置项Name首字母大写的驼峰命名如MyFirstAppPackage name逆域名格式com.yourdomain.appnameSave location路径不要包含中文或空格Language选Java虽然Kotlin是趋势但Java资料更丰富Minimum SDK选API 26Android 8.0覆盖90%以上设备点击Finish后Gradle会开始构建项目可能需要几分钟。构建完成后主要目录结构如下app/ ├── manifests/ │ └── AndroidManifest.xml # 应用配置入口 ├── java/ │ └── com.../ │ ├── MainActivity.java # 主界面代码 ├── res/ │ ├── drawable/ # 图片资源 │ ├── layout/ # 界面XML文件 │ ├── mipmap/ # 应用图标 │ └── values/ # 颜色/字符串等资源3.2 认识关键文件AndroidManifest.xml相当于应用的身份证manifest ... application android:iconmipmap/ic_launcher !-- 应用图标 -- android:labelstring/app_name !-- 应用名称 -- activity android:name.MainActivity android:exportedtrue !-- 允许其他应用启动 -- intent-filter action android:nameandroid.intent.action.MAIN / category android:nameandroid.intent.category.LAUNCHER / /intent-filter /activity /application /manifestMainActivity.java的主干结构public class MainActivity extends AppCompatActivity { Override // 当界面创建时调用 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 加载布局文件 // 在这里添加你的代码 } }activity_main.xml的典型内容androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/android android:layout_widthmatch_parent android:layout_heightmatch_parent TextView android:idid/textView android:layout_widthwrap_content android:layout_heightwrap_content android:textHello World! app:layout_constraintBottom_toBottomOfparent app:layout_constraintLeft_toLeftOfparent app:layout_constraintRight_toRightOfparent app:layout_constraintTop_toTopOfparent / /androidx.constraintlayout.widget.ConstraintLayout4. 构建天气查询应用4.1 界面设计修改res/layout/activity_main.xml添加以下控件一个EditText用于输入城市一个Button用于触发查询一个TextView用于显示结果一个ProgressBar用于加载状态完整代码LinearLayout android:layout_widthmatch_parent android:layout_heightmatch_parent android:orientationvertical android:padding16dp EditText android:idid/cityInput android:layout_widthmatch_parent android:layout_heightwrap_content android:hint输入城市名称/ Button android:idid/queryButton android:layout_widthwrap_content android:layout_heightwrap_content android:layout_gravitycenter_horizontal android:text查询天气/ ProgressBar android:idid/loadingBar android:layout_widthwrap_content android:layout_heightwrap_content android:layout_gravitycenter_horizontal android:visibilitygone/ TextView android:idid/resultText android:layout_widthmatch_parent android:layout_heightwrap_content android:layout_marginTop16dp android:textSize18sp/ /LinearLayout4.2 添加按钮逻辑在MainActivity.java中实现点击事件public class MainActivity extends AppCompatActivity { private EditText cityInput; private Button queryButton; private ProgressBar loadingBar; private TextView resultText; Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化视图 cityInput findViewById(R.id.cityInput); queryButton findViewById(R.id.queryButton); loadingBar findViewById(R.id.loadingBar); resultText findViewById(R.id.resultText); // 设置按钮点击监听 queryButton.setOnClickListener(v - { String city cityInput.getText().toString().trim(); if (city.isEmpty()) { Toast.makeText(this, 请输入城市名称, Toast.LENGTH_SHORT).show(); } else { queryWeather(city); } }); } private void queryWeather(String city) { loadingBar.setVisibility(View.VISIBLE); resultText.setText(); // 模拟网络请求 new Handler().postDelayed(() - { loadingBar.setVisibility(View.GONE); String mockResult city 天气晴 25℃\n空气质量良; resultText.setText(mockResult); }, 1500); } }4.3 添加网络权限真实的天气查询需要网络访问在AndroidManifest.xml中添加uses-permission android:nameandroid.permission.INTERNET /注意Android 6.0需要动态申请危险权限但INTERNET属于普通权限只需声明即可。5. 调试与优化5.1 使用Logcat查看日志Android Studio底部的Logcat窗口是排查问题的利器。在代码中添加日志Log.d(WeatherApp, 开始查询城市 city);通过过滤器可以快速定位你的日志按标签过滤tag:WeatherApp按级别过滤level:DEBUG5.2 解决常见编译错误错误Cannot resolve symbol R清理项目Build → Clean Project重建项目Build → Rebuild Project检查XML文件中是否有错误错误ActivityNotFoundException检查AndroidManifest.xml是否声明了Activity确认Activity的exported属性设置正确5.3 内存泄漏预防在Activity中使用Handler时要注意// 错误写法匿名内部类会隐式持有Activity引用 handler.postDelayed(new Runnable() { Override public void run() { // 如果Activity已销毁这里会导致内存泄漏 } }, 10000); // 正确写法使用静态内部类 private static class MyRunnable implements Runnable { private final WeakReferenceMainActivity activityRef; MyRunnable(MainActivity activity) { this.activityRef new WeakReference(activity); } Override public void run() { MainActivity activity activityRef.get(); if (activity ! null !activity.isFinishing()) { // 安全操作 } } }6. 打包与发布6.1 生成签名APK点击Build → Generate Signed Bundle / APK选择APK新手建议先不选Android App Bundle创建新密钥库路径建议放在项目根目录密码至少8位字符别名自定义名称有效期默认25年选择构建类型Debug测试用自动签名Release发布用选择签名版本V1Jar Signature必须勾选V2Full APK Signature建议勾选6.2 测试安装将生成的APK文件通常在app/release/目录下传输到手机安装。如果安装失败检查手机是否开启了允许未知来源应用安装是否与现有debug版本冲突包名相同但签名不同minSdkVersion是否高于手机系统版本6.3 发布到应用市场虽然我们这个练习项目还达不到上架标准但了解基本流程注册开发者账号Google Play需要一次性支付$25准备素材512x512像素应用图标至少2张截图1080x1920功能描述文案在Google Play Console创建应用上传签名的APK或AAB文件填写内容分级问卷提交审核通常需要1-3天7. 进阶学习建议完成这个基础项目后你可以继续扩展连接真实天气API使用Retrofit库发起网络请求解析JSON响应数据添加网络状态检查增加数据持久化使用SharedPreferences存储最近查询记录学习Room数据库框架优化UI体验添加下拉刷新功能实现天气图标动画支持主题切换学习架构组件ViewModel管理界面数据LiveData实现数据观察使用Repository模式分离数据源推荐的学习路线图先掌握Java核心语法面向对象、集合、IO学习Android四大组件Activity、Service、Broadcast、ContentProvider深入理解Fragment和ViewModel掌握主流开源库Retrofit、Glide、Room学习性能优化技巧内存管理、启动优化

相关新闻

PostgreSQL 18/19 新特性深度解读:从 IO 预取到智能运维,全面提升数据库体验

PostgreSQL 18/19 新特性深度解读:从 IO 预取到智能运维,全面提升数据库体验

本文整理于 HOW 2026 演讲内容,演讲者:德哥,PostgreSQL ACED、IvorySQL 专家顾问委员。 一、如何高效“挖掘”新特性? 演讲者分享了一个有趣的实践:面对 PG 18 已发布的 Release Notes,他利用 AI 工具&…

2026/8/10 11:11:30 阅读更多 →
AIUsageBar:Mac菜单栏集中监控Claude、Cursor、Gemini等AI服务用量

AIUsageBar:Mac菜单栏集中监控Claude、Cursor、Gemini等AI服务用量

1. 先搞清楚 AIUsageBar 到底能帮你解决什么问题 如果你同时在用 Claude、Cursor、Gemini 这些 AI 工具,并且经常在 Mac 上工作,那你大概率会遇到一个很具体的问题: 你根本记不清今天到底用了多少次、花了多少钱、或者还剩多少额度 。 Cla…

2026/8/10 11:11:30 阅读更多 →
5步掌握ppInk:Windows开源屏幕标注工具的实战指南

5步掌握ppInk:Windows开源屏幕标注工具的实战指南

5步掌握ppInk:Windows开源屏幕标注工具的实战指南 【免费下载链接】ppInk Fork from Gink 项目地址: https://gitcode.com/gh_mirrors/pp/ppInk 你是否曾在会议演示时手忙脚乱地切换应用,只为在屏幕上画一个简单的箭头?是否因为在线教…

2026/8/10 11:11:30 阅读更多 →

最新新闻

SpringBoot+Flowable 移动审批实战:UniApp 待办详情如何把业务单据、viewType 与底栏按钮嵌进同一页

SpringBoot+Flowable 移动审批实战:UniApp 待办详情如何把业务单据、viewType 与底栏按钮嵌进同一页

SpringBootFlowable 移动审批实战:UniApp 待办详情如何把业务单据、viewType 与底栏按钮嵌进同一页 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruo…

2026/8/10 13:25:49 阅读更多 →
GetQzonehistory:如何用Python专业级工具完整备份你的QQ空间说说

GetQzonehistory:如何用Python专业级工具完整备份你的QQ空间说说

GetQzonehistory:如何用Python专业级工具完整备份你的QQ空间说说 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾为那些记录青春岁月的QQ空间说说可能丢失而焦虑&am…

2026/8/10 13:25:49 阅读更多 →
基于3D Face HRN与Unreal Engine的单图人脸高精度重建与实时渲染全流程实践

基于3D Face HRN与Unreal Engine的单图人脸高精度重建与实时渲染全流程实践

1. 项目概述:从一张照片到实时渲染的3D人脸 最近在做一个需要将真人角色快速数字化的项目,客户给了一堆证件照,要求是能在Unreal Engine里实时驱动和渲染,效果还得逼真。这听起来像是个天方夜谭,毕竟传统的高精度扫描流…

2026/8/10 13:25:49 阅读更多 →
华为全栈AI赋能金融智能体:从昇腾算力到盘古大模型的实战路径

华为全栈AI赋能金融智能体:从昇腾算力到盘古大模型的实战路径

1. 项目概述:当金融遇见智能体,一场技术与业务的深度登山最近几年,AI领域最让人兴奋的叙事之一,莫过于“智能体”概念的全面崛起。它不再是那个只会被动回答问题的聊天机器人,而是被赋予了目标、记忆、工具使用和自主决…

2026/8/10 13:25:49 阅读更多 →
5分钟构建基于YOLOv8的FPS游戏AI自瞄系统:从零到实战的完整指南

5分钟构建基于YOLOv8的FPS游戏AI自瞄系统:从零到实战的完整指南

5分钟构建基于YOLOv8的FPS游戏AI自瞄系统:从零到实战的完整指南 【免费下载链接】yolov8_aimbot Aim-bot based on AI for all FPS games 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8_aimbot 在激烈的FPS游戏中,你是否曾因瞄准精度不足而…

2026/8/10 13:25:49 阅读更多 →
5分钟快速上手ncmdumpGUI:网易云NCM文件解密转换完整指南

5分钟快速上手ncmdumpGUI:网易云NCM文件解密转换完整指南

5分钟快速上手ncmdumpGUI:网易云NCM文件解密转换完整指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 还在为网易云音乐下载的NCM格式文件无法在…

2026/8/10 13:24:49 阅读更多 →

日新闻

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南 【免费下载链接】graphql-css A blazing fast CSS-in-GQL™ library. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-css GraphQL-CSS是一个基于GraphQL的CSS-in-GQL™库&#xff0…

2026/8/10 0:00:02 阅读更多 →
告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcode.com/…

2026/8/10 0:00:02 阅读更多 →
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案 【免费下载链接】BepInEx.ConfigurationManager Plugin configuration manager for BepInEx 项目地址: https://gitcode.com/gh_mirrors/be/BepInEx.ConfigurationManager 你是否曾经因为游戏插件的复杂…

2026/8/10 0:00:02 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/10 1:05:29 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/10 1:05:29 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/10 1:05:29 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/9 17:05:02 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/10 1:05:29 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/9 17:05:02 阅读更多 →