☰
Ubuntu搭建Android开发环境:JDK、SDK、Gradle踩坑全指南
2026/9/30 1:26:25 网站建设 项目流程

你没看错,就是在 Ubuntu 上从头搭一套 Android 开发环境。这篇不是官方文档的翻译,是我自己从裸机开始、踩完各种坑之后整理出来的实操记录。装 Android Studio 本身不复杂,真正折磨人的是 JDK 版本、SDK 路径、设备调试权限、Gradle 下载这些看起来不起眼、一旦出问题就卡你半天的事情。如果你正准备在 Ubuntu 上开搞安卓开发,或者已经被环境问题折磨到怀疑人生,这篇内容可以帮你少走不少弯路。

1. 安装前你必须搞清楚的几件事

很多人上来就直奔 Android Studio 下载页,结果装完才发现系统里 Java 环境不对,或者硬盘空间不够,又或者 CPU 虚拟化没开导致模拟器根本跑不起来。先花十分钟把前置条件捋清楚,后面能省几个小时。

1.1 Ubuntu 版本与硬件配置建议

先说系统版本。我这边主力机是 Ubuntu 22.04 LTS,但下面这套流程在 20.04 LTS 和 24.04 LTS 上都验证过,原理一致。如果你还在用 18.04 或者更老的版本,建议先升级系统,因为老的 libc 库和 OpenJDK 版本会让 Android Studio 的某些组件在编译时出现莫名其妙的问题。

硬件方面,Android Studio 是个吃内存的大户。官方说最低 8GB 内存,我用下来感觉 8GB 属于“能开但憋屈”的状态,同时开个模拟器和浏览器就卡得不行。建议 16GB 起步,32GB 会更从容。CPU 最好是近五年内的 Intel 或 AMD 处理器,这样虚拟化功能比较完善。硬盘建议至少留出 30GB 空间,因为 Android SDK、系统镜像、Gradle 缓存、模拟器 AVD 镜像加起来非常占地方,我自己的机器上光~/Android目录就有 20 多 GB。

1.2 JDK 版本选择:为什么认准 OpenJDK 17

Android Studio 从 Flamingo 版本(2022.3)开始,要求 JDK 17 作为内置运行时,而新版 Android Gradle Plugin(AGP 8.x)同样要求 JDK 17。如果你装的是最新稳定版 Android Studio,系统自带的 JBR(JetBrains Runtime)就是基于 OpenJDK 17 的,理论上你不需要手动装 JDK。

但实操中还是建议把 OpenJDK 17 装好,原因有两点。第一,命令行编译、Gradle 脚本、某些第三方插件需要用系统级 Java 环境;第二,你在终端里跑java -version如果报错,很多工具链会连带出错,排查起来很麻烦。安装命令很简单:

sudo apt update sudo apt install openjdk-17-jdk

装完验证一下:

java -version javac -version

正常会显示openjdk version "17.0.x"这样的信息。别装 OpenJDK 21,虽然它也能跑,但某些 AGP 版本对 21 的支持还不完善,没必要给自己找麻烦。

1.3 先把这些依赖装好

Android Studio 在 Linux 上依赖一些系统库,缺了的话可能在启动阶段就崩掉,或者模拟器起不来。我把用到的依赖列一下,直接一条命令装齐:

sudo apt install libc6:i386 libstdc++6:i386 libncurses5-dev zlib1g:i386 libx11-6 libxrender1 libxtst6 libxi6 libfreetype6 libfontconfig1

如果提示找不到libncurses5-dev,换成libncurses-dev也行。另外建议装一下unzip和wget,后面解压 SDK 组件和下载命令工具时用得上:

sudo apt install unzip wget

注意:如果你用的是 Wayland 会话(Ubuntu 22.04 默认登录界面可能选了 Wayland),Android Studio 的某些弹窗和拖拽行为会有一点异常。建议在登录界面切回“Ubuntu on Xorg”会话再跑 Android Studio,用户体验会正常很多。

2. Android Studio 安装方式怎么选

安装 Android Studio 在 Linux 上主要有三条路:用 snap 装、从官网下载安装包、用压缩包手动解压。每条路都有各自的坑,我挨个说清楚。

2.1 三种安装方式对比:snap、官网包、压缩包

