如果你和我一样在 Ubuntu 上搭过安卓开发环境(Android Studio),应该会对几个反直觉的坑印象深刻:教程让你先装 JDK,装完才发现 AS 自带;SDK 组件下载转圈半天;模拟器起来以后卡成幻灯片。这篇就是把这些问题一次讲清,从依赖准备、安装方式取舍、SDK 加速、KVM 模拟器到 Gradle 镜像,给出一套照着做就能跑通的完整路径。
不管你是刚接触 Linux 的安卓新手,还是从 Windows/macOS 迁过来的老手,甚至是在虚拟机里体验 Ubuntu 的环境,这篇都能覆盖到。顺带会把 snap、apt、官网 tar.gz 三种安装方式的取舍,以及无线调试、项目迁移这些高频场景一并讲完。
1. 开始之前:硬件评估、磁盘规划,以及那个早已过时的 JDK 步骤
1.1 三种常见环境下的硬件要求
Ubuntu 上装 Android Studio,本身对机器要求不算苛刻,但安卓开发的完整链路(IDE + SDK + 模拟器 + Gradle)会把资源吃得很凶。我整理了一个参考标准:
| 场景 | 内存 | CPU | 磁盘空闲 | 结论 |
|---|---|---|---|---|
| 物理机安装 Ubuntu | 16GB 以上 | 4 核及以上 | 预留 30GB 以上 | 最推荐,模拟器也能流畅跑 |
| VMware/VirtualBox 虚拟机 | 至少 8GB | 4 核 | 预留 30GB | 能装能写代码,但模拟器很难流畅 |
| WSL2 环境 | 16GB 以上 | 4 核 | 预留 30GB | 适合轻量开发和真机调试 |
实际使用中,8GB 内存跑 AS 和模拟器会非常紧张,操作系统加 IDE 加浏览器,内存就见底了,Gradle 构建时风扇转得像起飞。我自己在 16GB 物理机上开一个项目、一个模拟器、再加浏览器和终端,内存占用一直在 10GB 附近徘徊。所以宁可内存大一点,也别在配置上抠门。
1.2 别再被旧教程忽悠:JDK 不需要手动装
这是我最想先讲清楚的一点。很多教程还会让你sudo apt install openjdk-8或者 openjdk-11/17,然后配置 JAVA_HOME。实际上,Android Studio 从很早的版本开始就内置了 JetBrains Runtime,目录就在安装路径下的jbr文件夹里。
你手动装的那份 JDK,不仅派不上用场,反而可能给 Gradle 和 AGP 的版本匹配惹麻烦。如果你已经装了,也不用卸载,只要别在环境变量里强行设置JAVA_HOME指向它就行。真正需要单独装 JDK 的场景,是你同时要写纯 Java 后端项目,并且希望在命令行里随手用java、javac,那是另一码事,与安卓开发无关。
1.3 一条命令装齐系统依赖
打开终端,先把软件源刷新一下:
sudo apt update然后安装:
sudo apt install -y wget curl unzip qemu-kvm libvirt-daemon-system libvirt-clientsqemu-kvm和libvirt-*是给 Android Emulator 的硬件加速用的,虽然现在还没装 AS,但先装好可以省掉后面一次重启。如果你是 20.04 及更早的 Ubuntu,可能还需要 32 位运行库:
sudo apt install -y libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1Ubuntu 22.04 和 24.04 下,这些包大多已经被移除或换名字了,不用强求。
1.4 磁盘规划:别等塞满了才后悔
安装包约 1.2GB,解压出来 2.5GB 左右,SDK 组件按需下载,模拟器镜像动辄 1GB 起步,Gradle 缓存随着项目增多会涨到 10GB 以上。如果你打算长期使用,建议一上来就给 home 目录留出 30GB 以上。
如果 home 所在分区空间吃紧,而另一个分区还有余量,可以提前把 Gradle 缓存软链过去:
mv ~/.gradle /data/gradle-cache ln -s /data/gradle-cache ~/.gradle做软链前记得先退出正在运行的 IDE 和 Gradle 守护进程,否则可能会失败。这个小习惯我后来一直保留,省过不少磁盘空间告急的尴尬。
2. 安装方式选型:三种常见方案对比,以及为什么官网 tar.gz 最省心
2.1 三种安装方式的真实对比
网上关于在 Ubuntu 上安装 Android Studio 的方式,主要就三种:snap、apt 和官网 tar.gz。这里直接给结论:长期使用,选官网 tar.gz。
| 安装方式 | 命令/途径 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|---|
| Snap | sudo snap install android-studio --classic | 一条命令搞定,自动更新 | 沙箱限制偶尔导致 SDK 路径、文件访问问题;启动点名慢 | 不推荐 |
| apt | 在软件中心搜或第三方 PPA | 方便 | 版本滞后,非官方维护,依赖易冲突 | 不推荐 |
| 官网 tar.gz | 官网下载压缩包解压 | 干净、路径可控、故障排查简单 | 需要手动建桌面快捷方式 | 推荐 |
我最初就是因为省事,装了 snap 版。结果是在访问/data下的 SDK 时碰到权限问题,折腾半天才意识到是 snap 沙箱对非 home 目录做了隔离。虽然可以绕开,但这类问题排查成本高,而且永远不知道下次升级会不会再冒出来一个。最后我卸载 snap 版,改用官网 tar.gz,世界安静了。
2.2 官网下载与解压的完整步骤
打开 developer.android.com/studio ,在 Linux 64-bit 那一栏点击下载 tar.gz 包。如果想全程命令行操作,可以用复制到的直链配合 wget 下载:
wget -c https://dl.google.com/dl/android/studio/ide-zips/2024.2.2.11/android-studio-2024.2.2.11-linux.tar.gz直链会随版本更新而变化,不要拿旧文章里的写死链接硬套。下载完成后解压到/opt:
sudo mkdir -p /opt/android-studio sudo tar -xzf android-studio-*-linux.tar.gz -C /opt然后启动:
/opt/android-studio/bin/studio.sh有人喜欢解压到 home 目录,这也没问题。我选/opt是因为它更像系统软件的常规位置,权限边界清晰,多人共用机器时不会互相污染。
2.3 桌面快捷方式:从 .desktop 文件开始
每次从终端敲studio.sh确实不专业。创建桌面入口文件:
mkdir -p ~/.local/share/applications nano ~/.local/share/applications/android-studio.desktop写入以下内容:
[Desktop Entry] Version=1.0 Type=Application Name=Android Studio Comment=Android Studio IDE Exec=/opt/android-studio/bin/studio.sh %F Icon=/opt/android-studio/bin/studio.png Terminal=false Categories=Development;IDE; StartupNotify=true StartupWMClass=jetbrains-android-studio保存后执行:
chmod +x ~/.local/share/applications/android-studio.desktop之后在应用程序菜单里搜索 Android Studio 就能直接打开。这一步做完,安装阶段才算彻底完成。
3. 首次启动与 SDK 下载:进度条卡住的解决办法
3.1 首次向导的关键选择
第一次启动 Android Studio,会先问你是否导入旧配置。第一次装就选Don't import settings,省得从旧版本带过来一堆没用的配置。
然后是 SDK 组件目录选择,默认是~/Android/Sdk。如果你 home 空间不算紧张,用默认就行。我个人的习惯是单独建一个分区,把 SDK 放到独立目录,比如/data/android-sdk。好处是以后重装系统时,home 目录可以保留,SDK 也省得重新下载。AS 会记住你填的路径,即使路径带中文或空格,新版也能正常处理,但建议还是保持纯英文路径,少一些莫名其妙的兼容问题。
在向导的组件选择界面里,推荐只勾当前项目最常用的几项:
- Android SDK Platform(当前主流版本,API 34/35 之类)
- Android SDK Build-Tools
- Android SDK Command-line Tools
不要第一次就把所有版本的 SDK Platform 全都勾上。哪个老项目需要老版本 SDK,等打开项目时 AS 会提示安装,再单独装也不迟。第一遍贪多,只会让下载战线拉长,没必要。
3.2 SDK 下载卡住:给 SDK Manager 配国内镜像
这一步是无数人的噩梦。SDK 组件下载进度条转半天,最后报超时。原因是 SDK 的默认下载源在 Google 服务器,网络环境不那么理想的时候,下载就是一场持久战。
解决思路是给 SDK Manager 配置国内公开镜像源,操作如下:
- 打开 Settings → Appearance & Behavior → System Settings → Android SDK → SDK Update Sites
- 取消勾选默认的
Android SDK Repository,避免它抢在镜像源之前被访问 - 添加自定义源:
- Name: Tencent Mirror,URL:
https://mirrors.cloud.tencent.com/AndroidSDK/ - Name: Aliyun Mirror,URL:
https://mirrors.aliyun.com/android.googlesource.com/
- Name: Tencent Mirror,URL:
- 点 Apply、OK,再重新进入 SDK Manager 安装组件
这两个都是国内公开镜像,不是野路子,很多公司内部就是这么配的。配完之后,下载速度基本是肉眼可见的提升。不同 AS 版本的设置入口可能略有差异,但搜 "SDK Update Sites" 一定找得到。
3.3 装完 SDK 后,先别急着建项目
SDK 组件装完后,其实已经可以创建 Hello World 了,但我建议先别急着写代码。如果打算用模拟器,先去 Device Manager 把系统镜像下载好;如果打算用真机,先去把 USB 调试环境和 adb 配好。原因很简单,模拟器系统镜像体积不小,有的版本要 1GB 往上。如果建完项目再去下载,第一次启动项目时,你会发现所有事情都在排队,体验极差。把环境一次性配齐,后面就是顺水推舟。
4. 模拟器能不能用,先看 KVM 和镜像架构
4.1 一条命令判断 KVM 是否可用
创建第一个 Android 项目通常很顺利,点几下 Next 就行。真正的坎在模拟器启动那一刻。如果 KVM 没就绪,模拟器要么起不来,要么起来后卡成 PPT。
先检查 CPU 是否支持虚拟化:
egrep -c '(vmx|svm)' /proc/cpuinfo结果大于 0,说明 CPU 虚拟化指令已开启。然后再看 KVM 设备是否存在:
ls -l /dev/kvm如果看到/dev/kvm,恭喜,硬件加速就绪。如果不存在,分两种可能:
- BIOS 里没开虚拟化,进入 BIOS 找到 Intel VT-x 或 AMD-V 相关选项并开启
- 你是在 VMware/VirtualBox 里装的 Ubuntu,需要在虚拟机设置的"虚拟化引擎"里勾选嵌套虚拟化
KVM 没起时,启动模拟器经常会直接报类似 "CPU acceleration status: KVM is not installed" 之类的错误,或者模拟器窗口迟迟不出现。这时候别急着重装 AS,先回到终端把 KVM 问题解决掉。
4.2 给 AVD 选对镜像,模拟器才能顺利跑起来
KVM 就绪后,在 Device Manager 里点击 "Create device",选一个 Pixel 型号,然后在 System Image 里选 API 级别合适的 x86_64 镜像。
有一个很容易踩的坑:在 x86 机器上选了 ARM 架构的镜像。虽然也能装,但运行效率惨不忍睹,启动都要好几分钟。开发调试优先选 x86_64 的系统镜像,别选错。
第一次启动 AVD 需要一点耐心,冷启动一两分钟很正常,之后会快很多。如果你用的是真机调试,这一步完全可以跳过,时间和磁盘空间都省了。
4.3 虚拟机里的 Ubuntu:别和 AVD 硬磕
如果你是在 VMware 或 VirtualBox 里装的 Ubuntu,我得泼一盆冷水:在这类虚拟机里跑 Android Emulator,体验通常非常糟糕。原因在于虚拟机本身就占用了一层 CPU 虚拟化,模拟器再叠加一层,效率几乎不可用。
我在 VMware 里实测过,模拟器启动奇慢,进入系统后操作也明显迟滞。如果就是想体验一下虚拟机里的 Ubuntu 安卓开发,强烈建议直接走 USB 真机调试,把 AVD 这关绕过去。等以后有条件上物理机双系统,再回来享受模拟器的便利也不迟。
WSL2 的情况也类似。虽然 WSLg 能显示 GUI,但 Android Emulator 对 KVM 的依赖很强,WSL2 里开启嵌套虚拟化需要额外配置,不是开箱即用。WSL 用户想省事,同样优先考虑真机。
5. Gradle 首次构建提速:init.gradle 和 distributionUrl 的正确打开方式
5.1 卡住的根源:发行版和依赖都从国外拉
新建项目后的第一次 Gradle Sync,很多人会看到进度条在一个地方停很久。这不是 AS 卡死,是它在从 Google 的源下载 Gradle 发行版和依赖库。光是 Gradle 发行版就 100MB 多,加上 AGP 插件和 androidx 依赖,累计几百 MB 甚至更多。网络环境不好时,这个阶段等上半小时也不稀奇。
这也是"android studio importing gradle project 太慢"这类问题长期存在的根本原因。解决方案本质上就一句话:把下载源换成国内公开镜像。
5.2 建一个全局 init.gradle
Gradle 支持全局初始化脚本,放在~/.gradle/init.gradle里,对所有项目生效。先创建并编辑这个文件:
nano ~/.gradle/init.gradle写入:
allprojects { repositories { maven { url 'https://maven.aliyun.com/repository/public' } maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } mavenCentral() google() } }保存后回到 AS 重新 Sync。allprojects中的repositories配置会让所有模块的依赖优先从镜像仓库拉取,找不到的再回退到官方源。这个文件写一次,以后每个项目都受益,是性价比最高的加速操作之一。如果项目本身在settings.gradle.kts里显式声明了仓库,部分情况下项目内配置优先级更高,但先写上这层兜底,总能解决大多数问题。
5.3 distributionUrl 也换一下
如果进度条卡在 "Downloading gradle-x.x.x.zip",说明 Gradle 发行版本身下载太慢。打开项目的gradle/wrapper/gradle-wrapper.properties,找到distributionUrl,改成腾讯云镜像:
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.10.2-bin.zip注意版本号必须和你原来的一致,不要看到 8.10.2 就照抄。如果版本号不匹配,下载可能失败,而且报错信息往往不友好,容易带人绕弯路。
5.4 打开老项目时的版本匹配问题
从 GitHub 或同事那里拿到的老项目,打开时经常报一些让人摸不着头脑的错。常见原因之一是 Gradle 版本和 AGP(Android Gradle Plugin)版本不匹配。这里给一个粗略的对照关系:
| AGP 版本 | 要求的最低 Gradle 版本 |
|---|---|
| AGP 8.x | Gradle 8.x |
| AGP 7.x | Gradle 7.x |
| AGP 4.x | Gradle 6.x |
我的建议是:打开老项目时,优先保持它原有的 Gradle 版本,把它原封不动地 Sync 通过,再考虑升级。很多"一打开就报错"的案例,本质上是在迁移时顺手升级了 AGP,却没有配套升级 Gradle,或者反过来。项目能跑起来,永远比"用上新版本"更重要。
6. 把 IDE 调到顺手状态:中文语言包、输入法和代码字体
6.1 Android Studio 官方中文语言包
很多新手一上来面对全英文界面,会出现短暂的"界面恐慌"。其实 Android Studio 的汉化非常简单,官方提供了一个中文语言包插件。
操作路径:Settings → Plugins → Marketplace → 搜索 "Chinese (Simplified) Language Pack for Android Studio" → Install → 重启 IDE。
装完之后,菜单、设置项都会变成中文。不过要清楚一点:中文包只是降低界面门槛,真正的报错日志、官方文档还是英文,这两样东西的学习价值远高于界面文字。
6.2 Ubuntu 中文输入法:别和 IDE 输入较劲
热搜词里"ubuntu 中文输入法怎么设置"是高频问题。在 Ubuntu 上,如果只使用系统自带的 ibus 拼音,日常打字没问题,但在 JetBrains 系 IDE 里偶尔会出现候选框不跟光标或者无法唤起的情况。我自己换成 fcitx5 之后稳定很多。
配置方法大致是这样:
- 安装 fcitx5 和中文输入插件:
sudo apt install -y fcitx5 fcitx5-chinese-addons- 打开系统设置 → 区域与语言 → 输入源,添加汉语拼音
- 把系统的输入法框架切换为 fcitx5。具体入口在系统设置的"输入法"相关页面,有些版本需要先装
fcitx5-config-qt才能打开配置界面 - 如果想用搜狗输入法 Linux 版,去搜狗官网下载 deb 包,
sudo apt install ./sogoupinyin_*.deb,装完在 fcitx5 里添加搜狗条目即可
改完输入法框架后建议重启系统一次,让环境变量完全生效。输入不了中文这种问题虽然不影响编译,但它会让你瞬间失去写注释的欲望,属于值得提前管理好的体验问题。
6.3 字体:把代码渲染调成接近 macOS 的观感
热搜词里提到 "wsl ubuntu 写代码最推荐的字体接近 macos 的体验",说明大家对代码字体的要求挺统一的。Ubuntu 默认字体在部分屏幕上确实不够细腻,尤其是中英文混排时。
Linux 上比较容易获得好观感的代码字体是 JetBrains Mono,其次 Fira Code、Source Code Pro。安装:
sudo apt install -y fonts-jetbrains-mono然后在 AS 的 Settings → Editor → Font 里选择 JetBrains Mono,字号 14 或 16,行距调成 1.2 左右。这样日常写代码的观感已经很接近 macOS 那种圆润舒服的体验了。如果你在 WSLg 下觉得字体发虚,可以再看看 fontconfig 层面的 hinting 设置,但一般情况下换字体已经能解决 80% 的问题。
7. 真机调试与旧项目迁移:无线连接、版本匹配和环境变量急救
7.1 无线连接真机调试(以 Android 11+ 为例)
热搜词里"无线连接调试 vivo 手机"很有代表性。Android 11 及以上系统内置了无线调试能力,不需要 USB 线,也不需要额外工具。
步骤如下:
- 手机和电脑连到同一个 Wi-Fi
- 手机开发者选项里打开"无线调试"
- 在"使用配对码配对设备"的弹窗中,记下 IP 地址和配对端口
- 电脑终端执行:
adb pair 192.168.1.100:37000按提示输入 6 位配对码 5. 配对成功后,执行:
adb connect 192.168.1.100:37001注意这个端口是无线调试页面里显示的"调试端口",和刚才的配对端口不是同一个,很容易搞混。下面的 IP 和端口以你手机显示为准,不要照抄示例。 6. 手机弹窗允许调试授权,之后 AS 的设备列表就会多出这台无线设备
不同厂商的 ROM(vivo、小米、OPPO 等)在开发者选项上会加一些额外确认,连接不稳定时,把"无线调试"页面保持在手机前台,可以排除很多变量。
7.2 从 Windows/macOS 换到 Ubuntu 时的项目迁移
如果你带着旧项目从 Windows 或 macOS 切到 Ubuntu,最容易遇到下面几个问题:
gradlew没有执行权限,在终端里先执行:
chmod +x gradlew否则会报 Permission denied。 2.local.properties记录的是旧机器的 SDK 路径,迁移后最好直接删掉,让 AS 根据当前环境的 SDK 路径自动重建 3. 不要拷贝.idea和build目录,这些是本地配置和构建产物,拷贝过去只会带来无意义的路径错乱和冲突。正确做法是只需要源码、Gradle 配置、gradle wrapper 这些必要文件
如果项目迁移后报错,别一直在 AS 图形界面里干瞪眼,直接打开终端跑:
./gradlew assembleDebug终端输出的完整日志,比 GUI 里给的那点摘要信息有用得多。
7.3 环境变量配错导致基础命令失效的急救包
最后聊一个配置环境变量时的经典惨案:想设ANDROID_HOME,结果把 PATH 覆盖了,重启终端后发现ls、sudo全都不认识,报 "command not found"。
别慌,用完整路径打开编辑器修回来:
/usr/bin/nano ~/.bashrc改完保存,执行source ~/.bashrc。如果当前会话连 nano 都没法用,先用下面这条把 PATH 恢复到标准状态:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin正确设置环境变量的方式,是在~/.bashrc末尾追加:
export ANDROID_HOME=$HOME/Android/Sdk export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator关键点在第二行的$PATH:,这意味着在原有 PATH 上追加新路径,而不是把原有的全局替换掉。这个问题看着小,但几乎每个换 Linux 环境的人都会踩一次,提前打好预防针能省不少事。
我自己的日常,就是 Ubuntu 物理机 + 真机 USB 调试 + Gradle 镜像加速,几个项目来回切,基本不卡壳。装完这一套之后回头再看,Android Studio 在 Ubuntu 上的安装难度其实不高,真正的分水岭全在那几个隐藏关卡:KVM 有没有开、SDK 组件能不能顺利拉下来、Gradle 构建能不能跑赢时间。把这些前置问题解决掉,后续开发反而比在 Windows 上省心不少。最后再补一个小建议:从官网下载大文件时,用wget -c带断点续传,慢一点也比断了重来强。希望这篇能帮你在 Ubuntu 上少走一晚弯路。