文章

Android Studio Zip 版环境布置文档

Android Studio Zip 版环境布置文档

Android Studio Zip 版环境布置文档

1. 目标

本文档用于在 Windows 重装系统后, 快速恢复 Android Studio zip 版环境。

目标包括:

1
2
3
4
5
6
1. Android Studio 本体放在非系统盘。
2. Android SDK 放在非系统盘。
3. Gradle 缓存放在非系统盘。
4. Android 用户数据和 AVD 数据放在非系统盘。
5. 通过 bat 恢复环境变量和 Path。
6. 尽量减少重装系统后的重复配置。

2. 目录规划

统一根目录:

1
D:\Dev\App\Android

推荐结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
D:\Dev\App\Android
├── android-studio
│   └── bin\studio64.exe
│
├── Sdk
│   ├── platforms
│   ├── build-tools
│   ├── platform-tools
│   ├── emulator
│   └── cmdline-tools
│
├── Gradle
│   ├── gradle-6.1.1
│   ├── gradle-8.13
│   └── GradleCache
│
├── JDK
│   ├── jdk-11.0.28+6
│   └── jdk-21.0.9+10
│
├── UserHome
│   └── avd
│
├── Build
│   ├── AARs
│   └── APK
│
└── Scripts
    └── restore_android_env.bat

说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
android-studio:
Android Studio zip 解压出来的目录。不要由 bat 创建。

Sdk:
Android SDK 目录。

Gradle:
本地 Gradle 工具目录和 Gradle 缓存目录。

JDK:
本地 JDK 目录。

UserHome:
Android 工具的用户级数据目录。

UserHome\avd:
Android 模拟器虚拟设备目录。

Build:
本地构建产物输出目录。

Scripts:
本机私有脚本目录, 不放进 Git 仓库。

3. Android Studio zip 放置方式

Android Studio zip 解压后通常会得到:

1
android-studio

将整个文件夹放到:

1
D:\Dev\App\Android\android-studio

最终应确认以下文件存在:

1
2
D:\Dev\App\Android\android-studio\bin\studio64.exe
D:\Dev\App\Android\android-studio\jbr\bin\java.exe

注意不要变成:

1
D:\Dev\App\Android\android-studio\android-studio\bin\studio64.exe

4. 环境恢复脚本

文件位置:

1
D:\Dev\App\Android\Scripts\restore_android_env.bat

用途:

1
2
3
4
5
6
7
1. 创建基础目录。
2. 设置用户环境变量。
3. 把已经存在的工具目录加入用户 Path。
4. 不创建 android-studio 目录。
5. 不移动文件。
6. 不删除文件。
7. 不创建快捷方式。

脚本内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
@echo off
setlocal

rem ============================================================
rem Android development environment restore script.
rem - Create folders if missing.
rem - Set user environment variables.
rem - Add existing tool paths to user PATH.
rem - Does not move, delete files, or create shortcuts.
rem - Does not create the android-studio folder.
rem ============================================================

set "ANDROID_ROOT=D:\Dev\App\Android"

set "ANDROID_STUDIO_DIR=%ANDROID_ROOT%\android-studio"
set "ANDROID_SDK_DIR=%ANDROID_ROOT%\Sdk"

set "GRADLE_DIR=%ANDROID_ROOT%\Gradle"
set "GRADLE_USER_HOME_DIR=%ANDROID_ROOT%\Gradle\GradleCache"

set "JDK_DIR=%ANDROID_ROOT%\JDK"
set "JDK_11_DIR=%ANDROID_ROOT%\JDK\jdk-11.0.28+6"
set "JDK_21_DIR=%ANDROID_ROOT%\JDK\jdk-21.0.9+10"

set "ANDROID_USER_HOME_DIR=%ANDROID_ROOT%\UserHome"
set "ANDROID_AVD_HOME_DIR=%ANDROID_ROOT%\UserHome\avd"

rem Default: use Android Studio bundled JBR.
set "JAVA_HOME_DIR=%ANDROID_STUDIO_DIR%\jbr"

rem Optional JDK choices:
rem set "JAVA_HOME_DIR=%JDK_11_DIR%"
rem set "JAVA_HOME_DIR=%JDK_21_DIR%"

