Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

可以。Android Studio 和 Android 构建系统仍支持 Java,Java 项目也能使用 AndroidX、Jetpack 和现代测试工具;Kotlin 是 Android 官方更推荐的新项目语言,但不是 Java 开发的前置条件,也不意味着 Java 已被废弃。本文以 Android 16(API 36)为版本基线,带你创建纯 Java 项目、配置 JDK 与 SDK、运行测试并准备发布。若你在 Android 17 稳定版发布后阅读,请先核对官方最新 SDK 与发布要求。

Java Android 应用是怎样构建出来的

Android 应用不是桌面 Java 程序,不会直接在标准桌面 JVM 上运行。你编写 Java 源码并调用 Android SDK API;Gradle 和 Android Gradle Plugin(AGP)负责编译源码、处理资源和清单文件,再把应用打包成 Android 可安装或发布的格式。Android Studio 是官方 IDE,提供代码编辑、调试、模拟器管理和构建入口。Android Studio 官方介绍与Android 构建文档说明了这套工作流。

组件 负责什么
Android Studio 编辑 Java、管理设备、运行和调试项目。
Android SDK Platform 提供指定 API 级别的 Android 编译接口。
SDK Build Tools 参与资源处理、打包等构建步骤。
JDK 运行 Gradle、编译 Java 源码并执行相关测试。
Gradle 与 AGP Gradle 是构建系统;AGP 为其增加 Android 项目构建能力。
Android Emulator 在电脑上启动虚拟 Android 设备。
AndroidX / Jetpack 提供兼容库和常用 Android 架构、界面及测试组件。

Android Studio 新项目常使用 Kotlin DSL 的 build.gradle.kts,也可能使用 Groovy 的 build.gradle。这是构建脚本的语法差异,不会把 Java 源码变成 Kotlin;Java 文件仍以 .java 结尾。

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

准备开发环境:特别留意 JDK

  1. 从Android Studio 官方页面安装适用于你操作系统的稳定版。
  2. 首次启动时,在 SDK Manager 中安装项目所需的 Android SDK Platform 和 Build Tools;按需创建 Android Virtual Device(AVD)。具体模板和菜单文字可能随 Android Studio 版本变化。
  3. 在 Android Studio 的 Gradle JDK 设置中确认 Gradle 使用的 JDK。官方建议用随 Android Studio 附带的 JetBrains Runtime(JBR)运行 IDE。

不要把三个不同设置混为一谈:Android Studio 自身的运行时、Gradle 实际使用的 JDK,以及 Java 源码编译的语言级别。命令行构建通常会受 JAVA_HOME 影响,而从 IDE 启动的 Gradle 使用 IDE 中选择的 Gradle JDK;两者不一致,可能导致“IDE 能构建、终端不能构建”或相反的情况。AGP 8.x 运行 Gradle 需要 JDK 17;这是构建工具的要求,不是说用户设备需要安装 JDK 17。参阅Android 官方 Java 与 JDK 文档。

创建纯 Java 项目

  1. 打开 Android Studio,选择 New Project,然后选一个基础应用模板,例如空白 Activity 类型的模板。
  2. 在模板的语言选项中选择 Java,再设置项目名称、包名、保存位置和最低 SDK(minSdk)。模板名字与默认生成内容会因版本而异。
  3. 创建项目,等待 Gradle Sync 完成。出现构建错误时先读出错信息,不要立刻升级所有工具版本。
  4. 在项目视图中找到 Java 源码、资源与清单文件。常见路径如下:
app/src/main/java/com/example/javaapp/MainActivity.java
app/src/main/res/layout/activity_main.xml
app/src/main/res/drawable/
app/src/main/res/mipmap/
app/src/main/res/values/
app/src/main/AndroidManifest.xml

实际包名通常与你输入的包名一致。模板可能采用不同 UI 结构;下面的示例展示经典的 Java Activity 加 XML 布局,适合初学和维护传统 View 项目的读者。

Java Activity

package com.example.javaapp;

import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView message = findViewById(R.id.message);
        message.setText("Hello, Android");
    }
}

XML 布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/app_name" />
</LinearLayout>

Activity 是 Android 应用组件之一,onCreate() 是常见的初始化入口,但不是 Activity 的全部生命周期。setContentView() 加载布局,R 类由构建系统根据资源生成。真实应用不应把所有业务逻辑都塞进 Activity;也不要在 UI 主线程执行耗时网络或数据库操作,否则可能卡顿、触发 ANR,网络请求还可能抛出 NetworkOnMainThreadException。

正确配置 Android API 级别和 Java 版本