snap 方式是最省事的,一条命令搞定:

sudo snap install android-studio --classic

但我不太推荐用这个方案。snap 的沙箱机制会导致 Android Studio 访问~/Android、/media下的移动设备时有权限问题,尤其是后面配 adb 和挂载 SD 卡时,会遇到permission denied这类错误。虽然可以手动授权解决,但对新手来说多一道坎就多一分劝退。

官网下载的 .deb 包在新版本已经很少提供了,官方现在主推的是 tar.gz 压缩包格式,所以这条路的通用性越来越差。

压缩包手动解压是我最推荐的方式。原因很简单:目录结构完全可控,权限问题最少,升级时直接替换目录就行,跟 snap 的沙箱完全隔离,跟系统的包管理也互不干扰。缺点是稍微多敲几条命令,但一劳永逸。

2.2 手动解压安装实操(我推荐的方式)

去 Android Studio 官网的下载页面,找到 Linux 版本的 tar.gz 链接。注意官方下载链接的命名会带上版本号,比如android-studio-2024.2.1.11-linux.tar.gz这种。建议用 wget 直接在终端里下,比浏览器弹窗方便:

wget https://dl.google.com/dl/android/studio/ide-zips/2024.2.1.11/android-studio-2024.2.1.11-linux.tar.gz

下载完先校验一下文件大小,官网会给出 SHA-256 校验码,对一下更安全。然后解压到/opt目录,这是 Linux 安装大型软件的惯例位置,需要 sudo 权限:

sudo tar -xvzf android-studio-2024.2.1.11-linux.tar.gz -C /opt

解压后目录里会有一个bin文件夹,Android Studio 的启动脚本就在里面。第一次启动可以创建一个桌面快捷方式,方便以后点击打开。我自己更习惯在终端里运行:

/opt/android-studio/bin/studio.sh

这个脚本会先检查 Java 环境,然后拉起 Android Studio 的图形界面。如果你前面按我建议装了 OpenJDK 17,这里一般不会报错。启动时如果提示缺少某个库文件,回到前面的依赖安装步骤,缺什么装什么。

提示:想在任何目录下都能用studio.sh启动的话,可以在~/.bashrc里加一行别名:alias studio='/opt/android-studio/bin/studio.sh',然后source ~/.bashrc生效。

2.3 首次启动向导与 SDK 组件选择

第一次启动 Android Studio,会进入一个 Setup Wizard,让你选 Standard 还是 Custom。我建议选 Custom,虽然多几个步骤,但能看清楚每个组件是什么、装在哪里,避免后期找不到目录。

关键设置有两处。

第一是 SDK 的安装位置。默认是在~/Android/Sdk,建议保持默认,因为后面配置环境变量时用这个路径最顺手。如果你不想把 SDK 放在 home 目录(比如 home 目录有磁盘配额限制),可以改成/opt/android-sdk之类的位置,但要确保有写权限。

第二是 SDK 组件的选择。默认会勾选 Android SDK Platform、Android SDK Platform-Tools、Android SDK Build-Tools 等。首次安装建议全部默认勾选,等熟悉之后再按需裁剪。空间不够的话,可以只保留最新稳定版的 Android 系统(比如 Android 14 API Level 34)和对应的 Build-Tools。

向导跑完之后会自动下载这些组件,耗时取决于网速,一般几分钟到十几分钟。如果下载特别慢或者直接失败,通常是网络访问 Google 服务器不稳定,这时候需要配置镜像源,我后面会专门讲。

3. SDK 与命令行工具配置

Android Studio 图形界面能帮你管理大部分 SDK 组件,但命令行工具链和环境变量还是得自己配。这一步做得好不好,直接关系到后面能不能顺利用 adb、能不能在 CI 环境里编译、能不能在终端跑 Gradle 命令。

3.1 环境变量这样配最稳

打开~/.bashrc,在末尾追加以下内容:

export ANDROID_HOME=$HOME/Android/Sdk export ANDROID_SDK_ROOT=$HOME/Android/Sdk export PATH=$PATH:$ANDROID_HOME/emulator:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin

然后让配置生效:

source ~/.bashrc

