Java 语言特性报错、Gradle 同步失败、断点不停,虽然都发生在 Android Studio 中,却属于不同层次。把它们分开检查,比复制一段 build.gradle 配置更有效。

Java 8 报错:先看工具链属于哪一代

旧项目中可能看到:

Jack is required to support java 8 language features.
Either enable Jack or remove sourceCompatibility JavaVersion.VERSION_1_8

这类信息与历史构建工具链有关。维护旧工程时,先核对 Android Gradle Plugin(AGP)、Gradle Wrapper、运行 Gradle 的 JDK,以及模块的编译选项,不要直接照搬旧 jackOptions 开关。

对于支持相应 Java 8 特性的 AGP 构建路径,Groovy 模块配置可以表达为:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

这不是要求用 Java 8 启动所有版本的 Gradle。源码目标版本、运行 Gradle 的 JDK 和设备上可用的 Java 库 API 是不同问题。某些库 API 还涉及脱糖与最低系统版本,不能仅靠上述两行解决。Android 官方 Java 8 支持说明

Gradle 同步失败:找第一处具体错误

Gradle project sync failed 是汇总提示,不是根因。应展开同步输出,找到具体报错,再决定改哪里。

可以先核对项目 Wrapper 使用的版本:

./gradlew --version

Windows 使用项目中的 gradlew.bat。首次运行 Wrapper 可能需要下载相应 Gradle,网络失败时应与配置错误分别处理。

常见方向包括依赖或插件下载失败、JDK 不兼容、SDK 路径错误,以及项目指定的 Build Tools 未安装。如果日志明确指出 buildToolsVersion 对应组件不可用,再检查 SDK Manager 中安装的版本及模块配置,选择项目兼容的版本。

不要把 buildToolsVersion、compileSdk、targetSdk 和 AGP 版本当成同一个数字,也不要为消除提示随意把它们全部改成相同值。修正实际问题后重新同步;反复点击同步本身不会改变失败条件。

Debug 不停在断点:先确认跑的是哪个包

正常的 debug 构建与 release 构建有不同用途。下面是 Groovy 中 debug 构建类型的显式写法:

android {
    buildTypes {
        debug {
            debuggable true
            minifyEnabled false
        }
    }
}

常规 debug 构建本来就用于调试;如果没有停在断点,先检查:

  1. 当前选中的 build variant 是否为预期的 debug 变体。
  2. 设备安装的包是否来自当前构建,而不是旧包或另一个 flavor。
  3. 调试器是否附加到正确的进程;多进程应用不能只看包名。
  4. 断点是否启用,代码路径是否确实执行,源码是否对应已安装产物。
  5. 混淆、优化或生成代码是否使位置映射发生变化。

构建类型与 product flavor 的组合规则见官方 build variants 说明。不要为了调试方便给正式 release 包打开 debuggable,也不要把关闭优化当成所有构建的默认配置。

一个更清楚的定位顺序

先让同步和编译成功,再确认安装的是正确变体,最后查进程、断点与代码路径。每解决一层,保留具体报错和配置变化。

如果语言工具链仍不兼容,调试配置帮不上忙;如果只是附加错进程,重装 SDK 也不会解决。分清问题发生的阶段,才知道哪一个配置值得修改。