The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →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 结尾。
准备开发环境:特别留意 JDK
- 从Android Studio 官方页面安装适用于你操作系统的稳定版。
- 首次启动时,在 SDK Manager 中安装项目所需的 Android SDK Platform 和 Build Tools;按需创建 Android Virtual Device(AVD)。具体模板和菜单文字可能随 Android Studio 版本变化。
- 在 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 项目
- 打开 Android Studio,选择 New Project,然后选一个基础应用模板,例如空白 Activity 类型的模板。
- 在模板的语言选项中选择 Java,再设置项目名称、包名、保存位置和最低 SDK(
minSdk)。模板名字与默认生成内容会因版本而异。 - 创建项目,等待 Gradle Sync 完成。出现构建错误时先读出错信息,不要立刻升级所有工具版本。
- 在项目视图中找到 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 项目有几组看起来相似、实际作用不同的版本设置:
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →| 设置 | 含义 | 它不代表什么 |
|---|---|---|
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 要求。
Rank #2
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 模板生成的兼容版本、官方发布信息或项目已有的版本约束,而不是复制一串可能过期的数字。
Recommended Free Tools
dependencies {
implementation "androidx.appcompat:appcompat:<兼容版本>"
implementation "com.google.android.material:material:<兼容版本>"
implementation "androidx.activity:activity:<兼容版本>"
}
使用当前的 implementation 配置;不要采用旧式的 compile。只添加实际需要的库,并检查传递依赖、许可证和版本兼容性。升级 AGP、Gradle、AndroidX 或 JDK 时,先查看明确的兼容要求,一次处理相关组件,不要为了消除一个警告盲目升级全套工具。
运行、调试和测试
- 在 Device Manager 中创建并启动模拟器,或连接启用 USB 调试的 Android 设备。
- 在 Android Studio 顶部选择目标设备,点击 Run。IDE 会构建、安装并启动应用。
- 用 Logcat 查看日志;在代码行旁设置断点,使用调试器检查变量和调用栈。
- 为纯逻辑编写本地单元测试;需要 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.
- Activity 或 Fragment:处理界面展示与生命周期相关事件。
- ViewModel:承载 UI 状态,避免屏幕旋转等配置变化时丢失状态;它不能替代对进程被系统回收的持久化考虑。
- Repository:抽象数据来源,例如网络、本地数据库或缓存。
- Room:适合结构化本地数据;后台任务可考虑 WorkManager。
网络请求应在后台线程执行,可使用合适的网络库异步接口、Executor 或其他并发方案,再将结果安全地交给界面层。不要长期持有 Activity 或 View 的引用,以免泄漏;还要考虑旋转、后台恢复、进程回收、网络中断和权限拒绝。Java 项目可以使用 Java API 版本的 Jetpack 组件,不必仅为采用现代架构而先改写成 Kotlin。
Rank #4
生成发布构建: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 方案。
常见问题排查
提示 AGP 需要 Java 17
这通常表示 Gradle 正由较旧 JDK 运行。先检查 Android Studio 的 Gradle JDK 设置,再检查命令行环境:
Best Value
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 时先核对它的实际覆盖范围。
界面卡住或出现主线程网络异常
将网络、磁盘和耗时数据库操作移出 UI 主线程,通过异步结果更新界面;同时避免同步等待后台任务。必要时检查 Logcat 中的异常与 ANR 线索。
Gradle Sync 或依赖冲突
先读错误指出的版本下限、仓库或冲突模块,确认 Android Studio、AGP、Gradle、JDK 与依赖的兼容组合。使用 Android Studio 提供的升级工具,并分批更新;不要把随机复制的依赖版本与项目现有约束混用。
模拟器启动失败
确认 AVD 镜像已安装、虚拟化环境符合当前系统要求且电脑资源足够。若硬件不适合运行模拟器,可使用实体设备;模拟器不能完全代替真实设备测试。
Quick Recap
发布前检查
- 明确记录应用的
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.

