Android - Hello World 示例
Android - Hello World 示例(更新)
Section titled “Android - Hello World 示例(更新)”让我们开始 Android 开发之旅。在编写您的第一个示例之前,请确保您的 Android 开发环境已正确设置,具体请参阅“Android - 环境设置”教程。本教程假设您对 Android Studio(Android 开发的官方 IDE)有基本的了解。
现在我们将创建一个简单的 Android 应用,使用当前的最佳实践显示“Hello, Modern Android!”。
创建一个 Android 应用
Section titled “创建一个 Android 应用”第一步是使用 Android Studio 创建一个新的 Android 应用。启动 Android Studio。如果您看到欢迎屏幕,点击“New Project”。
-
选择您的项目: 选择项目模板。对于初学者来说,“Phone and Tablet”选项卡下的“Empty Activity”或“Empty Views Activity”(用于基于 XML 的 UI)或“Empty Compose Activity”(用于 Jetpack Compose UI)是一个不错的起点。对于这个经典示例,我们假设选择“Empty Views Activity”。
-
配置您的项目:
- 名称: 输入您的应用名称,例如“HelloWorldModern”。
- 包名 (Package name): 这是您应用的唯一标识符,通常采用反向域名格式(例如
com.example.helloworldmodern)。如果提供了您的姓名和公司域名,Android Studio 会根据它们生成一个。 - 保存位置: 选择保存项目的位置。
- 语言: 在 Kotlin(推荐)或 Java 之间选择。我们将使用 Kotlin 作为主要示例,因为它是 Google 推荐的 Android 开发语言,但在需要清晰说明时提供 Java 对等示例。
- 最低 SDK (Minimum SDK): 选择您的应用将支持的最低 Android 版本。通常选择 API 26 (Android 8.0 Oreo) 或 API 28 (Android 9.0 Pie),以平衡广泛的设备覆盖范围与现代功能。选择较低的 API 级别可以覆盖更多设备,但可能需要更多的向后兼容代码。较高的 API 级别允许使用较新的功能而无需变通方法,但会减少设备覆盖范围。IDE 通常会提供每个 API 级别的设备覆盖统计信息。
- 构建配置语言 (Build configuration language): 新项目通常首选 Kotlin DSL (
build.gradle.kts),但 Groovy DSL (build.gradle) 也常见。
- 点击“Finish”。Android Studio 将设置您的项目并与 Gradle 同步。这可能需要一些时间。
Android 应用的结构
Section titled “Android 应用的结构”在运行您的应用之前,请熟悉现代 Android 项目中的关键目录和文件(使用 Project 窗口中的“Android”视图):
| 序号 | 文件夹/文件 及描述 |
|---|---|
| 1 | app/manifests/AndroidManifest.xml这是清单文件 (manifest file)。它描述了应用的基本特征,定义了其每个组件(activities、services 等),声明了权限,并指定了所需的硬件/软件功能。 |
| 2 | app/java/<your.package.name>包含您的 Kotlin ( .kt) 或 Java (.java) 源文件。默认情况下,它包含一个 MainActivity.kt(或 .java)文件,这是应用启动时启动的入口点 Activity。 |
| 3 | app/java/<your.package.name> (androidTest)用于 Android 检测测试。 |
| 4 | app/java/<your.package.name> (test)用于本地单元测试。 |
| 5 | app/res包含所有非代码资源: |
drawable/ - 用于矢量 Drawable(定义形状的 XML)和其他通用 Drawable 资源(位图、九宫格图)。对于密度特定的位图,使用诸如 drawable-mdpi/、drawable-hdpi/ 等文件夹。 | |
layout/ - 定义应用用户界面结构(例如 activity_main.xml)的 XML 文件。如果使用 Jetpack Compose,UI 在 java 目录下的 Kotlin 文件中定义。 | |
mipmap-<密度>/(例如 mipmap-hdpi、mipmap-xxxhdpi)- 用于密度特定的应用启动器图标。现代应用通常使用自适应图标。 | |
values/ - 包含简单值的 XML 文件:strings.xml(文本字符串)、colors.xml(颜色定义)、dimens.xml(尺寸)、styles.xml 和 themes.xml(UI 外观)。 | |
这里还可以存在其他资源类型,如 anim/、font/、menu/、raw/、xml/。 | |
| 6 | Gradle Scripts包含构建配置文件: |
build.gradle.kts(或 build.gradle)(项目:YourProjectName)- 整个项目的顶级构建文件。配置仓库和全局插件版本。 | |
build.gradle.kts(或 build.gradle)(模块:app)- 模块级构建文件。指定 SDK 版本(compileSdk、minSdk、targetSdk)、applicationId、版本控制(versionCode、versionName)、依赖项以及 app 模块的其他构建设置。 | |
settings.gradle.kts(或 settings.gradle)- 声明包含的模块和插件管理仓库。 | |
gradle/libs.versions.toml(可选但常见)- 用于集中管理依赖项版本的版本目录。 |
以下部分简要概述了一些重要的应用文件。
主 Activity 文件(Kotlin 与 AndroidX)
Section titled “主 Activity 文件(Kotlin 与 AndroidX)”主 Activity 代码,通常是 MainActivity.kt(如果您选择了 Kotlin),是应用主要用户界面和逻辑所在的地方。它被转换为 Dalvik 可执行格式 (.dex) 并在 Android Runtime (ART) 上运行。这是一个使用 AndroidX 库的默认示例:
package com.example.helloworldmodern
import androidx.appcompat.app.AppCompatActivityimport android.os.Bundle
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) }}这是 Java 对等示例:
package com.example.helloworldmodern;
import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}要点:
androidx.appcompat.app.AppCompatActivity: 这是 AndroidX 库中的一个基类,为在旧 Android 版本上使用现代功能提供兼容性。onCreate(savedInstanceState: Bundle?): 这是一个生命周期回调方法。它在 Activity 首次创建时调用。您应在此处执行应在 Activity 的整个生命周期中只发生一次的基本应用启动逻辑。setContentView(R.layout.activity_main): 这将 Activity 与其 UI 布局关联起来,该布局定义在res/layout/activity_main.xml中。R是一个自动生成的类,提供对应用资源的访问。
清单文件 (AndroidManifest.xml)
Section titled “清单文件 (AndroidManifest.xml)”每个 Android 应用在其根目录中都必须有一个 AndroidManifest.xml 文件(具体来说是 app/src/main/AndroidManifest.xml)。此文件向 Android 构建工具、Android 操作系统和 Google Play 提供关于应用的基本信息。例如,默认的清单文件可能如下所示:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.helloworldmodern">
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.HelloWorldModern"> <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><manifest>: 根元素。此处的package属性传统上是唯一 ID,尽管现代 Gradle 构建通常在build.gradle.kts中定义applicationId,该 ID 会覆盖此清单包名用于打包和 Play 商店目的。<application>: 声明应用。诸如android:icon、android:label和android:theme之类的属性定义了应用的默认图标、标签和主题,通常引用res/mipmap/和res/values/中的资源。<activity>: 声明一个 activity。android:name=".MainActivity"指定了类名(相对于包)。android:exported="true"表示此 activity 可以由其他应用的组件启动(对于启动器 activity 是必需的)。<intent-filter>: 指定 Activity(或其他组件)可以响应的 Intent 类型。<action android:name="android.intent.action.MAIN" />: 声明此 activity 为应用的入口点。<category android:name="android.intent.category.LAUNCHER" />: 声明此 activity 应在系统的应用启动器中列出。
清单文件也是声明权限、Service、BroadcastReceiver、Content Provider 和其他应用组件的地方。
字符串文件 (strings.xml)
Section titled “字符串文件 (strings.xml)”strings.xml 文件(位于 res/values/ 中)集中管理所有用户可见的文本。这对于国际化(翻译您的应用)至关重要,并使文本管理更容易。示例:
<resources> <string name="app_name">HelloWorldModern</string> <string name="hello_message">Hello, Modern Android!</string></resources>您可以在布局 XML(例如 @string/hello_message)或 Kotlin/Java 代码(例如 getString(R.string.hello_message))中引用这些字符串。
布局文件 (activity_main.xml)
Section titled “布局文件 (activity_main.xml)”res/layout/ 中的 activity_main.xml 文件定义了 MainActivity 的 UI。现代 Android 开发通常使用 ConstraintLayout 来实现灵活高效的布局,尽管 LinearLayout 或 FrameLayout 对于更简单的 UI 也很适用。这是一个使用 ConstraintLayout 显示 TextView 的示例:
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_message" android:textSize="24sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>androidx.constraintlayout.widget.ConstraintLayout: 一个强大且灵活的布局管理器。UI 元素(View,如TextView)通过定义相对于父视图或其他同级视图的约束来定位。TextView: 用于显示文本的 UI 元素。android:text="@string/hello_message": 从strings.xml设置文本。app:layout_constraint...: 定义TextView在ConstraintLayout中如何受约束(此处为居中)的属性。
tools:context=".MainActivity": 由 Android Studio 的布局编辑器使用,以了解此布局与哪个 Activity 相关联,从而启用预览和 lint 检查。
或者,如果您选择了“Empty Compose Activity”,您的 UI 将使用 Jetpack Compose 函数在 MainActivity.kt 文件中的 Kotlin 代码中以声明方式定义,并且可能没有 activity_main.xml 文件。
要运行您的应用:
- 选择部署目标:
- 模拟器 (Emulator): 如果您没有物理 Android 设备,可以通过 Tools > AVD Manager 创建 Android 虚拟设备 (AVD)。选择设备定义和系统镜像。
- 物理设备 (Physical Device): 通过 USB 连接您的 Android 手机/平板电脑。在设备上启用开发者选项和 USB 调试。(搜索“启用 Android 开发者选项”以获取步骤)。
-
运行: 点击 Android Studio 工具栏中的“运行”按钮(绿色播放图标),或选择 Run > Run ‘app’。
-
Android Studio 将构建您的应用,将其安装在选定的目标(模拟器或设备)上,然后启动它。您应该会看到您的“Hello, Modern Android!”消息。
恭喜!您已开发并运行了您的第一个现代 Android 应用。继续探索 Android 的功能,成为一名熟练的开发者。如需进一步学习,请查阅官方 Android 文档:https://developer.android.com/docs