☰
Unity Android构建:android-sdk-26_1_1.zip离线SDK配置与排错指南
2026/11/4 10:02:01 网站建设 项目流程

简介:这份 android-sdk-26_1_1.zip 面向 Android 应用开发者与使用 Unity 引擎做 Android 游戏开发的团队,用于将旧版 SDK Tools(25.2.5 及以下)升级至 26.1.1,解决旧工具集在模拟器效率、构建兼容性与稳定性上的遗留问题。压缩包共 1826 个文件,约 148.9MB,以 jar 库、gif 与 png 界面资源、css/html 帮助文档、properties 配置、xml 描述及 exe/bat 可执行脚本为主,覆盖工具运行、文档说明与平台适配等模块。已有 2500 人学习下载。资源保留了完整的 tools 目录结构,替换后即可获得新版模拟器、Build Tools 与 AndroidX 相关支持,并附带替换说明与注意事项,便于开发者对照完成环境迁移,减少升级过程中的依赖与环境变量配置踩坑,适合需要稳定构建链的中高级开发者参考使用。

1. 拿到 android-sdk-26_1_1.zip 先别急着解压:Unity Android 构建链里它到底补的是哪块拼图

如果你在 Unity 里点 Build 之后,控制台甩出一句Android SDK not found或者CommandInvokationFailure: Failed to build Player,然后你翻遍安装目录发现 Unity Hub 只给你装了个空壳,那这个android-sdk-26_1_1.zip就是冲这个场景来的。它是一份 Android SDK 的离线压缩包,版本号 26.1.1 对应的是 Android 8.0(API 26)时代的构建工具链,核心价值在于给 Unity 的 Android 导出流程补齐platform-tools、build-tools、platforms/android-26这几块 Unity 自己不会替你下载的组件。适合谁?适合那些网络环境不稳、Hub 自动下载反复失败、或者需要在一台不联网的机器上把 Unity Android 构建跑通的人。它不是万能包,但对“构建卡在 SDK 缺失”这个具体痛点,它是能直接落地的那一类资源。

2. 拆包前先搞清 Unity 要的是哪几个目录:SDK 结构与版本对齐

2.1 一个合格 Android SDK 目录长什么样

Unity 对 Android SDK 的识别不是“有个文件夹就行”,它会去校验几个固定子目录是否存在、里面有没有对应的可执行文件。你把android-sdk-26_1_1.zip解压后,正常应该能看到类似这样的结构:

android-sdk-26_1_1/ ├── platform-tools/ │ ├── adb │ ├── adb.exe │ └── fastboot ├── build-tools/ │ └── 26.0.1/ │ ├── aapt │ ├── apksigner │ └── zipalign ├── platforms/ │ └── android-26/ │ └── android.jar └── tools/ └── ...

Unity 在 Preferences → External Tools 里填 SDK 路径时,认的是这个根目录。它内部会去找platform-tools/adb、build-tools/<版本>/aapt、platforms/android-<API>/android.jar。少任何一个,构建阶段就会报对应的缺失错误。所以解压之后第一件事不是急着填路径,而是先ls一遍确认这三样都在。

2.2 版本号 26.1.1 和 Unity 版本的匹配逻辑

这里有个容易翻车的地方:26.1.1这个版本号指的是 SDK 打包版本,不等于 build-tools 的版本,也不等于 target API。Unity 不同大版本对最低 SDK 的要求不一样,老版本 Unity(比如 2017.x、2018.x 早期)对 API 26 兼容良好,而较新的 Unity 可能要求 API 30 以上。你拿到这个包,先确认自己 Unity 的 Player Settings → Other Settings → Target API Level 能不能设到 26 附近。如果 Unity 强制要求更高 API,这个包只能当 platform-tools 和 build-tools 的来源,platforms 目录还得另外补。常见做法是:把这个包当基础骨架,缺的高版本 platform 单独补进去,目录结构保持同级。

2.3 解压路径的两个硬约束