Android 项目有几组看起来相似、实际作用不同的版本设置:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
设置 含义 它不代表什么
compileSdk 编译时可引用的 Android API 级别。 不意味着应用只能安装在该 API 级别的设备上。
minSdk 应用允许安装的最低 Android API 级别。 不是编译工具版本。
targetSdk 应用声明针对的 Android 行为版本;较新目标版本可能带来系统行为或发布政策要求。 不是应用的最低安装版本。
sourceCompatibility / targetCompatibility Java 源码与编译目标的语言/字节码级别。 不是 Android API 级别。
Java toolchain 指定编译 Java 源码所用的 JDK 工具链。 不能替代 Gradle 运行时 JDK 的配置。

以下 Groovy DSL 片段以 Android 16 稳定版 API 36 为基线。minSdk 23 仅为示例,应根据目标用户、依赖和功能决定;发布时也要核对当时最新稳定 SDK 与应用商店目标 API 要求。

plugins {
    id 'com.android.application'
}

android {
    namespace 'com.example.javaapp'
    compileSdk 36

    defaultConfig {
        applicationId 'com.example.javaapp'
        minSdk 23
        targetSdk 36
        versionCode 1
        versionName '1.0'
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

Android 16 对应 API 36;官方Android 16 SDK 设置文档给出了 compileSdk = 36 和 targetSdk = 36 的配置基线。提高 compileSdk 不会自动提高应用的最低运行版本,但调用新平台 API 时仍必须考虑旧设备:使用 AndroidX 兼容 API,或在运行时用 Build.VERSION.SDK_INT 做版本判断。

Java 17 语言级别不等于 Android 17,也不保证所有 Java 17 标准库 API 在每个 Android 版本上都存在。Java 语言特性与库 API 是两回事。部分较新的 Java API 可通过 core library desugaring 支持旧 Android 版本,但覆盖范围有限;不能假设任意 Java API 都会自动兼容。需要时,可按官方 Java 语言特性与 API desugaring 文档配置,并从官方兼容资料选择适合当前 AGP 的库版本,而非照抄来历不明的“最新版本”。

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
        coreLibraryDesugaringEnabled true
    }
}

dependencies {
    coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:<与项目兼容的版本>"
}

添加 AndroidX 依赖

Java 项目能使用 AndroidX 和许多 Jetpack 组件。依赖版本应采用 Android Studio 模板生成的兼容版本、官方发布信息或项目已有的版本约束,而不是复制一串可能过期的数字。

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
dependencies {
    implementation "androidx.appcompat:appcompat:<兼容版本>"
    implementation "com.google.android.material:material:<兼容版本>"
    implementation "androidx.activity:activity:<兼容版本>"
}

使用当前的 implementation 配置;不要采用旧式的 compile。只添加实际需要的库,并检查传递依赖、许可证和版本兼容性。升级 AGP、Gradle、AndroidX 或 JDK 时,先查看明确的兼容要求,一次处理相关组件,不要为了消除一个警告盲目升级全套工具。

运行、调试和测试

  1. 在 Device Manager 中创建并启动模拟器,或连接启用 USB 调试的 Android 设备。
  2. 在 Android Studio 顶部选择目标设备,点击 Run。IDE 会构建、安装并启动应用。
  3. 用 Logcat 查看日志;在代码行旁设置断点,使用调试器检查变量和调用栈。
  4. 为纯逻辑编写本地单元测试;需要 Android 运行环境的测试可写 instrumentation test,并在模拟器或设备上执行。

也可以从项目根目录通过 Gradle Wrapper 构建或测试:

./gradlew --version
./gradlew tasks
./gradlew assembleDebug
./gradlew test
./gradlew connectedAndroidTest

Windows 命令提示符通常使用 gradlew.bat,例如 gradlew.bat assembleDebug。assembleDebug 生成 debug APK;test 运行项目配置的本地 JVM 单元测试;connectedAndroidTest 需要测试任务已配置并且存在连接设备或运行中的模拟器,因此不是每个新项目都能无条件成功执行。

从按钮示例走向可维护的应用

小应用可以从 Activity 和 XML 开始,但复杂后应按职责拆分。常见 AndroidX/Jetpack 组合是:

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Activity 或 Fragment:处理界面展示与生命周期相关事件。
  • ViewModel:承载 UI 状态,避免屏幕旋转等配置变化时丢失状态;它不能替代对进程被系统回收的持久化考虑。
  • Repository:抽象数据来源,例如网络、本地数据库或缓存。
  • Room:适合结构化本地数据;后台任务可考虑 WorkManager。