rem ---------- Create folders if missing ----------
if not exist "%ANDROID_ROOT%" mkdir "%ANDROID_ROOT%"
if not exist "%ANDROID_SDK_DIR%" mkdir "%ANDROID_SDK_DIR%"
if not exist "%GRADLE_DIR%" mkdir "%GRADLE_DIR%"
if not exist "%GRADLE_USER_HOME_DIR%" mkdir "%GRADLE_USER_HOME_DIR%"
if not exist "%JDK_DIR%" mkdir "%JDK_DIR%"
if not exist "%ANDROID_USER_HOME_DIR%" mkdir "%ANDROID_USER_HOME_DIR%"
if not exist "%ANDROID_AVD_HOME_DIR%" mkdir "%ANDROID_AVD_HOME_DIR%"
if not exist "%ANDROID_ROOT%\Build" mkdir "%ANDROID_ROOT%\Build"
if not exist "%ANDROID_ROOT%\Build\AARs" mkdir "%ANDROID_ROOT%\Build\AARs"
if not exist "%ANDROID_ROOT%\Build\APK" mkdir "%ANDROID_ROOT%\Build\APK"
if not exist "%ANDROID_ROOT%\Scripts" mkdir "%ANDROID_ROOT%\Scripts"

rem ---------- Set user environment variables ----------
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
  "[Environment]::SetEnvironmentVariable('ANDROID_HOME', '%ANDROID_SDK_DIR%', 'User');" ^
  "[Environment]::SetEnvironmentVariable('ANDROID_SDK_ROOT', '%ANDROID_SDK_DIR%', 'User');" ^
  "[Environment]::SetEnvironmentVariable('GRADLE_USER_HOME', '%GRADLE_USER_HOME_DIR%', 'User');" ^
  "[Environment]::SetEnvironmentVariable('ANDROID_USER_HOME', '%ANDROID_USER_HOME_DIR%', 'User');" ^
  "[Environment]::SetEnvironmentVariable('ANDROID_AVD_HOME', '%ANDROID_AVD_HOME_DIR%', 'User');"

rem ---------- Set JAVA_HOME only when java.exe exists ----------
if exist "%JAVA_HOME_DIR%\bin\java.exe" (
    powershell -NoProfile -ExecutionPolicy Bypass -Command ^
      "[Environment]::SetEnvironmentVariable('JAVA_HOME', '%JAVA_HOME_DIR%', 'User');"
) else (
    echo [WARN] JAVA_HOME target does not exist yet:
    echo %JAVA_HOME_DIR%
    echo [WARN] JAVA_HOME was not changed.
)

rem ---------- Add existing tool paths to user PATH ----------
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
  "$pathsToAdd = @();" ^
  "if (Test-Path '%ANDROID_STUDIO_DIR%\bin') { $pathsToAdd += '%ANDROID_STUDIO_DIR%\bin' }" ^
  "if (Test-Path '%ANDROID_SDK_DIR%\platform-tools') { $pathsToAdd += '%ANDROID_SDK_DIR%\platform-tools' }" ^
  "if (Test-Path '%ANDROID_SDK_DIR%\emulator') { $pathsToAdd += '%ANDROID_SDK_DIR%\emulator' }" ^
  "if (Test-Path '%ANDROID_SDK_DIR%\cmdline-tools\latest\bin') { $pathsToAdd += '%ANDROID_SDK_DIR%\cmdline-tools\latest\bin' }" ^
  "if (Test-Path '%JAVA_HOME_DIR%\bin') { $pathsToAdd += '%JAVA_HOME_DIR%\bin' }" ^
  "$current = [Environment]::GetEnvironmentVariable('Path', 'User');" ^
  "$items = @();" ^
  "if ($current) { $items = $current -split ';' | Where-Object { $_ -and $_.Trim() -ne '' } }" ^
  "$normalized = $items | ForEach-Object { $_.Trim().TrimEnd('\').ToLowerInvariant() };" ^
  "foreach ($p in $pathsToAdd) {" ^
  "  $np = $p.Trim().TrimEnd('\').ToLowerInvariant();" ^
  "  if ($normalized -notcontains $np) { $items += $p; $normalized += $np }" ^
  "}" ^
  "[Environment]::SetEnvironmentVariable('Path', ($items -join ';'), 'User');"