ANDROID_HOME和ANDROID_SDK_ROOT这两个变量虽然在新版工具链里不是必须的,但很多旧项目和第三方库还在读它们,所以建议都设上,图个兼容性。PATH里加emulator是为了在终端里直接跑模拟器,加platform-tools是为了用 adb,加cmdline-tools/latest/bin是为了用 sdkmanager 和 avdmanager。

验证配置是否生效:

echo $ANDROID_HOME adb --version

第一条命令应该输出~/Android/Sdk,第二条命令能显示 adb 的版本号。如果 adb 提示找不到,说明 platform-tools 还没装,可以打开 Android Studio 的 SDK Manager,勾上 Android SDK Platform-Tools 安装;或者在终端用 sdkmanager 装:

sdkmanager "platform-tools"

3.2 SDK Manager 里哪些组件必须装

Android Studio 的 SDK Manager(路径:Settings → Languages & Frameworks → Android SDK)里能看到一堆组件,新手容易看懵。我按优先级给你排一下:

组件是否必须说明
Android SDK Platform-Tools必须提供 adb、fastboot 等命令行工具
Android SDK Build-Tools必须提供 aapt2、zipalign 等构建工具
Android SDK Platform必须每个 API Level 对应一个系统镜像,至少装你目标版本
Android Emulator建议跑模拟器时用,用真机调试可以不装
Android Auto API Simulator一般不需要做车载开发才需要
Google Play services按需需要 Google Play 服务框架的 App 测试时用
Intel HAXM / Hypervisor Driver不用装这是给旧版模拟器用的,新版用的是 KVM,Ubuntu 下自带

这里有个细节要注意:Build-Tools 和 Platform 有版本对应关系。Android Studio 创建新项目时,Gradle 会根据build.gradle里的配置去下载对应版本,如果 SDK Manager 里没有装这个版本,Gradle 会自动下载,但下载过程可能很慢。建议在 SDK Manager 里把你可能用到的几个主要版本先装好。

3.3 Gradle JDK 与项目编译链路的坑

新建项目之后,Android Studio 默认会用内置的 JBR 来跑 Gradle,一般不会有什么问题。但如果你在终端里手动执行gradle assembleDebug,或者项目使用了某些需要特定 JDK 的插件,就可能出现 JDK 版本不匹配的报错。

解决办法是在项目的gradle.properties文件里加上:

org.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64

或者更好一点,用 Android Studio 的 Settings → Build Tools → Gradle 里的 Gradle JDK 设置,选上系统安装的 OpenJDK 17。这样 Android Studio 内外部用的就是同一个 JDK,一致性最好。

另外提醒一下,不要手动下载 Gradle 然后在系统里乱配路径,Android Studio 会为每个项目自动管理 Gradle wrapper 的版本。你只需要在gradle-wrapper.properties里指定想要的 Gradle 版本,首次构建时它会自动下载。下载慢的问题后面会讲镜像方案。

4. 真机调试与设备连接

装了 Android Studio、建好了项目,下一步就是把代码跑到手机上。真机调试在 Ubuntu 上最常出问题的就是权限,很多人的手机插上电脑,adb devices里看到的是一串???????? no permissions,其实就是 udev 规则没配好。

4.1 USB 调试的第一步:udev 规则

首先确保手机已经开启“开发者选项”和“USB 调试”。不同的手机开启方式略有不同,一般是设置里连续点击“版本号”几次,然后进入开发者选项打开 USB 调试。

然后用 USB 线连接电脑,执行lsusb看你的手机 USB 厂商 ID:

lsusb

输出里像ID 18d1:4ee7 Google Inc.这样的内容,中间的18d1就是厂商 ID。不同品牌的手机 ID 不一样,比如华为是12d1,小米是2717,OPPO 是22d9,vivo 是2d95。

写一个 udev 规则文件:

sudo vim /etc/udev/rules.d/51-android.rules

内容格式如下,假设你的厂商 ID 是 18d1:

SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"

如果你有多个品牌的手机要连,就多写几行,每行对应一个厂商 ID。保存后重启 udev 服务:

sudo udevadm control --reload-rules sudo service udev restart

然后把手机拔了重插,再执行:

adb kill-server adb devices

这时候应该能看到类似xxxxxxx device的输出,表示设备正常识别。

4.2 adb devices 常见状态解读

