从零开始:使用Android Studio构建首个天气查询应用
2026/8/10 11:12:28 网站建设 项目流程

1. 项目概述:从零构建你的第一个安卓应用

2003年安迪·鲁宾创立安卓系统时,可能没想到如今全球会有超过30亿台活跃设备运行这个绿色机器人标志的系统。作为移动开发领域的绝对霸主,安卓开发已成为程序员必备技能之一。这个教程将带你用最新版Android Studio(2023.3.1)完成首个具备完整交互功能的APP,从环境搭建到最终打包APK,全程避开我当年踩过的那些坑。

不同于其他教程假设你已经掌握Java基础,我会特别说明每个代码片段对应的编程概念。你最终将做出一个带按钮点击事件、页面跳转和简单数据传递的天气查询应用,虽然界面简陋,但包含了90%安卓应用都具备的核心要素。整个过程不需要任何付费工具,你的电脑只要能运行Win10或macOS Big Sur即可。

重要提示:安装Android Studio时务必确保磁盘剩余空间大于8GB,SDK和模拟器会占用大量存储。我见过太多新手卡在安装环节就因为C盘空间不足。

2. 开发环境配置

2.1 Android Studio安装详解

访问官网developer.android.com/studio下载时,你会看到两个版本:

  • 包含Android SDK的完整包(约1GB)
  • 仅IDE的基本包(建议选这个,后面单独下载SDK)

选择后者能避免默认安装过时的SDK版本。安装过程中有三个关键选项需要特别注意:

  1. 安装类型选择:勾选"Standard"模式会让IDE自动下载最新SDK,但可能包含你不需要的组件。我推荐"Custom"后手动勾选:

    • Android SDK
    • Android Virtual Device
    • Performance(Intel HAXM或AMD Hypervisor)
  2. SDK组件选择:至少勾选:

    • Android SDK Platform 34(对应Android 14)
    • Sources for Android 34(查看源码用)
    • Android Emulator
    • Android SDK Build-Tools 34.0.0
  3. 硬件加速配置:根据CPU型号选择:

    • Intel处理器:启用HAXM
    • AMD处理器:启用Hypervisor
    • 苹果M系列:无需特别设置

安装完成后别急着创建项目,先到"Configure → SDK Manager"检查以下项目:

  • SDK Platforms选项卡:确认Android 14已安装
  • SDK Tools选项卡:确保"Android SDK Command-line Tools"已勾选

2.2 解决首次运行的典型问题

新手常遇到的三个"拦路虎"及解决方案:

问题1:Gradle构建卡在"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:模拟器启动黑屏

  • 尝试以下步骤:
    1. 关闭Windows Hyper-V功能
    2. 在BIOS中开启VT-x虚拟化支持
    3. 删除现有AVD,新建时选择"x86_64"系统镜像

问题3:中文乱码

  • 修改安装目录下bin/idea.properties文件,追加:
    -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8

3. 创建首个项目

3.1 项目模板选择

启动Android Studio后选择"New Project",你会看到各种模板:

  • Empty Activity:最干净的单页面(推荐新手选这个)
  • Basic Activity:带导航抽屉和悬浮按钮
  • Bottom Navigation:底部Tab布局

我们选择"Empty Activity",注意三个关键配置项:

  1. Name:首字母大写的驼峰命名(如MyFirstApp)
  2. Package name:逆域名格式(com.yourdomain.appname)
  3. Save location:路径不要包含中文或空格
  4. Language:选Java(虽然Kotlin是趋势,但Java资料更丰富)
  5. Minimum SDK:选API 26(Android 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:icon="@mipmap/ic_launcher" <!-- 应用图标 --> android:label="@string/app_name"> <!-- 应用名称 --> <activity android:name=".MainActivity" android:exported="true"> <!-- 允许其他应用启动 --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

MainActivity.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:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>

4. 构建天气查询应用

4.1 界面设计

修改res/layout/activity_main.xml,添加以下控件:

  • 一个EditText用于输入城市
  • 一个Button用于触发查询
  • 一个TextView用于显示结果
  • 一个ProgressBar用于加载状态

完整代码:

<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <EditText android:id="@+id/cityInput" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入城市名称"/> <Button android:id="@+id/queryButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="查询天气"/> <ProgressBar android:id="@+id/loadingBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:visibility="gone"/> <TextView android:id="@+id/resultText" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:textSize="18sp"/> </LinearLayout>

4.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:name="android.permission.INTERNET" />

注意:Android 6.0+需要动态申请危险权限,但INTERNET属于普通权限,只需声明即可。

5. 调试与优化

5.1 使用Logcat查看日志

Android Studio底部的Logcat窗口是排查问题的利器。在代码中添加日志:

Log.d("WeatherApp", "开始查询城市:" + city);

通过过滤器可以快速定位你的日志:

  • 按标签过滤:tag:WeatherApp
  • 按级别过滤:level:DEBUG

5.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 WeakReference<MainActivity> 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

  1. 点击Build → Generate Signed Bundle / APK
  2. 选择APK(新手建议先不选Android App Bundle)
  3. 创建新密钥库:
    • 路径:建议放在项目根目录
    • 密码:至少8位字符
    • 别名:自定义名称
    • 有效期:默认25年
  4. 选择构建类型:
    • Debug:测试用(自动签名)
    • Release:发布用
  5. 选择签名版本:
    • V1(Jar Signature)必须勾选
    • V2(Full APK Signature)建议勾选

6.2 测试安装

将生成的APK文件(通常在app/release/目录下)传输到手机安装。如果安装失败,检查:

  • 手机是否开启了"允许未知来源应用安装"
  • 是否与现有debug版本冲突(包名相同但签名不同)
  • minSdkVersion是否高于手机系统版本

6.3 发布到应用市场

虽然我们这个练习项目还达不到上架标准,但了解基本流程:

  1. 注册开发者账号(Google Play需要一次性支付$25)
  2. 准备素材:
    • 512x512像素应用图标
    • 至少2张截图(1080x1920)
    • 功能描述文案
  3. 在Google Play Console创建应用
  4. 上传签名的APK或AAB文件
  5. 填写内容分级问卷
  6. 提交审核(通常需要1-3天)

7. 进阶学习建议

完成这个基础项目后,你可以继续扩展:

  1. 连接真实天气API

    • 使用Retrofit库发起网络请求
    • 解析JSON响应数据
    • 添加网络状态检查
  2. 增加数据持久化

    • 使用SharedPreferences存储最近查询记录
    • 学习Room数据库框架
  3. 优化UI体验

    • 添加下拉刷新功能
    • 实现天气图标动画
    • 支持主题切换
  4. 学习架构组件

    • ViewModel管理界面数据
    • LiveData实现数据观察
    • 使用Repository模式分离数据源

推荐的学习路线图:

  1. 先掌握Java核心语法(面向对象、集合、IO)
  2. 学习Android四大组件(Activity、Service、Broadcast、ContentProvider)
  3. 深入理解Fragment和ViewModel
  4. 掌握主流开源库(Retrofit、Glide、Room)
  5. 学习性能优化技巧(内存管理、启动优化)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询