☰
Unity打包安卓环境配置全攻略:JDK、SDK、NDK、Gradle从零到打包成功
2026/10/15 16:30:12 网站建设 项目流程

1. 为什么 Unity 打包安卓这件事值得单独拿出来讲

如果你刚开始接触 Unity,大概率会遇到这样一个场景:在编辑器里点一下播放按钮,游戏跑得好好的,角色能动、UI 能点、粒子特效也正常,于是你信心满满地打开 Build Settings,切到 Android 平台,点击 Build,然后——报错了。要么是提示找不到 SDK,要么是 JDK 版本不匹配,要么是 NDK 路径不对,要么是 Gradle 构建卡在某个下载环节一动不动。折腾了大半天,游戏没跑起来,环境倒是装了一堆。

这不是你一个人的问题。Unity 配置安卓环境这件事,几乎是每个 Unity 开发者都要经历的“成人礼”。它本身不难,但涉及的组件多、版本关系复杂、不同 Unity 版本的要求还不一样,再加上国内网络环境对某些下载环节的影响,导致很多人第一次配置的时候都会踩坑。

这篇文章要解决的核心问题就一个:让你从零开始,把 Unity 的安卓打包环境完整配好,并且理解每一步为什么这么做。不管你是用 Unity 2021、2022 还是 Unity 6,不管你是 Windows 还是 macOS,配置的思路是相通的。我会把整个流程拆开,从组件选型、版本匹配、路径配置,到实际打包验证、常见报错排查,一步步讲清楚。

适合谁看?如果你是刚学 Unity 不久、想把自己的项目跑到手机上的开发者,这篇文章就是为你写的。如果你已经配过环境但总是遇到莫名其妙的报错,也可以对照着排查一下,大概率能找到问题所在。

在正式开始之前,先说一个核心认知:Unity 打包安卓,本质上是你电脑上的 Unity 调用一套外部工具链,把项目编译成安卓能识别的 APK 或 AAB 文件。这套工具链主要包括 JDK(Java 开发工具包)、Android SDK(安卓软件开发工具包)、NDK(原生开发工具包)和 Gradle(构建工具)。Unity 自己不带这些东西,它只是调用者。所以配置环境的核心工作,就是把这四个组件准备好,并告诉 Unity 它们在哪里。

理解了这一点,后面所有的操作你都能想明白为什么要做。

2. 四个核心组件到底各自负责什么

很多人配置环境的时候是照着教程一步步点,点完了也不知道每个东西是干嘛的。这样一旦出问题就完全不知道怎么排查。所以我觉得有必要先把这四个组件的作用讲清楚,用生活化的类比来解释。

2.1 JDK:安卓构建的“翻译官”

JDK 是 Java Development Kit 的缩写。安卓系统的应用层大量使用 Java 和 Kotlin 编写,虽然你的 Unity 项目用的是 C#,但最终打包成 APK 的时候,中间会经过一层 Java 代码的转换和调用。JDK 就是完成这个工作的基础工具。