adb devices的输出第一行是List of devices attached,下面每一行是一台设备的状态。常见状态有三种:device表示正常识别并已授权;unauthorized表示手机端弹窗还没点“允许 USB 调试”;offline表示连接不稳定,通常重新插拔能解决。

如果你看到unauthorized,去手机上看弹窗,点“允许”就好。如果手机关闭了授权弹窗,可以在手机上进入“开发者选项”里的“撤销 USB 调试授权”,然后重新插拔。

还有一种是手机识别到了,但adb install报device not found。这种情况基本可以判断是 adb 版本太旧,跟手机系统不兼容。先看 adb 版本:

adb version

如果版本低于1.0.41,建议用 SDK Manager 把 platform-tools 更新到最新。

4.3 无线调试:摆脱数据线

Android 11 及以上系统支持无线调试,非常方便。步骤不复杂,但首次配置要耐心一点。

先用 USB 连上手机,执行:

adb devices adb tcpip 5555

然后拔掉 USB,找到手机在局域网里的 IP 地址(设置 → 关于手机 → 状态信息 → IP 地址),执行:

adb connect 192.168.1.100:5555

Android 11 以上更推荐用配对码的方式,在手机开发者选项里进入“无线调试”,点“使用配对码配对设备”,屏幕上会出现六位配对码和配对端口。然后在终端用adb pair命令:

adb pair 192.168.1.100:37000

输入配对码后,再执行adb connect 192.168.1.100:5555就行。这种方式不需要先插 USB,且只认配对码,安全系数更高。

注意:无线调试对网络环境要求比较高,如果路由器开了 AP 隔离,或者手机和电脑不在同一网段,连接会失败。另外每次手机重启后,无线调试端口可能会变,需要重新adb tcpip 5555或重新配对这个流程。

5. 高频问题排查实录

这个章节是全文最值钱的部分,全是实际操作中反复踩过的坑。每个问题都附了具体的解决思路,你照着排查基本都能解决。

5.1 Gradle 同步卡住的镜像源方案

新建项目后,Gradle 要下载各种依赖,如果不配置镜像,下载速度可能很感人。这里提供一个一劳永逸的方案:配置一个全局的init.gradle文件。

在~/.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() } }

这段配置会让 Gradle 优先从阿里云的镜像仓库拉取依赖,速度比直接连 Google 的 Maven 仓库快很多。注意这个文件是全局生效的,适用于所有 Gradle 项目,不用每个项目都改。

另外,Android Gradle Plugin 和 Gradle 本身的下载也可能慢。AGP 的下载同样走上面这个镜像;Gradle 发行包的下载地址是services.gradle.org,如果慢的话,可以先手动下载对应版本的 Gradle,然后放到~/.gradle/wrapper/dists/对应目录下,或者在项目里改gradle-wrapper.properties中的distributionUrl,换成可用的镜像地址。

5.2 AGP 与 Gradle 版本匹配

这个坑藏得挺深,报错信息也是五花八门,什么“Minimum supported Gradle version is X.X”“Unable to find method”之类的,本质上都是 AGP 和 Gradle 版本不匹配。

Android Gradle Plugin 每个版本都对 Gradle 版本有最低要求,记住这个对应关系能少踩很多坑:

AGP 版本最低 Gradle 版本
8.18.0
8.28.2
8.38.4
8.48.6
8.58.7

如果你用的 AGP 是 8.4,但 Gradle wrapper 配的是 8.2,就会报错。解决办法是打开项目里的gradle/wrapper/gradle-wrapper.properties,把distributionUrl改成对应的 Gradle 版本。

另外 AGP 的版本在项目根目录的build.gradle.kts(或build.gradle)里声明。改动 AGP 版本后,建议同步一下项目,让 Android Studio 重跑 Gradle 同步。

5.3 模拟器启动失败与 KVM

在 Ubuntu 上跑 Android 模拟器,最大的坎就是 KVM 权限。模拟器需要 KVM 提供硬件加速,如果没开或者没权限,启动时要么卡在Boot completed之前,要么直接弹窗报x86_64 emulation currently requires hardware acceleration。

先看 CPU 虚拟化是否开启:

egrep -c '(vmx|svm)' /proc/cpuinfo

输出大于 0 说明 CPU 支持虚拟化。然后看 KVM 设备是否存在:

ls -l /dev/kvm