echo.
echo [OK] Android environment restored.
echo.
echo Created / checked folders:
echo %ANDROID_ROOT%
echo %ANDROID_SDK_DIR%
echo %GRADLE_DIR%
echo %GRADLE_USER_HOME_DIR%
echo %JDK_DIR%
echo %ANDROID_USER_HOME_DIR%
echo %ANDROID_AVD_HOME_DIR%
echo %ANDROID_ROOT%\Build
echo %ANDROID_ROOT%\Build\AARs
echo %ANDROID_ROOT%\Build\APK
echo %ANDROID_ROOT%\Scripts
echo.
echo Android Studio expected path:
echo %ANDROID_STUDIO_DIR%
echo.
echo Environment variables:
echo ANDROID_HOME=%ANDROID_SDK_DIR%
echo ANDROID_SDK_ROOT=%ANDROID_SDK_DIR%
echo GRADLE_USER_HOME=%GRADLE_USER_HOME_DIR%
echo ANDROID_USER_HOME=%ANDROID_USER_HOME_DIR%
echo ANDROID_AVD_HOME=%ANDROID_AVD_HOME_DIR%
echo JAVA_HOME target=%JAVA_HOME_DIR%
echo.
echo PATH was updated only for paths that already exist.
echo Restart terminal / Rider / Android Studio to reload environment variables.
echo.

pause
exit /b 0

5. 首次布置步骤

5.1 准备目录

创建:

1
D:\Dev\App\Android

5.2 解压 Android Studio

将 Android Studio zip 解压出的 android-studio 放到:

1
D:\Dev\App\Android\android-studio

确认:

1
2
D:\Dev\App\Android\android-studio\bin\studio64.exe
D:\Dev\App\Android\android-studio\jbr\bin\java.exe

5.3 放入 Gradle

放入:

1
2
D:\Dev\App\Android\Gradle\gradle-6.1.1
D:\Dev\App\Android\Gradle\gradle-8.13

5.4 放入 JDK

放入:

1
2
D:\Dev\App\Android\JDK\jdk-11.0.28+6
D:\Dev\App\Android\JDK\jdk-21.0.9+10

5.5 执行环境恢复脚本

执行:

1
D:\Dev\App\Android\Scripts\restore_android_env.bat

执行后关闭并重新打开 CMD / PowerShell / Rider Terminal。


6. Android Studio 首次启动

运行:

1
D:\Dev\App\Android\android-studio\bin\studio64.exe

首次启动时, SDK 目录选择:

1
D:\Dev\App\Android\Sdk

Android Studio 安装 SDK 组件后, SDK 应落在:

1
2
3
4
D:\Dev\App\Android\Sdk\platforms
D:\Dev\App\Android\Sdk\build-tools
D:\Dev\App\Android\Sdk\platform-tools
D:\Dev\App\Android\Sdk\emulator

如果 SDK 安装完成后才创建 platform-tools, 需要再次运行:

1
D:\Dev\App\Android\Scripts\restore_android_env.bat

然后重新打开终端。


7. 验证环境

7.1 验证 adb

执行:

1
2
where adb
adb version

正常应输出:

1
D:\Dev\App\Android\Sdk\platform-tools\adb.exe

如果 where adb 找不到, 但下面命令可用:

1
"D:\Dev\App\Android\Sdk\platform-tools\adb.exe" version

说明 adb 本体正常, 只是当前终端还没有刷新 Path。

7.2 验证用户 Path

执行:

1
[Environment]::GetEnvironmentVariable('Path', 'User') -split ';' | Select-String "platform-tools"

正常应看到:

1
D:\Dev\App\Android\Sdk\platform-tools

8. 常见问题

8.1 adb 不是内部或外部命令

原因通常是当前终端没有刷新用户 Path。

处理方式:

1
2
3
4
1. 确认 adb.exe 存在。
2. 重新执行 restore_android_env.bat。
3. 关闭并重新打开 CMD / PowerShell / Rider Terminal。
4. 再执行 where adb。

8.2 JAVA_HOME 没有设置

如果看到:

1
[WARN] JAVA_HOME target does not exist yet

说明这个文件不存在:

1
D:\Dev\App\Android\android-studio\jbr\bin\java.exe

检查 Android Studio zip 是否解压正确。

8.3 AVD 目录为空

这是正常的。只有创建 Android Virtual Device 后才会生成具体设备数据。

目标目录:

1
D:\Dev\App\Android\UserHome\avd

如果创建模拟器后该目录仍为空, 检查 Android Studio 是否在新环境变量生效后启动。

本文由作者按照 CC BY 4.0 进行授权