你可以把 JDK 理解成一个翻译官:Unity 说的话(C# 代码和项目配置),需要通过翻译官转换成安卓系统能听懂的语言(Java 字节码和 DEX 文件)。没有翻译官,双方就没法沟通。

这里有一个非常关键的坑:JDK 的版本必须和你的 Unity 版本匹配。Unity 2019 到 2021 早期版本通常需要 JDK 8,Unity 2021 后期到 2022 需要 JDK 11,Unity 2023 及以后版本开始支持 JDK 17。如果你装错了版本,构建的时候会报出各种奇怪的错误,比如Unsupported class file major version之类的。

提示:Unity 从 2019.3 开始,在安装器中就自带了 OpenJDK 选项。如果你在安装 Unity 的时候勾选了 Android Build Support 下的 OpenJDK,那么 JDK 就已经就位了,不需要单独去下载。这是最省事的方式。

2.2 Android SDK:安卓开发的“工具箱”

SDK 是 Software Development Kit 的缩写。Android SDK 里面包含了安卓平台的各种工具,比如adb(用于和手机通信)、aapt(用于打包资源)、zipalign(用于优化 APK)等等。Unity 在构建过程中会调用这些工具来完成 APK 的组装。

打个比方,SDK 就像是一个木工的工具箱,里面有锤子、锯子、螺丝刀。Unity 是设计师,它画好了图纸,但真正动手把家具做出来,需要工具箱里的各种工具配合。

Android SDK 里面有几个关键的部分你需要知道:

  • Platform Tools:包含 adb 等和设备通信的工具,这是最常用的。
  • Build Tools:包含构建 APK 所需的编译和打包工具,每个版本号对应一套工具集。
  • Platforms:包含各个安卓 API 级别的平台文件,比如 android-33、android-34。
  • Command-line Tools:命令行工具,用于在不打开 Android Studio 的情况下管理 SDK 组件。

Unity 在打包时会根据你设置的最低 API 级别和目标 API 级别,去 SDK 目录里找对应的 Platforms 和 Build Tools。如果找不到,就会报错。

2.3 NDK:处理底层代码的“特种兵”

NDK 是 Native Development Kit 的缩写。它的作用是让你用 C/C++ 编写安卓平台上的原生代码。那 Unity 项目为什么需要它呢?

原因在于 Unity 的底层引擎部分、IL2CPP 脚本后端、以及一些第三方插件(尤其是涉及物理引擎、音频处理、图形渲染的插件),都是用 C/C++ 写的。当你选择 IL2CPP 作为脚本后端时,Unity 会把 C# 代码转换成 C++ 代码,然后再编译成原生库。这个过程就需要 NDK。

NDK 不是所有项目都必须的。如果你用的是 Mono 脚本后端,理论上可以不用 NDK。但现在的 Unity 版本默认推荐 IL2CPP,而且 Google Play 上架要求 64 位支持,IL2CPP 是更好的选择。所以配置 NDK 基本上是必须的。

NDK 的版本同样有讲究。Unity 每个大版本都会推荐一个特定的 NDK 版本,用错了版本可能会遇到编译错误或者链接错误。通常 Unity 安装器自带的 NDK 就是匹配的版本,直接用就行。

2.4 Gradle:把零件组装成成品的“流水线”

Gradle 是一个构建自动化工具。在安卓开发中,它负责把 Java 代码、资源文件、原生库、清单文件等所有零件按照一定的规则组装成一个完整的 APK 或 AAB。

Unity 从 2019.3 开始,默认使用 Gradle 来构建安卓项目。在此之前用的是 Ant,但 Ant 已经被淘汰了。Gradle 的优势在于灵活、可扩展,你可以通过自定义 Gradle 模板来实现各种高级功能,比如集成第三方 SDK、修改清单文件、配置签名等。

Unity 安装器自带的 Gradle 版本通常也是匹配的。但有时候 Gradle 在构建时需要下载一些依赖,如果你的网络环境访问某些仓库比较慢,可能会卡住。这个问题后面会专门讲怎么处理。

3. 手把手配置:从安装到打包成功

前面讲了原理,现在进入实操环节。我会按照从零开始的顺序,把每一步都写清楚。你可以跟着做,也可以对照检查自己已有的配置。

3.1 通过 Unity Hub 安装 Android Build Support

最省事的方式,就是在安装 Unity 编辑器的时候,通过 Unity Hub 把 Android Build Support 一起装上。具体操作是:

  1. 打开 Unity Hub,找到你需要的 Unity 版本。
  2. 点击版本旁边的齿轮图标或者三个点,选择“添加模块”。
  3. 在弹出的模块列表中,找到“Android Build Support”。
  4. 展开它,确保勾选以下三项:
    • Android SDK & NDK Tools
    • OpenJDK
    • Android Build Support(本身)
  5. 点击安装,等待下载完成。

这样做的好处是,Unity Hub 会自动帮你下载匹配版本的 SDK、NDK 和 JDK,并且放到正确的位置。你不需要自己去官网找下载链接,也不需要手动配置路径。

注意:下载过程可能需要一些时间,取决于你的网络速度。如果下载卡住不动,可以尝试在 Unity Hub 的设置里切换下载源,或者检查网络连接。

安装完成后,你可以在 Unity 编辑器中打开Edit > Preferences > External Tools(Windows)或Unity > Settings > External Tools(macOS),看看 Android 部分的路径是否已经自动填好了。正常情况下,JDK、SDK、NDK、Gradle 四个路径都应该有值,并且指向 Unity 安装目录下的相关文件夹。

3.2 手动配置已有 SDK 和 JDK 的情况

有些开发者电脑上已经装了 Android Studio,或者之前配置过其他安卓开发环境,已经有了一套 SDK 和 JDK。这种情况下,你可以选择复用已有的,而不是让 Unity 再下载一份。

在 External Tools 面板中,取消勾选“Use Embedded JDK”和“Use Embedded SDK Tools”,然后手动指定路径:

  • JDK 路径:指向你 JDK 的根目录,比如C:\Program Files\Java\jdk-17或 macOS 上的/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home。
  • SDK 路径:指向 Android SDK 的根目录,比如C:\Users\你的用户名\AppData\Local\Android\Sdk。
  • NDK 路径:指向 NDK 的根目录,通常在 SDK 目录下的ndk文件夹里,比如C:\Users\你的用户名\AppData\Local\Android\Sdk\ndk\23.1.7779620。
  • Gradle 路径:如果你使用自定义 Gradle,可以在这里指定。否则保持默认即可。

手动配置的好处是灵活,你可以用最新版本的 SDK 和 JDK。但风险是版本可能不匹配,导致构建失败。我的建议是:如果你不是特别清楚各版本之间的兼容关系,优先使用 Unity 自带的版本。等你对这套工具链比较熟悉了,再去折腾自定义版本。

3.3 在 Unity 中切换平台并设置关键参数

环境路径配好之后,接下来要在 Unity 里做一些设置。

首先,打开File > Build Settings,在左侧的平台列表中选择 Android,然后点击“Switch Platform”。这一步会让 Unity 把项目的资源重新导入为安卓平台适用的格式,可能需要一些时间,取决于项目大小。

切换完成后,点击 Build Settings 窗口右下角的“Player Settings”,打开玩家设置面板。这里有几个关键参数需要关注:

  • Company Name 和 Product Name:这两个会影响到 APK 的包名和显示名称。包名格式通常是com.公司名.产品名,必须是有效的 Java 包名格式。
  • Default Orientation:设置屏幕方向,横屏、竖屏或自动旋转。
  • Minimum API Level:最低支持的安卓版本。这个值决定了你的应用能装在哪些手机上。设置得太高会排除掉老设备,设置得太低可能无法使用某些新特性。目前比较通用的选择是 API 22(Android 5.1)或 API 23(Android 6.0)。
  • Target API Level:目标安卓版本。这个值影响应用的运行行为和商店上架要求。Google Play 通常要求目标 API 级别不能太低,具体数值每年都在更新,建议设置为当前较新的稳定版本。
  • Scripting Backend:脚本后端,选 IL2CPP 还是 Mono。前面说过,IL2CPP 支持 64 位,性能更好,是推荐选项。
  • Target Architectures:目标架构。如果选了 IL2CPP,需要勾选 ARMv7 和 ARM64。ARM64 是 64 位,Google Play 强制要求。x86 和 x86_64 主要用于模拟器,如果不需要可以取消勾选以减小包体。

这些参数看起来多,但大部分保持默认也能跑起来。真正需要你根据项目需求调整的,主要是 Minimum API Level、Target API Level 和 Target Architectures 这几项。

3.4 构建 APK 并验证环境是否配置成功

参数设置好之后,就可以尝试构建了。在 Build Settings 窗口中,点击“Build”按钮,选择一个输出目录,Unity 就会开始构建 APK。

构建过程中,你可以在底部的进度条看到当前正在执行的步骤。如果一切顺利,几分钟后就能在输出目录里看到 APK 文件。把这个 APK 传到手机上安装,能正常打开运行,就说明环境配置成功了。

但现实往往不会这么顺利。第一次构建大概率会遇到各种报错。下面我把常见的报错和排查方法整理出来,你可以对照着看。

4. 常见报错与排查技巧实录

这一部分是我在实际操作中踩过的坑和总结出来的排查思路。很多报错看起来吓人,但原因往往很简单。

4.1 JDK 版本不匹配导致的构建失败

报错特征:构建日志中出现Unsupported class file major version、Could not determine java version、Gradle requires Java X but found Java Y等字样。

原因分析:Unity 调用的 JDK 版本和 Gradle 或 Android Gradle Plugin 要求的版本不一致。比如 Unity 2021 默认用 JDK 11,但你手动指定了一个 JDK 8 的路径,就会出问题。

解决方法:

  1. 打开 External Tools 面板,检查 JDK 路径指向的版本。
  2. 如果不确定版本,可以在命令行中运行java -version查看。
  3. 对照 Unity 官方文档,确认你的 Unity 版本需要哪个 JDK 版本。
  4. 最简单的做法是勾选“Use Embedded JDK”,让 Unity 用它自带的版本。

实操心得:我曾经因为电脑上装了多个 JDK,环境变量指向了一个旧版本,导致 Unity 构建一直失败。后来在 External Tools 里明确指定了 Unity 自带的 JDK 路径,问题立刻解决。所以如果你电脑上有多个 JDK,一定要确认 Unity 用的是哪一个。

4.2 SDK 路径错误或缺少组件

报错特征:Failed to find SDK、Android SDK not found、No Android SDK path set、Failed to find Build Tools revision XX.X.X。

原因分析:Unity 找不到 SDK,或者 SDK 里缺少所需的 Build Tools 版本。

解决方法:

  1. 检查 External Tools 中的 SDK 路径是否正确。
  2. 打开 SDK 目录,确认build-tools文件夹下有你需要的版本。
  3. 如果缺少,可以通过 Android Studio 的 SDK Manager 安装,或者用命令行工具sdkmanager安装。
  4. 如果 Unity 自带的 SDK 缺少某些组件,可以在 External Tools 中取消勾选“Use Embedded SDK Tools”,然后指向一个完整的 SDK 目录。

这里有一个细节值得注意:Unity 自带的 SDK 通常只包含最基本的组件,有时候不包含某些特定版本的 Build Tools。如果你在构建时看到提示缺少某个版本,可以去 SDK 目录下看看实际有哪些版本,然后在 Player Settings 里把 Build Tools 版本改成已有的版本。

4.3 Gradle 构建卡住或下载依赖失败

报错特征:构建进度条长时间卡在“Building Gradle project”或“Resolving dependencies”,或者报出网络超时相关的错误。

原因分析:Gradle 在构建时需要从远程仓库下载依赖包。如果网络环境访问这些仓库比较慢,就会卡住。

解决方法:

  1. 检查网络连接是否正常。
  2. 如果使用了自定义 Gradle 模板,可以在模板中配置国内镜像仓库。
  3. 在 Unity 的 Preferences 中,找到“Build Settings”或“Gradle”相关选项,看看是否有离线模式的开关。
  4. 如果项目不复杂,可以尝试取消勾选“Custom Gradle Template”,使用 Unity 默认的 Gradle 配置。

提示:Gradle 首次构建时会下载很多东西,包括 Gradle 发行版本身和各种依赖库。这个过程可能比较慢,但只要成功一次,后续构建就会快很多,因为依赖会被缓存起来。

4.4 NDK 版本不兼容导致的编译错误

报错特征:NDK not found、Unable to find NDK、Invalid NDK version,或者构建过程中出现 C++ 编译错误。

原因分析:NDK 路径不对,或者 NDK 版本和 Unity 版本不匹配。

解决方法:

  1. 检查 External Tools 中的 NDK 路径。
  2. 确认 NDK 版本是否在 Unity 推荐的范围内。
  3. 如果使用 IL2CPP 后端,确保 NDK 已正确安装。
  4. 尝试使用 Unity 自带的 NDK,而不是手动指定的版本。

4.5 常见问题速查表

报错关键词可能原因排查方向
Unsupported class file major versionJDK 版本不匹配检查 JDK 路径和版本
Failed to find Build ToolsSDK 缺少组件检查 build-tools 目录
Gradle build failed依赖下载失败或配置错误检查网络和 Gradle 模板
NDK not foundNDK 路径错误或未安装检查 NDK 路径
Permission denied文件权限问题检查 SDK/NDK 目录权限
CommandInvokationFailure综合错误查看完整日志定位具体原因

排查的时候有一个通用技巧:看完整的构建日志。Unity 的 Console 窗口有时候只显示简略信息,你需要打开Editor.log文件才能看到完整的错误堆栈。Windows 上的路径通常是C:\Users\你的用户名\AppData\Local\Unity\Editor\Editor.log,macOS 上在~/Library/Logs/Unity/Editor.log。日志里会详细记录每一步执行了什么命令、返回了什么结果,是定位问题的关键。

5. 进阶配置与优化建议

环境配好、能打出包之后,还有一些进阶的配置可以让你用起来更顺手。

5.1 配置自定义 Gradle 模板

Unity 允许你使用自定义的 Gradle 模板来覆盖默认的构建配置。这在需要集成第三方 SDK、修改 AndroidManifest.xml、添加自定义权限或配置签名时非常有用。

开启方式是:在 Player Settings 中,找到 Publishing Settings 部分,勾选“Custom Main Gradle Template”和“Custom Launcher Gradle Template”。Unity 会在Assets/Plugins/Android目录下生成模板文件,你可以直接编辑。

编辑 Gradle 模板需要一定的安卓开发知识,但基本的修改并不难。比如添加一个依赖库,只需要在dependencies块中加入一行implementation 'com.example:library:1.0.0'即可。

注意:修改 Gradle 模板后,如果构建失败,可以先还原模板再试。有时候问题就出在模板的某一行配置上。

5.2 配置签名文件

如果你要发布应用到应用商店,或者需要覆盖安装同一个应用的不同版本,就需要配置签名文件(Keystore)。

在 Player Settings 的 Publishing Settings 中,勾选“Custom Keystore”,然后填写 Keystore 路径、密码、别名等信息。如果没有现成的 Keystore,可以用命令行工具keytool生成一个。

签名配置看起来简单,但有一个坑:密码和别名一定要记牢。一旦丢失,就无法对已发布的应用进行更新。我见过不少开发者因为忘记签名密码而不得不重新上架应用的案例。

5.3 优化构建速度和包体大小

构建速度和包体大小是安卓开发中永恒的话题。这里分享几个实用的优化点:

  • 减少 Target Architectures:如果不需要支持模拟器,取消 x86 和 x86_64,只保留 ARMv7 和 ARM64,可以显著减小包体。
  • 开启 Managed Stripping Level:在 Player Settings 的 Optimization 部分,把 Managed Stripping Level 设置为 Medium 或 High,可以移除未使用的代码,减小包体。
  • 使用 Addressables 或 AssetBundle:把资源从主包中分离出来,按需加载,可以大幅减小初始包体。
  • 关闭不必要的图形 API:在 Player Settings 的 Other Settings 中,取消勾选不需要的 Graphics API,比如 Vulkan 或 OpenGL ES 3,只保留 OpenGL ES 2 或 3。
  • 增量构建:Unity 支持增量构建,第二次构建通常比第一次快很多。尽量不要频繁清理构建缓存。

5.4 真机调试与日志查看

包打出来了,装到手机上,但运行不正常怎么办?这时候需要看真机日志。

最常用的方式是通过 adb 查看日志。在命令行中运行:

adb logcat -s Unity

这个命令会过滤出 Unity 相关的日志输出。如果你的应用崩溃了,日志里通常会有堆栈信息,能帮你定位问题。

另外,Unity 的 Development Build 选项也很有用。在 Build Settings 中勾选“Development Build”和“Script Debugging”,构建出来的包会包含调试信息,并且可以通过 Unity Profiler 连接真机进行性能分析。

实操心得:真机调试时,建议把手机通过 USB 连接到电脑,并开启开发者模式和 USB 调试。这样 adb 才能识别到设备。如果 adb 识别不到手机,可以尝试重启 adb 服务(adb kill-server然后adb start-server),或者换一根数据线。

6. 一些容易忽略的细节和我的个人体会

配置安卓环境这件事,说难不难,说简单也不简单。它不像写游戏逻辑那样有创造性,但它是把游戏送到玩家手机上的必经之路。我在多次配置环境的过程中,积累了一些文档里不太会写的经验,分享出来供你参考。

第一,版本匹配比版本新旧更重要。很多人喜欢用最新版本的 SDK、NDK、JDK,觉得新版本肯定更好。但在 Unity 安卓打包这个场景里,版本匹配才是第一位的。Unity 每个版本都会测试并推荐一套特定的工具链版本,用这套推荐版本,出问题的概率最小。等你对整套流程非常熟悉了,再去尝试新版本。

第二,环境配置一次做好,后续省心很多。我见过一些开发者每次换电脑或者重装系统后,都要重新折腾一遍环境。其实可以把配置好的 SDK、NDK、JDK 目录打包备份,下次直接解压到相同路径,然后在 Unity 里指定路径即可。这样可以节省大量时间。

第三,遇到报错不要慌,先看日志。大部分报错信息其实已经告诉了你问题所在,只是信息比较隐晦。养成看 Editor.log 的习惯,你会发现很多问题都能自己解决。日志里的关键词,比如“not found”、“version”、“failed”,往往就是突破口。

第四,国内网络环境下,Gradle 依赖下载是一个高频卡点。如果你在构建时经常卡在依赖下载环节,可以考虑在 Gradle 模板中配置国内镜像仓库。具体做法是在repositories块中添加镜像地址,这样可以大幅提升下载速度。不过要注意,镜像仓库的可用性会随时间变化,需要定期检查。

第五,不要害怕重装。如果环境实在配不好,最省事的办法可能是卸载 Unity 和所有相关组件,然后重新通过 Unity Hub 安装,确保勾选 Android Build Support 下的所有选项。虽然听起来很笨,但往往比一个个排查问题更快。

最后再分享一个小技巧:如果你有多台电脑需要配置环境,可以把 Unity 安装目录下的Editor/Data/PlaybackEngines/AndroidPlayer整个文件夹拷贝到另一台电脑的相同位置,然后在 Unity 中指定路径。这个文件夹里包含了 Unity 自带的 SDK、NDK、JDK 和 Gradle,拷贝过去就能用,省去了重复下载的时间。

这个内容后续还可以这样扩展:当你熟悉了基本的安卓打包流程后,可以进一步研究如何集成第三方广告 SDK、如何配置多渠道打包、如何自动化构建流程等。这些进阶话题每一个都值得单独拿出来讲,但前提是你先把基础环境配好,能稳定地打出包来。基础打牢了,后面的路才好走。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询