如果不存在,可能是 BIOS 里没开虚拟化,进 BIOS 找到 Intel VT-x 或 AMD SVM 选项并开启。如果设备存在但没有权限,把你当前的用户加入kvm组:

sudo usermod -aG kvm $USER

执行完一定要重启电脑或者重新登录一次,组权限才会生效。确认无误后,在终端输入:

emulator -avd 你的AVD名称

看是否正常启动。

5.4 内存溢出与编译卡顿

项目大了之后,编译时容易报内存溢出,常见的错误是java.lang.OutOfMemoryError: GC overhead limit exceeded或者Killed被系统杀进程。

解决办法是在项目的gradle.properties里调大 JVM 内存参数:

org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m -Dfile.encoding=UTF-8

-Xmx是 Gradle daemon 的最大堆内存,建议别超过系统物理内存的一半。如果你有 16GB 内存,设 4096m 比较合适;8GB 的话设 2048m。

如果编译时系统直接卡死,可能是同时启用了太多 Gradle daemon。可以在gradle.properties里加:

org.gradle.daemon=false org.gradle.parallel=false

这样虽然编译慢一点,但稳定性好很多。

6. 装完还能做点什么

Android Studio 装好、环境跑通之后,还有几个小优化可以做,让日常开发更顺手。

6.1 init.gradle 一劳永逸配置镜像

前面提到过~/.gradle/init.gradle,这里再补充一个进阶用法。你可以在里面同时配置插件仓库和依赖仓库,并加上一些默认参数,比如:

settingsEvaluated { settings -> settings.pluginManagement { repositories { maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } gradlePluginPortal() google() } } }

这样插件和依赖都能走镜像,第一次构建速度会快很多。如果团队里有统一的环境规范,把这份init.gradle放到公司 Git 仓库里让同事拉取,也是一种很好的环境统一方案。

6.2 字体与界面优化

Ubuntu 默认字体在 Android Studio 的代码编辑区里看着有点松散,长时间看眼睛容易累。推荐用 JetBrains Mono 或者 Cascadia Code,都支持等宽,而且对0O、1lI这种易混字符做了区分。

安装字体:

sudo apt install fonts-jetbrains-mono

然后在 Android Studio 的 Settings → Editor → Font 里把字体选成 JetBrains Mono,字号建议 14 或 15,行距 1.2 左右。界面字体也可以在 Settings → Appearance 里调,中文环境建议把 Interface Font 设置成 Noto Sans CJK SC,显示效果更细腻。

还会有人问 Android Studio 汉化的问题。在较新版本里,官方已经内置了中文语言包,在 Settings → Plugins 里搜“Chinese”,找到 Chinese (Simplified) Language Pack 安装并重启就行。如果找不到,可能是你的 Android Studio 版本太老,更新到最新版再试。

提示:用中文界面的确能降低新手的上手门槛,但建议参考英文文档时把术语对照着记一下,比如“Sync”就是“同步”、“Gradle”就是构建工具,不然看报错日志还是会一头雾水。

6.3 命令行构建与 CI 环境的准备

如果你最终打算用命令行打包 APK,或者接 CI 流水线,可以提前把命令行工具链路测通。在项目根目录执行:

./gradlew assembleDebug

首次执行会下载 Gradle wrapper 对应的发行包和项目依赖,耐心等。打包成功后在app/build/outputs/apk/debug/下会生成app-debug.apk。

命令行编译的好处是即使 Android Studio 图形界面崩了,你也能出包。而且很多排查思路可以通过看 Gradle 输出日志找到线索,比在 IDE 里看那点有限的错误提示要全面得多。

我在实际使用中还有个体会:Linux 上搞安卓开发,最大的敌人不是代码本身,而是环境问题。每一次“莫名其妙”的报错,背后基本都有一个具体的系统配置点没对上。JDK 版本对不对、KVM 开了没、udev 规则写没写、Gradle 镜像配好没,把这几个点全部捋顺,后面开发就顺畅了。这套流程我已经在不同版本的 Ubuntu 上重复过很多次,照着走基本不会翻车。如果你在某个步骤卡住,不妨回头看看是不是漏了某个细节,尤其是权限相关的操作,很多人都栽在忘记执行source ~/.bashrc或者忘记重新登录这一步。

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

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

立即咨询