网络请求应在后台线程执行,可使用合适的网络库异步接口、Executor 或其他并发方案,再将结果安全地交给界面层。不要长期持有 Activity 或 View 的引用,以免泄漏;还要考虑旋转、后台恢复、进程回收、网络中断和权限拒绝。Java 项目可以使用 Java API 版本的 Jetpack 组件,不必仅为采用现代架构而先改写成 Kotlin。

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

生成发布构建:APK 与 AAB

Debug APK 适合开发期间安装测试,不是公开发布的最终交付物。发布前应通过 Android Studio 的签名构建工作流,选择发布构建类型、配置并安全保管签名密钥,生成经过签名的 APK 或 Android App Bundle(AAB)。APK 是可安装包;AAB 是交给支持它的分发渠道处理的发布格式。签名密钥丢失或错误管理会影响后续更新,因此不要把密钥文件和密码提交到公开代码库。

应用要发布到 Google Play 时,目标 API、开发者验证、商店政策和控制台流程会随时间与地区变化。不要从旧教程照搬固定政策或费用;发布前应查阅Play Console 官方信息和当时适用的 Android 开发者验证说明。若不面向 Play 分发,也仍需为 APK/AAB 的签名、安全更新和可信分发安排负责。

Java 还是 Kotlin?

情况 更合适的起点 考虑因素
维护已有 Java 应用 继续使用 Java 不必为追赶潮流而全量重写;可按需要逐步引入 Kotlin。
团队主要掌握 Java Java 或 Java/Kotlin 混合 利用现有经验,评估后续招聘、库与维护成本。
从零开始且愿意学习新语言 认真评估 Kotlin 这是 Android 官方当前更推荐的方向,许多官方示例和 API 以 Kotlin 为先。
需要渐进迁移 混合项目 Java 与 Kotlin 可在同一项目共存;迁移时关注空值类型映射与调用约定。

官方推荐 Kotlin 不等于 Java 被废弃。继续使用 Java 是合理的工程选择,特别是维护成熟代码库时;但新项目需要把团队技能、长期维护、依赖生态和 Kotlin-first API 一并纳入决策。参见官方关于向现有应用添加 Kotlin 的说明。Java 加 XML View 是学习和维护传统应用的自然组合;Jetpack Compose 的核心开发体验以 Kotlin 为主,Java-only 项目通常不应把它当默认 UI 方案。

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

常见问题排查

提示 AGP 需要 Java 17

这通常表示 Gradle 正由较旧 JDK 运行。先检查 Android Studio 的 Gradle JDK 设置,再检查命令行环境:

java -version
echo $JAVA_HOME

Windows 使用 echo %JAVA_HOME%。IDE 与终端可能指向不同 JDK。统一到项目所需的 JDK(AGP 8.x 使用 JDK 17),重新同步并构建;团队或 CI 也应固定一致的 JDK。只有在确有必要时才通过 org.gradle.java.home 单独指定路径。

找不到 API,或依赖要求更高 SDK

确认相应 SDK Platform 已安装,检查依赖明确要求的最低 compile SDK,再按需提高 compileSdk 并重新同步。若应用仍要支持旧设备,新 API 调用仍须做运行时版本判断或使用兼容库。

低版本设备崩溃

常见原因是在旧系统上直接调用较新 Android API,或误以为较新 Java 标准库 API 自动存在。使用兼容 API 或运行时判断;需要 Java API desugaring 时先核对它的实际覆盖范围。

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

界面卡住或出现主线程网络异常

将网络、磁盘和耗时数据库操作移出 UI 主线程,通过异步结果更新界面;同时避免同步等待后台任务。必要时检查 Logcat 中的异常与 ANR 线索。

Gradle Sync 或依赖冲突

先读错误指出的版本下限、仓库或冲突模块,确认 Android Studio、AGP、Gradle、JDK 与依赖的兼容组合。使用 Android Studio 提供的升级工具,并分批更新;不要把随机复制的依赖版本与项目现有约束混用。

模拟器启动失败

确认 AVD 镜像已安装、虚拟化环境符合当前系统要求且电脑资源足够。若硬件不适合运行模拟器,可使用实体设备;模拟器不能完全代替真实设备测试。

发布前检查

  • 明确记录应用的 minSdk,并确认依赖和功能均符合该最低版本。
  • 使用项目一致的 JDK、Gradle 和 AGP 版本,确保干净环境或 CI 能构建。
  • 测试至少不同 API 级别与屏幕尺寸,并覆盖权限拒绝、网络中断、旋转、后台恢复和深色模式等情况。
  • 检查隐私说明、所请求权限、网络安全、第三方依赖许可证和敏感数据处理。
  • 完成签名的 release 构建;验证 APK/AAB、版本号和签名密钥管理,再按目标分发渠道要求发布。

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.