是的,Android 运行 Java,但它并不是直接运行你在电脑上写的标准 Java 程序。

Android 有自己的一套运行环境,对标准的 Java 进行了裁剪、修改和扩展,下面我们从几个层面来深入理解。
核心概念:Android Runtime (ART)
你写的 Java (或 Kotlin) 代码,在 Android 设备上并不是由标准的 JVM (Java Virtual Machine) 来执行的,而是由一个专门为 Android 设计的虚拟机——Android Runtime (ART) 来执行的。
在早期版本的 Android (5.0 之前) 中,使用的是 Dalvik VM,从 Android 5.0 (Lollipop) 开始,ART 逐渐取代了 Dalvik,并成为默认的运行时,ART 相比 Dalvik 有很多性能优化。
ART 的关键特点:

- AOT (Ahead-of-Time) 编译:这是 ART 最大的改进之一,当你在安装一个 App 时,ART 会把 App 的字节码(
.dex文件)预先编译成机器码,这样在运行时就不需要再逐行解释,大大提升了执行效率。 - 内存管理更优:ART 采用了更高效的垃圾回收机制,减少了卡顿。
- 支持 64 位:更好地利用现代 64 位处理器的性能。
当你在 Android Studio 中写 Java 代码并编译打包成一个 .apk 文件后,这个文件里包含了 ART 可以理解的指令。
从 Java 代码到 App 运行的完整流程
让我们走一遍这个过程,你就完全明白了。
第 1 步:编写 Java 代码
你使用 Android Studio 和 Java 语言(或 Kotlin)来编写你的应用程序逻辑,这部分代码是平台无关的。
// MainActivity.java
package com.example.myapp;
import android.os.Bundle;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button myButton = findViewById(R.id.my_button);
myButton.setOnClickListener(v -> {
Toast.makeText(this, "Hello, Android!", Toast.LENGTH_SHORT).show();
});
}
}
第 2 步:编译和打包 (Build & Package)
当你点击 Android Studio 的 "Build" 或 "Run" 按钮时,会触发一个复杂的构建过程:

- AAPT (Android Asset Packaging Tool):处理你的资源文件(图片、布局 XML
activity_main.xml等)。 - Java 编译器:将你的
.java源文件编译成 Java 字节码(.class文件)。 - D8/R8:这是一个关键步骤。
.class文件会被转换成 Dalvik Executable (.dex) 格式。.dex文件是专门为 Dalvik/ART 设计的,它比标准的.class文件更节省内存,并且一个.dex文件可以包含多个类的定义。 - 打包 (APK):
.dex文件、编译后的资源文件、以及AndroidManifest.xml等所有文件被打包成一个.apk文件(Android Package),这个.apk就是最终可以安装到手机上的应用。
第 3 步:安装和运行
- 安装:你将
.apk文件安装到 Android 设备上,系统会解压这个文件。 - ART 编译 (AOT):在安装时或首次运行时,ART 会将
.dex文件进一步编译成设备原生 CPU 可以直接执行的机器码。 - 执行:当用户点击你的 App 图标时,Android 系统会启动你的 App 进程,加载编译好的机器码,并开始执行你的 Java 代码。
Android Java vs. 标准 Java (Java SE)
这是最容易混淆的地方。Android 使用的 Java 并非 Oracle 的标准 Java (Java SE),它是一个经过裁剪和修改的版本。
主要区别:
| 特性 | 标准 Java (Java SE) | Android Java |
|---|---|---|
| 核心库 | 完整的 java.* 包,如 java.sql, java.awt, java.swing 等。 |
被大幅裁剪,缺少了 GUI 相关 (swing, awt)、企业级应用 (javax.sql, javax.ejb) 等大量库,因为这些库在手机上没有意义或太占资源。 |
| Android 特有库 | 无。 | 拥有自己的一套核心库,在 android.* 包下。- android.app: 应用程序基础- android.content: 内容提供者- android.os: 操作系统服务- android.view: UI 框架- android.widget: 预设 UI 组件 |
| 运行环境 | 标准 JVM (Java Virtual Machine)。 | Android Runtime (ART) 或其前身 Dalvik VM。 |
| 开发工具 | 主要使用 javac, jar 命令行工具,或 Eclipse, IntelliJ IDEA。 |
必须使用 Android SDK 和 Android Studio,因为它集成了 AAPT, D8/R8, SDK Manager 等一系列 Android 特有的工具链。 |
你不能指望在 Android 上运行一个依赖 java.swing 的桌面 Java 程序,反之,你在 Android 上写的代码也无法直接在标准的 JVM 上运行。
现代趋势:Kotlin
虽然 Android 从第一天起就支持 Java,但 Google 在 2025 年宣布 Kotlin 成为 Android 的首选开发语言。
- 为什么是 Kotlin?
- 更简洁:用更少的代码实现相同的功能。
- 更安全:通过空指针检查等机制,从语言层面减少了运行时崩溃。
- 100% 兼容 Java:你可以在同一个项目中混用 Java 和 Kotlin 代码,它们可以完美地互相调用。
- 官方支持:Google 全面支持,Android Studio 对 Kotlin 提供了顶级的支持。
Java 在 Android 中的现状:
- 仍然完全支持:Android 仍然是一个成熟的 Java 平台,所有现有的 Java 代码和库都可以继续使用。
- 大量现有代码库:世界上绝大多数的 Android App 仍然是用 Java 编写的,并且在未来很长一段时间内都会如此。
- 学习资源丰富:Java 的学习资料、教程和社区支持极其庞大。
- Android 运行 Java:是的,但运行的是经过Android Runtime (ART) 处理的、专为 Android 平台优化的 Java 代码。
- 不是标准 Java:Android Java 缺少了很多标准 Java 的库,并增加了自己独有的
android.*库,你不能直接运行桌面 Java 程序。 - 流程是关键:代码需要经过
Java -> .class -> .dex -> .apk -> ART机器码的转换过程才能在手机上运行。 - 未来是 Kotlin:虽然 Java 依然是 Android 的基石,但新项目强烈推荐使用 Kotlin,因为它更现代、更高效、更安全。
当你学习 Android 开发时,你学习的“Java”实际上是“Android 平台上的 Java”,它有自己的生态系统和规则。
