多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Ubuntu搭建安卓开发环境:从SDK配置到模拟器调试全攻略

Ubuntu搭建安卓开发环境:从SDK配置到模拟器调试全攻略 想在 Ubuntu 上装一套安卓开发环境说难不难说简单也真有一堆坑等着你。尤其是刚从 Windows 切过来的朋友第一反应通常是“下载 Android Studio 解压就能用了吧”结果装上之后发现 SDK 路径不对、模拟器起不来、adb 连不上手机、Gradle 卡在下载依赖那一步一个下午就这么没了。这篇文章就把我这些年在新装 Ubuntu 机器上搭安卓开发环境的完整流程、踩坑记录和配置思路一次讲清楚。不管你是刚接触 Linux 的新手还是已经在 Windows 上写过几个 App、想换到 Ubuntu 做主力开发的老手照着这套流程走基本上能绕开我踩过的绝大多数坑。我会从系统准备、本体安装、SDK 与环境变量、模拟器与真机调试、常见问题这几个维度逐层拆开每一步我都会解释“为什么这么做”而不只是甩给你一条命令。1. 环境准备先把地基打牢别急着下载 Android Studio1.1 系统版本与桌面环境的选择思路Ubuntu 官方支持的长期支持版本LTS是首选目前主流的 20.04、22.04、24.04 都没问题。如果你只是用来写代码我更建议用 22.04 或 24.04原因很简单Android Studio 新版本对较新系统的 GLIBC、OpenSSL 等底层库依赖更友好某些新特性比如新版模拟器对 Vulkan 的支持在旧系统上需要折腾额外的驱动。桌面环境方面默认的 GNOME 就能干活但我个人的实际体验是如果机器配置一般8GB 内存以下GNOME 的内存占用会挤压 Android Studio 和模拟器的空间。这种情况下与其纠结“精简桌面”不如直接把 Ubuntu 的 GNOME 优化一下关掉动画、减少后台服务效果立竿见影。装完系统后先执行一遍系统更新把内核和显卡驱动都升到当前版本这一步能避免很多模拟器渲染相关的诡异问题。1.2 安装基础依赖这些库不装后面必出幺蛾子Android Studio 本体虽然下载下来是个 tar.gz但它本质上是 JetBrains 的 JVM 桌面应用还牵扯到一堆图形库、USB 设备通信库和编译工具链。我整理了一份依赖清单在干净的 Ubuntu 上先装好再继续sudo apt update sudo apt upgrade -y sudo apt install -y openjdk-17-jdk unzip wget curl \ libc6:i386 libncurses5:i386 libstdc6:i386 \ lib32z1 lib32ncurses6 lib32stdc6 \ libx11-6 libx11-6:i386 libpulse0 libpulse0:i386 \ libgl1-mesa-glx libgl1-mesa-glx:i386 libgl1-mesa-dri \ libxcursor1 libxrandr2 libxss1 libxtst6 \ adb fastboot这里几类库分别解决什么问题我说一下免得你觉得这是在乱装libc6:i386、lib32z1、lib32stdc6这一类 32 位库是给模拟器和某些老的构建工具用的。Android 模拟器虽然通常是 64 位进程但它内部继承了 32 位组件缺了这些库模拟器要么起不来要么起来之后黑屏、闪退。libpulse0是音频库不装的话模拟器里没声音而且某些模拟器版本会因为没有音频后端直接崩溃。adb和fastboot虽然 Android Studio 会自带一份 platform-tools但系统级装一份可以避免以后你在命令行里敲adb提示 command not found。SDK 里的 adb 和系统 adb 版本不一致时记得统一用 SDK 里的后面调试章节会细说。openjdk-17-jdk是给老的 Gradle 构建脚本用的。注意新版 Android Studio 自带的 JBRJetBrains Runtime完全能满足编译需求系统 JDK 主要是在命令行跑 Gradle 或某些第三方工具时会用到装上没坏处。注意不要装 OpenJDK 18 以上版本做默认 JDK。某些构建插件对 JDK 版本敏感用 17 最稳。Android Studio 内可以单独配置 Gradle JDK那个反而是推荐优先用自带的 JBR。1.3 判断机器是否支持模拟器加速模拟器属于“用时方恨慢”的东西CPU 虚拟化支持直接决定了你的开发体验。AMD 的 SVM 和 Intel 的 VT-x 必须在 BIOS 里开启。开机进 BIOS 找Virtualization Technology或SVM ModeOpen 之后保存重启。这是硬件层面的前提系统里怎么配置都替代不了。进系统后验证一下egrep -c (vmx|svm) /proc/cpuinfo如果输出为 0说明 CPU 虚拟化没开或被 Hypervisor 占用了输出大于 0 说明 CPU 没问题。接着装 KVM 相关组件并检查kvm-ok的输出sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager kvm-ok输出KVM acceleration can be used就说明模拟器可以走硬件加速。注意执行完后要把当前用户加入kvm和libvirt组否则模拟器打开时仍可能报权限不足sudo usermod -aG kvm $USER sudo usermod -aG libvirt $USER newgrp kvm2. Android Studio 本体安装解压版、命令行、Snap 三种方式的取舍2.1 为什么不推荐 Snap 版本Ubuntu 软件商店里直接搜 Android Studio一键安装确实方便但用 Snap 版做安卓开发你大概率会遇到两个非常别扭的问题第一Snap 的沙箱机制对文件系统的访问有隔离你在工程里用File Open打开位于/home之外或某些挂载目录下的项目时会莫名报权限错误或者目录显示为空。第二模拟器需要访问/dev/kvm和 USB 设备Snap 版对这些设备节点的访问经常需要额外的手动授权新手很难一次搞定。而且 Snap 版升级是自动后台的如果新版 Android Studio 有兼容问题你连锁版本的机会都没有。所以我的建议很明确如果你追求稳定可控直接下载官方 tar.gz 解压到/opt用命令行启动或创建桌面快捷方式。2.2 官方版本下载与解压目录规划打开 Android Studio 官方下载页面developer.android.com/studio选择 Linux 版本的 tar.gz 包。下载的时候注意文件名里的版本号目前主流稳定版本的命名规律是android-studio-XXXX.XX.XX-linux.tar.gz大小在 1GB 左右。下载完成后规划解压目录。我一直用的是/opt下创建android-studio目录这样所有用户都能访问避免个人目录权限混乱sudo tar -xzf android-studio-*-linux.tar.gz -C /opt/解压后/opt/android-studio/bin目录下会有一个studio.sh脚本这就是 Android Studio 的启动入口。第一次启动建议直接在终端执行方便看日志/opt/android-studio/bin/studio.sh如果你希望在任何目录下都能直接敲studio命令启动而不是敲一长串路径做一个软链接到/usr/local/bin即可sudo ln -s /opt/android-studio/bin/studio.sh /usr/local/bin/studio2.3 创建桌面快捷方式与图标修复终端启动没问题之后为了平时使用方便建议在应用菜单里加上 Android Studio 的入口。新建一个桌面文件[Desktop Entry] NameAndroid Studio CommentAndroid Development IDE Exec/opt/android-studio/bin/studio.sh Icon/opt/android-studio/bin/studio.png Terminalfalse TypeApplication CategoriesDevelopment;IDE; StartupWMClassjetbrains-android-studio保存为~/.local/share/applications/android-studio.desktop然后执行chmod x ~/.local/share/applications/android-studio.desktop这里有个细节StartupWMClass这一行必须写对否则你在 GNOME 的任务栏上会看到两个图标一个是你点击的 Android Studio另一个是启动后真实的窗口很影响观感。实操心得如果你用 Wayland 会话某些 NVIDIA 驱动版本会导致 Android Studio 的窗口出现花屏或鼠标拖动残影。解决办法是编辑/opt/android-studio/bin/studio.vmoptions在文件末尾加上-Dsun.java2d.opengltrue或者干脆切回 Xorg 会话。我实测两种方式都有效具体选哪个看你的显卡驱动是否支持 OpenGL 后端。2.4 首次启动配置SDK 位置与组件选择第一次启动 Android Studio 会进入 Setup Wizard这个流程通常需要联网因为它要从 Google 服务器拉取 SDK 组件。如果你所在网络访问官方源比较慢这里就是第一个容易卡死的地方。Wizard 里会让你选择 SDK 组件的安装位置和要安装的组件。默认情况下 SDK 会放在~/Android/Sdk这个路径没问题建议保留。组件层面基础安装必须包含三样Android SDK Platform-Tools提供 adb、fastboot 等核心调试命令Android SDK Build-Tools提供 aapt2、zipalign、d8 等构建工具某个版本的Android SDK Platform比如Android 14 (API 34)这是编译 targetSdk 时的基础不要一开始把所有组件全部勾选比如系统镜像System Images占空间极大等你真正需要模拟器的时候再单独下载不迟。Wizard 卡在 “Downloading SDK Components” 或 “Installing SDK” 阶段很久大概率是网络问题。这时候可以先关掉 Wizard手动配置代理或用国内镜像源方法见后面第四章节。3. 核心配置SDK、环境变量与开发体验打磨3.1 环境变量到底该怎么配Android 开发相关的环境变量主要有三个ANDROID_HOME、ANDROID_SDK_ROOT和PATH里加 platform-tools。ANDROID_HOME是老规矩ANDROID_SDK_ROOT是更新一点的规范两者指向同一个目录建议都写上兼容各种工具链。打开配置文件vi ~/.bashrc在末尾追加export ANDROID_HOME$HOME/Android/Sdk export ANDROID_SDK_ROOT$HOME/Android/Sdk export PATH$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator保存后执行source ~/.bashrc验证是否生效adb --version能输出版本信息就说明环境变量没问题。如果你用的是 zsh记得改~/.zshrc别配错文件了。注意环境变量里不建议把cmdline-tools的 bin 目录加进 PATH因为 cmdline-tools 里有个sdkmanager它的执行依赖相对路径直接放 PATH 里容易出问题需要用的时候敲全路径或进目录执行更好。3.2 设置中文字体与代码字体Windows 用户最关心的一环Ubuntu 上安卓开发字体问题几乎是每个从 Windows 或 macOS 转过来的人都会吐槽的点。中文显示这块系统自带的中文字体在 IDE 的代码区、控制台输出里经常显示成方框或者笔画发虚很影响心情。先解决系统层面的中文显示。安装 Noto Sans CJK 字体这是 Google 和 Adobe 联合开发的标准中文黑体sudo apt install -y fonts-noto-cjk然后在 Settings Appearance 里把字体设置为Noto Sans CJK SC再勾选 “Antialiasing: Subpixel”中文渲染会舒服很多。代码字体方面如果你习惯了 macOS 上那种等宽字体体验Android Studio 里我比较推荐 JetBrains Mono。它本身就是 JetBrains 家的 IDE 默认字体和 Android Studio 的渲染引擎配合最默契英文和符号的可读性都很高。下载 JetBrains Mono 的 zip 包解压后双击.ttf文件点 “Install Font” 即可。然后在 Settings Editor Font 里选择JetBrains Mono字号设 14 或 15行间距 1.2 左右写代码时的视觉疲劳能明显降低。3.3 Gradle 构建加速不要使用默认仓库硬扛安卓工程构建时Gradle 要从 Maven 仓库拉取大量依赖AndroidX、第三方库、Kotlin 插件等。默认仓库是 Google 和 Maven Central在国内网络环境下经常慢到让人怀疑人生。明明几 KB 的东西能卡几分钟。解决办法是配置国内镜像仓库。全局配置方式是在用户目录下创建~/.gradle/init.gradle文件内容如下allprojects { repositories { maven { url https://maven.aliyun.com/repository/central } maven { url https://maven.aliyun.com/repository/google } maven { url https://maven.aliyun.com/repository/gradle-plugin } maven { url https://maven.aliyun.com/repository/public } } }这样所有工程都会自动走阿里云的镜像下载速度提升非常明显。如果你用的公司网络屏蔽了部分外网域名还可以在~/.gradle/gradle.properties里加上一行systemProp.http.proxyHost你的代理IP systemProp.http.proxyPort你的代理端口不过我个人不推荐全局代理配置因为一旦代理失效Gradle 会直接报连接超时排查起来反而麻烦。镜像方案更干净只在仓库层面替换不影响其他网络请求。4. 模拟器与真机调试跑起来才能算环境就绪4.1 创建与优化模拟器AVDAndroid Studio 里点击右上角带手机图标的 Device Manager点击 “Create device”选择一个硬件模板比如 Pixel 6。然后选系统镜像这里要特别注意如果 API 34 以上的最新镜像下载太慢可以选 API 30 或 31 的镜像开发调试完全够用启动速度反而更快。镜像下载完成、创建 AVD 时有几个参数值得调整Graphics选择 “Hardware - GLES 2.0”走 GPU 加速。如果你的机器是 NVIDIA 独显记得先在 Ubuntu 上装好官方驱动否则这里即使选了硬件加速模拟器也会退化成软件渲染画面卡顿到无法接受。Device Frame不需要的话关掉能省一点渲染开销。Startup orientation默认竖屏就行。首次启动模拟器会比较慢因为要初始化用户数据分区。如果启动过程中卡在黑屏或者一直显示 “Android” 字样大概率是 KVM 没生效。回到终端跑一下ls -l /dev/kvm如果你的用户不在kvm组这里会提示权限不够按第一章节的方法加组即可。4.2 模拟器加速的关键参数RAM、CPU 与快照模拟器的响应速度由几个因素决定。/opt/android-studio/bin/studio.sh启动时Gradle 和模拟器会抢内存所以我建议在 AVD 配置里把模拟器的 RAM 设为 2GB 或 3GBCPU 核数设为宿主逻辑核心数的一半以下别贪心全给否则宿主机卡顿会导致 IDE 操作延迟开发体验反而变差。还有一个容易忽略的点AVD 的 “Quick Boot” 功能。默认开启关闭模拟器时它保存一个快照下次启动直接加载快照几秒就能恢复。如果这个功能导致你改了系统配置后模拟器状态不对可以在模拟器侧边栏点 “Cold Boot Now” 冷启动一次。4.3 USB 真机调试Ubuntu 上连安卓手机的完整流程真机调试比模拟器更贴近真实环境而且不耗 CPU。但 Ubuntu 上连安卓手机比 Windows 多一道步骤配置 udev 规则。否则手机会显示离线或者adb devices看到的设备状态是unauthorized。首先把手机插入电脑在手机开发者选项里开启 “USB 调试”。然后执行lsusb输出里找到你的手机厂商 ID。比如小米是2717华为是12d1三星是04e8一加Oppo是22d9。不同机型 ID 不同这一步必须自己查。然后创建 udev 规则文件sudo vi /etc/udev/rules.d/51-android.rules内容格式如下SUBSYSTEMusb, ATTR{idVendor}2717, MODE0666, GROUPplugdev把2717换成你设备实际的 idVendor保存后执行sudo chmod ar /etc/udev/rules.d/51-android.rules sudo udevadm control --reload-rules sudo udevadm trigger重新插拔手机再执行adb kill-server adb start-server adb devices手机上弹窗里点 “允许 USB 调试”终端里就能看到设备状态变为device表示连接成功。4.4 无线调试不插线也能跑 adb 的配置方法安卓 11 及以上系统支持无线调试Ubuntu 下配置也非常简单。先保证手机和电脑在同一局域网手机连上 Wi-Fi。手机开发者选项里找到 “无线调试”开启后进去有个 “使用配对码配对设备” 的入口。先记录手机无线调试界面显示的 IP 地址和端口然后在终端执行adb pair 192.168.x.x:配对端口输出提示输入配对码输入手机端显示的 6 位数字配对成功后执行adb connect 192.168.x.x:连接端口这里的 “连接端口” 通常是无线调试主界面上显示的端口号。执行完再adb devices就能看到设备了。无线调试适合在 USB 口不够用或者频繁拔插数据线的场景但注意休眠时连接可能断开重连一下就行。5. 高频问题与排错实录花了整个下午才总结出来的经验5.1 Gradle 卡在下载依赖或构建超时这是所有 Ubuntu 新手最常遇到的几乎十个人里有八个会在这卡住。现象是打开工程后Gradle 同步卡在某个百分比或者构建时一直显示Could not resolve org.jetbrains.kotlin:kotlin-stdlib之类的错误。排查顺序先看网络。确认是否能访问 dl.google.com 和 repo.maven.apache.org如果慢或超时直接应用第三章节的阿里云镜像方案。如果镜像也慢还有一种可能是 Gradle Wrapper 分发包本身下载失败。检查工程里gradle/wrapper/gradle-wrapper.properties的 distributionUrl手动用浏览器下载对应版本的 gradle zip 包放到~/.gradle/wrapper/dists/下对应哈希目录里重新同步即可绕过网络问题。5.2 环境变量配置错误导致命令崩溃环境变量配置是 Ubuntu 开发里非常容易“一波带走”的操作。如果你在~/.bashrc里改 PATH 时不小心写错路径比如把$PATH覆盖了可能导致ls、cat等基础命令都找不到。遇到这种情况别慌新开的终端输入一行恢复最小 PATHexport PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin然后重新打开~/.bashrc修正错误source ~/.bashrc即可恢复。这个坑我当年踩过一次后来凡是改环境变量都先备份cp ~/.bashrc ~/.bashrc.bak改坏了直接还原一分钟解决。5.3 adb 提示 no permissions 或设备 offlineadb devices显示no permissions (user in plugdev group; are your udev rules wrong?)说明 udev 规则没生效或者插上手机的时候 adb 服务已经在权限错误的状态下运行了。按前面第四章节重刷规则后记得adb kill-server再adb devices。设备状态是offline通常是因为 adb 版本不匹配。电脑上有系统 apt 装的 adb和 SDK 里的 adb 版本不一致时来回切换后可能导致协议握手失败。解决办法是统一使用$ANDROID_HOME/platform-tools/adb可以给这个路径做个软链接覆盖系统 adbsudo ln -sf $ANDROID_HOME/platform-tools/adb /usr/bin/adb5.4 模拟器启动后黑屏或一直加载黑屏基本先查 GPU 渲染和 KVM。确认kvm-ok输出正常后在 AVD 配置里把 Graphics 改成 “Software - GLES 2.0” 试一次。如果软件渲染能起来说明显卡驱动有兼容问题回第四章节处理驱动。还有一种情况是模拟器窗口起来了但显示的是竖屏的锁屏界面看起来像黑屏。拖动一下窗口或按一下键盘有时候只是分辨率太高、渲染延迟导致显示区没刷新。5.5 中文输入法在 Android Studio 里无法使用Ubuntu 上开 Android Studio 输入中文在输入框里候选词弹不出来是不少用搜狗输入法或 ibus 的朋友遇到过的共性问题。如果是 ibus在~/.bashrc里加上两行环境变量可能就解决了export GTK_IM_MODULEibus export XMODIFIERSimibus export QT_IM_MODULEibus然后重启 Android Studio。如果是搜狗输入法确认它的框架是 fcitx同样把上面ibus替换成fcitx。这个问题的根源在 GTK 和 Qt 程序加载输入法模块的方式不同Android Studio 基于 JVM有时需要额外的-Djava.awt.im.styleon-the-spot参数在studio.vmoptions里加上这个参数再试。5.6 常见问题速查表问题现象可能原因快速解法模拟器无法启动报 KVM 错误CPU 虚拟化未开启或用户不在 kvm 组BIOS 开启 VT-x/SVM执行sudo usermod -aG kvm $USERadb 找不到设备udev 规则未配置按 4.3 章节创建 51-android.rules 并 reloadGradle 同步卡死默认仓库访问慢使用阿里云镜像 init.gradle中文显示为方块缺少 CJK 字体sudo apt install fonts-noto-cjk桌面快捷方式图标无法显示缺 Icon 路径权限检查 studio.png 存在且权限可读打开工程报 SDK 未找到ANDROID_HOME 未配置设置环境变量并 sourceSimulator 黑屏花屏GPU 渲染兼容问题改为 Software GLES 2.0 或更新显卡驱动无线调试连不上端口变化或设备休眠重新确认无线调试页面的端口并 adb connect6. 收尾一些关于开发机配置的个人体会整套环境搭好之后我一般会再做两件事。第一把~/.gradle/init.gradle和~/.bashrc这两个文件备份到自己的私有仓库里下次重装系统或者换机器执行一遍脚本整个安卓开发环境十分钟就能恢复。第二装一个htop平时开发时留意一下 CPU 和内存占用如果 Gradle 构建时内存使用率长期接近满载直接加内存条比任何软件优化都管用。最后再分享一个小技巧Android Studio 自带的 JBR 和你的系统 JDK 版本如果冲突导致某些工程构建报 “Unsupported class file major version”别急着降级系统 JDK优先在Settings Build Tools Gradle Gradle JDK里切换到项目需要的 JDK 版本这样更干净也不影响其他工程。开发环境这种东西一旦配好就不要频繁折腾稳定压倒一切。
返回列表