路径里不要有中文和空格,这是血泪经验。Unity 调用 aapt、adb 这些命令行工具时,路径带空格会导致参数被截断,报出来的错还特别隐晦,比如Unable to list target platforms。建议直接解到D:\AndroidSDK\或者~/android-sdk/这种干净路径。另外,解压工具别用那种会自动改文件权限的,Windows 上用 7-Zip 正常解压即可,macOS/Linux 上解压后要手动给platform-tools/adb、build-tools/*/aapt加执行权限:

chmod +x platform-tools/adb chmod +x build-tools/26.0.1/aapt chmod +x build-tools/26.0.1/apksigner chmod +x build-tools/26.0.1/zipalign

这几行不加,Unity 在 macOS 上会报Permission denied,而且错误信息指向的是构建脚本内部,不是直接指向权限,排查起来很绕。

3. 把 SDK 接进 Unity:External Tools 配置与 JDK 联动

3.1 External Tools 里三个路径的填法

打开 Unity → Edit → Preferences → External Tools,Android 部分有三个关键输入框:SDK、JDK、NDK。这个android-sdk-26_1_1.zip只解决 SDK 那一栏。JDK 需要单独准备,Unity 2019 之后自带 OpenJDK,路径一般在 Unity 安装目录的Editor/Data/PlaybackEngines/AndroidPlayer/OpenJDK下,直接勾选 “Use embedded JDK” 即可。NDK 只有在你用了 IL2CPP 并且需要原生插件时才必须,纯 C# 项目可以留空。

SDK 那一栏填你解压后的根目录,比如D:\AndroidSDK\android-sdk-26_1_1。填完之后 Unity 不会立刻校验,你要点一下 Build 或者打开 Build Settings 切到 Android 平台,它才会去读目录。如果路径填错,控制台会明确告诉你哪个子目录没找到,这时候对照 2.1 节的结构去补就行。

3.2 用命令行先验证一遍,别等 Unity 报错

在填进 Unity 之前,我一般会先在终端里手动跑一遍,确认这套 SDK 本身是活的:

# 确认 adb 能跑 ./platform-tools/adb version # 确认 aapt 能列出目标平台 ./build-tools/26.0.1/aapt list platforms/android-26/android.jar # 确认 android.jar 存在且非空 ls -lh platforms/android-26/android.jar

adb version输出正常说明 platform-tools 完整;aapt list能列出 jar 内容说明 build-tools 和 platform 对得上;android.jar大小一般在几十 MB,如果只有几 KB 那说明解压不完整或者包本身有问题。这三步过了,再往 Unity 里填,能省掉大量“到底是 SDK 问题还是 Unity 配置问题”的来回猜。

3.3 Gradle 构建模式下的额外注意点

Unity 2019.3 之后默认走 Gradle 构建,SDK 路径除了 External Tools,还会被写进gradle.properties或者由 Unity 自动生成local.properties。如果你之前手动改过项目的local.properties,里面sdk.dir指向的是旧路径,Unity 可能优先读那个而不是 Preferences 里的设置。排查时去项目根目录看一眼local.properties,内容应该是:

sdk.dir=D\:\\AndroidSDK\\android-sdk-26_1_1

Windows 下路径里的反斜杠要转义,冒号也要转义,这是 properties 文件的格式要求。写错了 Gradle 会报SDK location not found,但 Unity 控制台不一定把这条透出来,得看Editor.log才能看到 Gradle 的原始输出。

4. 构建报错排查:五类高频翻车现场

4.1 报 “Android SDK not found” 但路径明明填了

现象:Preferences 里路径填得好好的,Build 时依然提示找不到 SDK。原因多半是路径指向了 zip 解压后的外层目录,而不是包含platform-tools的那一层。有些人解压出来是android-sdk-26_1_1/android-sdk-26_1_1/platform-tools,多套了一层。解决:在文件管理器里进到能看到platform-tools、build-tools、platforms三个文件夹并列的那一层,把那个路径填进去。

4.2 报 “Failed to find target with hash string android-26”

现象:SDK 认到了,但构建时找不到目标平台。原因:platforms/android-26目录缺失,或者目录名不对(比如叫android-26.0.1)。解决:确认platforms下目录名严格是android-26,里面必须有android.jar。如果这个包里的 platform 版本和你 Unity 里设的 Target API 不一致,要么改 Unity 的 Target API 到 26,要么把对应版本的 platform 补进platforms目录。

4.3 adb 能跑但设备列表为空

现象:adb devices输出为空,Unity 的 Build And Run 找不到设备。原因:设备驱动没装、USB 调试没开,或者 adb 版本太老和设备的 adb 协议不匹配。26.1.1 自带的 adb 版本偏旧,连一些新设备可能握手失败。解决:先确认设备端开发者选项和 USB 调试已开,然后换用更新版本的 platform-tools 替换掉这个包里的platform-tools目录,其他目录不动。这是这个老版本包最常见的边界——platform-tools 可以单独升级,不影响 build-tools 和 platform。

4.4 构建成功但安装时报 “INSTALL_FAILED_OLDER_SDK”

现象:APK 打出来了,装到设备上被拒。原因:Unity 里 Minimum API Level 设得比设备系统版本高。比如设备是 Android 7.0(API 24),你 Minimum API 设了 26。解决:Player Settings → Minimum API Level 调到设备实际版本以下。这个包提供的是 API 26 的编译目标,不代表最低运行版本必须 26,两者是分开的配置项。

4.5 macOS 上 aapt 报 “bad CPU type in executable”

现象:在 Apple Silicon 机器上跑构建,aapt 直接崩。原因:这个包里的 build-tools 二进制是 x86_64 架构,没有 arm64 版本。解决:要么用 Rosetta 跑 Unity 编辑器,要么单独换一套带 arm64 二进制的 build-tools。这是老版本 SDK 包在新硬件上的硬边界,不是配置能绕过去的,得认。

5. 进阶:把这份 SDK 做成可复用的构建底座

5.1 目录瘦身与版本锁定

这个包解压后体积不小,但真正参与 Unity 构建的只有platform-tools、build-tools/26.0.1、platforms/android-26三块,tools目录里很多是给 Android Studio 用的 GUI 工具,命令行构建用不上。我一般会保留这三块,把tools里非必要的内容删掉,做一个精简底座,放到一个固定路径下,比如D:\AndroidSDK\base-26。然后写一个简单的校验脚本,每次换机器或者换 Unity 版本时先跑一遍:

#!/bin/bash SDK_ROOT="${1:-/d/AndroidSDK/base-26}" check() { [ -e "$SDK_ROOT/$1" ] && echo "OK $1" || echo "MISS $1" } check "platform-tools/adb" check "build-tools/26.0.1/aapt" check "platforms/android-26/android.jar"

这个脚本不复杂,但能在一分钟内告诉你底座是否完整,比等 Unity 构建到一半报错再回头查要省事得多。参数就是 SDK 根目录,不传则用默认路径,输出直接标 OK 或 MISS,一眼能看出缺哪块。

5.2 多 Unity 版本共存时的路径策略

如果你机器上同时装了 2018 和 2021 两个 Unity,它们对 SDK 的要求不一样,但 External Tools 的路径是全局 Preferences,切项目时容易串。我的习惯是每个 Unity 大版本配一个独立的 SDK 底座,用环境变量区分,然后在启动 Unity 前根据项目切环境变量。虽然 Unity 不直接读环境变量里的 SDK 路径,但你可以用一个小脚本在启动前把对应底座软链到固定路径,Unity 始终读那个固定路径。这样切项目不用反复改 Preferences,减少手误。

5.3 验证构建产物是否真的用了这套 SDK

构建完成后,别只看“Build succeeded”。用aapt dump badging看一下 APK 的实际编译信息:

./build-tools/26.0.1/aapt dump badging build.apk | head -5

输出里sdkVersion和targetSdkVersion应该和你 Player Settings 里设的一致。如果不一致,说明 Unity 实际用的不是你填的这套 SDK,可能读到了别的路径或者缓存。这一步是我每次换 SDK 底座后必做的确认,从那以后我每次接新 SDK 都强制先跑一遍aapt dump badging再宣布构建链打通,省得后面出玄学问题回头翻旧账。希望帮到你。

本文还有配套的精品资源,点击获取

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

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

立即咨询