ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Linux 安装 Android Studio 2021.1.1.22 与项目移植避坑指南

Linux 安装 Android Studio 2021.1.1.22 与项目移植避坑指南 简介Android Studio Bumblebeeandroid-studio-2021.1.1.22-linux是面向 Linux 平台 Android 开发者的官方集成开发环境安装包可视为 Android Studio 4.4 版本于 2022 年 1 月发布稳定版、2 月推出 Patch 2。它适合需要升级旧版 IDE、搭建稳定编译调试环境的移动端开发者尤其便于在 Linux 桌面完成项目构建、模拟器调试与性能分析。压缩包为 gz 格式共约 2000 个文件整体约 904.35MB内含 1012 个 py 脚本、689 个 jar 库、250 个 json 配置、200 个 ttf 字体、164 个 webp 资源、131 个 so 动态库及大量 xml、layout、properties 等工程与界面文件覆盖 IDE 运行所需的依赖、模板与工具链。目前已有 346 人学习下载。该版本集成 Gradle 插件升级、Compose 预览与性能剖析等能力目录结构完整解压即可在 Linux 上部署使用适合作为日常开发与版本迁移的可靠工具。1. 为什么 2021.1.1.22 这个 Linux 版本值得单独拿出来讲Android Studio Bumblebee 是 2021 年 JetBrains 平台大版本里被低估的一个节点对应构建号 2021.1.1.22Linux 发行包文件名就是android-studio-2021.1.1.22-linux.tar.gz。它不像后来的 Dolphin、Electric Eel 那样被反复讨论但恰恰是它把 Compose 预览、Layout Inspector 和 Gradle 版本对齐这几件事做稳了很多还在维护老项目的团队至今把 Bumblebee 当作 Linux 开发机的基线版本。如果你手上是一台 Ubuntu、Debian 或者国产 Linux 发行版想装一个不折腾、能直接跑通./gradlew assembleDebug的 Android Studio这个包是绕不开的选项。它解决的核心问题很具体在 Linux 上把 IDE、SDK、JDK、Gradle 四者的版本关系一次性理顺而不是装完打开就报 SDK 找不到。适合谁适合需要在 Linux 桌面长期做 Android 开发、又不想被最新版各种插件兼容问题反复折腾的从业者。2. 在 Linux 上把 android-studio-2021.1.1.22 跑起来从解压到首启2.1 下载包与目录规划别把 IDE 塞进家目录根下Linux 上装 Android Studio 最常见的翻车点不是安装本身而是目录规划。很多人习惯把 tar.gz 解压到~/下载或者~/android-studio结果半年后想升级或者换版本发现配置、SDK、缓存全缠在一起删也不是留也不是。我一般会按职责分三层IDE 本体放/optSDK 放用户目录下的独立路径Gradle 缓存交给默认的~/.gradle。这样换 IDE 版本时只动/optSDK 和缓存完全不受影响。# 假设安装包已经下载到 ~/Downloads cd ~/Downloads # 解压到 /opt需要 sudo sudo tar -xzf android-studio-2021.1.1.22-linux.tar.gz -C /opt # 确认解压结果正常会看到 /opt/android-studio ls -l /opt/android-studio/bin # 把启动脚本软链到 PATH方便终端直接敲 studio.sh sudo ln -sf /opt/android-studio/bin/studio.sh /usr/local/bin/android-studio这段命令的逻辑很直白tar -xzf解压 gzip 压缩包-C /opt指定目标目录避免污染当前路径。软链这一步是可选的但强烈建议做因为后面排查启动问题时你会频繁在终端里跑studio.sh看日志有软链比每次敲全路径省事。参数上唯一要注意的是/opt需要 root 权限如果你所在环境没有 sudo退而求其次放到~/.local/opt也可以只是后续所有路径都要跟着改。2.2 首次启动前必须确认的 JDK 与内存参数Bumblebee 这个版本内置了 JetBrains Runtime理论上不依赖系统 JDK 就能启动 IDE 本身。但 Gradle 构建走的是另一套 JDK如果你系统里只有 JDK 8而项目用的是 AGP 7.x构建阶段会直接报 “Unsupported class file major version”。所以首启之前先确认系统 JDK 版本我一般要求至少 JDK 11。# 查看当前默认 JDK java -version # 如果系统装了多个 JDK用 update-alternatives 切换 sudo update-alternatives --config java # 确认 JAVA_HOME 指向 JDK 11 或 17 echo $JAVA_HOMEjava -version输出里重点看版本号11.0.x或17.0.x都可以1.8.0就要警惕。update-alternatives --config java是 Debian 系管理多版本 JDK 的标准做法会列出所有候选让你选编号。JAVA_HOME为空是常见现象很多发行版默认不设需要你在~/.bashrc或~/.zshrc里手动 export否则 Gradle 有时会找不到 JDK。内存方面Bumblebee 默认的-Xmx是 2048m跑中小项目够用但一旦开 Compose 预览加多个模块很容易 OOM。改法是在 IDE 的Help Edit Custom VM Options里调整或者直接改/opt/android-studio/bin/studio.vmoptions# 编辑 VM 参数把堆内存提到 4G -Xmx4096m -XX:ReservedCodeCacheSize512m-Xmx4096m是最大堆机器内存 16G 以上可以放心给到 4GReservedCodeCacheSize控制 JIT 编译代码缓存512m 对大型项目更稳。改完必须重启 IDE 才生效这一点经常被忽略改完发现没变化多半是没重启。2.3 首次运行向导里 SDK 路径怎么选才不后悔第一次启动会弹 Setup Wizard核心就一件事SDK 装哪。默认它会建议~/Android/Sdk我建议接受默认但如果你磁盘空间紧张可以指到挂载的大盘上比如/data/android-sdk。这里的关键是路径里不要有中文和空格Linux 下虽然比 Windows 宽容但 Gradle 脚本里路径带空格仍然会引发一堆引号问题属于典型的血泪经验。向导里还会问是否导入旧配置如果是全新机器就选不导入。SDK 组件勾选上Bumblebee 对应的是 Android 12API 31和 Android 11API 30再往下勾一个 API 29 做兼容测试基本够用。Build-Tools 选 30.0.3 或 31.0.0这两个和 AGP 7.0/7.1 搭配最稳。装完向导会下载几百兆到 1G 左右的内容国内网络环境下如果卡在 “Downloading SDK Component”可以在 SDK Manager 里配置镜像源或者手动下载对应组件放到 SDK 目录这是另一个话题后面避坑章节会展开。3. 把项目从别的机器移植过来Gradle、AGP 与 SDK 三方对齐3.1 移植项目时先看这三个版本号“移植 android studio 项目”是高频诉求尤其是从 Windows 或者旧版 IDE 迁到 Linux 上的 Bumblebee。移植失败九成不是代码问题而是三个版本号没对齐Gradle Wrapper 版本、Android Gradle PluginAGP版本、以及 compileSdk 对应的 Build-Tools。Bumblebee 官方推荐 AGP 7.1.x 配 Gradle 7.2 以上这个组合在 Linux 上验证最充分。打开项目根目录的gradle/wrapper/gradle-wrapper.properties看distributionUrl那一行# 推荐与 Bumblebee 搭配的 Gradle 版本 distributionUrlhttps\://services.gradle.org/distributions/gradle-7.2-bin.zip如果原来是 6.x直接改成 7.2。改完不要急着 Sync先看项目根build.gradle里的 AGP 声明// 项目根 build.gradle plugins { id com.android.application version 7.1.2 apply false id com.android.library version 7.1.2 apply false }AGP 7.1.2 是 Bumblebee 周期内的稳定版本和 Gradle 7.2 是官方验证过的搭配。如果你原来用的是classpath com.android.tools.build:gradle:4.x这种老写法需要迁移到 plugins DSL否则 Bumblebee 会提示弃用甚至直接报错。这一步是移植里最容易卡住的地方因为报错信息往往只写 “Could not find method classpath”不告诉你该换成 plugins 写法。3.2 用命令行先跑通构建再回 IDE我的习惯是移植项目时先不开 IDE直接在终端跑构建因为命令行报错信息更完整也排除了 IDE 索引的干扰。# 进入项目根目录 cd /path/to/your/project # 给 gradlew 执行权限从别的系统拷过来经常丢权限 chmod x gradlew # 先只做配置阶段不真正编译快速暴露版本问题 ./gradlew tasks --stacktrace # 配置通过后再编译 debug 包 ./gradlew assembleDebug --stacktracechmod x gradlew这一步看着傻但从 Windows 或压缩包拷过来的项目gradlew 经常没有执行权限直接跑会报 “Permission denied”新手容易以为是 Gradle 坏了。./gradlew tasks只走配置阶段能快速验证 Gradle、AGP、仓库地址是否都通比直接 assembleDebug 省时间。--stacktrace是排查必备不加的话很多错误只显示一行摘要加了才能看到根因。等命令行能出 APK 了再用 IDE 打开此时 IDE 的 Sync 基本不会出幺蛾子。3.3 local.properties 与 SDK 路径的机器差异从别的机器移植过来local.properties里往往写着原机器的 SDK 路径比如sdk.dir/Users/xxx/Library/Android/sdk在 Linux 上直接失效。这个文件不应该进版本控制但现实中经常被误提交。# local.properties路径改成你 Linux 上的实际 SDK 位置 sdk.dir/home/yourname/Android/Sdk改完这个文件IDE 才能找到 SDK。如果项目里没有这个文件Android Studio 打开时会自动生成但有时生成的是错的手动确认一遍最保险。另外local.properties里不要写ndk.dirBumblebee 已经改用ndkVersion在 build.gradle 里声明写老字段会触发警告。4. 避坑与排查Linux 上跑 Bumblebee 最常见的五类问题4.1 首启卡在 “unable to access android sdk add-on list”现象第一次打开 IDE向导还没出来就弹窗提示无法访问 SDK add-on list然后卡住或者只能选 Cancel。原因这是首次运行时 IDE 尝试联网拉取 SDK 附加组件列表网络不通或者被拦截就会卡。这个报错在热词里也出现过属于 Bumblebee 及相邻版本的经典问题。解决在弹窗界面直接选 Cancel进入 IDE 后手动打开 SDK Manager 配置组件。或者在/opt/android-studio/bin/idea.properties里加一行disable.android.first.runtrue跳过首次联网检查之后手动配 SDK。这个开关是后悔药级别的存在建议装完就加上。4.2 Gradle Sync 报 “Could not resolve com.android.tools.build:gradle”现象Sync 阶段红字提示无法解析 AGP 依赖。原因仓库地址没配全或者网络访问 Google Maven 仓库受限。Bumblebee 默认走google()和mavenCentral()但老项目可能只写了jcenter()而 jcenter 已经停服。解决在settings.gradle的dependencyResolutionManagement里确认仓库列表包含google()和mavenCentral()删掉jcenter()。如果是网络问题配置国内镜像仓库把google()替换成对应的镜像地址。注意镜像地址要写在最前面Gradle 按顺序查找。4.3 中文显示成方块或输入法候选框错位现象IDE 界面中文变成方块或者在 Linux 输入法下候选框飘到屏幕角落。原因系统缺少中文字体或者 IDE 用的 JBR 与输入法框架fcitx/ibus配合有问题。这是 Linux 桌面环境的通病不是 Bumblebee 独有。解决先装中文字体sudo apt install fonts-noto-cjk基本能解决方块问题。输入法候选框错位在 IDE 的Help Edit Custom VM Options里加-Drecreate.x11.input.methodtrue重启 IDE。如果还不行确认输入法环境变量GTK_IM_MODULE、QT_IM_MODULE、XMODIFIERS在启动 IDE 的 shell 里已经 export从桌面图标启动和从终端启动的环境变量可能不一致这也是玄学来源之一。4.4 构建时 OOM 或 Gradle Daemon 反复崩溃现象./gradlew assembleDebug跑到一半报Java heap space或者 daemon 消失。原因Gradle 默认堆内存偏小大型项目或者开了多个模块时不够用。解决在项目根目录的gradle.properties里调大# Gradle 构建进程堆内存 org.gradle.jvmargs-Xmx4096m -XX:MaxMetaspaceSize1024m # 开启并行构建和缓存 org.gradle.paralleltrue org.gradle.cachingtrue-Xmx4096m给构建进程MaxMetaspaceSize控制元空间parallel和caching能明显提速。注意这个值和 IDE 自身的-Xmx是两回事两个都要调只调一个还是会崩。4.5 文件权限与 SELinux 导致的诡异读写失败现象项目能编译但运行时报无法写入某个目录或者 SDK 组件装不上。原因Linux 下/opt下的 IDE 目录属主是 rootIDE 尝试往安装目录写东西时权限不足或者发行版开了 SELinux/AppArmor 拦截。解决不要把 SDK 或项目放在/opt/android-studio里面SDK 放用户目录。如果确实遇到 SELinux 拦截用getenforce确认状态临时用setenforce 0验证是否是它导致确认后配置对应策略而不是长期关闭。权限问题用ls -l看属主必要时chown -R $USER:$USER修正用户目录下的文件。5. 让 Bumblebee 在 Linux 上真正顺手几个我长期保留的习惯装好只是开始能不能长期顺手取决于几个细节。第一个习惯是把 SDK 命令行工具单独管起来。Bumblebee 自带的 SDK Manager 是图形界面但批量装组件、写脚本时sdkmanager命令行更高效。在~/Android/Sdk/cmdline-tools/latest/bin下有sdkmanager把它加进 PATH之后装 Build-Tools 就是一行命令# 列出已安装和可安装的组件 sdkmanager --list # 安装指定 Build-Tools 和平台 sdkmanager build-tools;31.0.0 platforms;android-31--list会区分 “Installed packages” 和 “Available Packages”装之前先确认版本号存在。sdkmanager装组件时会自动接受 license如果卡在 license 确认加--licenses先统一接受一遍。这个工具在 CI 环境里也是同一套用法本地练熟了写流水线时直接复用。第二个习惯是给每个项目固定 JDK。系统默认 JDK 可能被其他工具改来改去项目级固定最稳。在gradle.properties里可以指定# 指定项目使用的 JDK 路径 org.gradle.java.home/usr/lib/jvm/java-17-openjdk-amd64org.gradle.java.home只影响 Gradle 构建用的 JDK不影响 IDE 自身。这样即使系统默认 JDK 被切成 8项目构建仍然走 17。路径要用update-alternatives --list java查出来的真实路径不要写软链路径某些发行版下软链会导致 Gradle 识别失败。第三个习惯是定期清理 Gradle 缓存。Linux 下~/.gradle/caches会随着项目增多膨胀到几十 G磁盘满了之后构建报错往往很隐晦。我一般每月清一次超过 30 天没访问的缓存# 查看缓存占用 du -sh ~/.gradle/caches # 清理 30 天未访问的缓存文件 find ~/.gradle/caches -type f -atime 30 -deletedu -sh先看总量心里有数再清。find的-atime 30按访问时间筛选比直接删整个 caches 温和不会导致下次构建全部重新下载。这个操作我踩过的坑是清理时 IDE 正在运行删到一半文件被占用导致缓存索引损坏下次 Sync 报一堆莫名其妙的错。所以清理前一定关掉 IDE 和所有 Gradle daemon用./gradlew --stop停掉守护进程再动手。最后一个习惯是保留一份可复现的环境记录。Linux 发行版、JDK 版本、SDK 组件版本、Gradle 版本这四个信息写进项目 README 或者一个env.md换机器或者半年后回来照着装一遍就能复现。我吃过最大的亏就是隔了几个月重装环境忘了当时用的是哪个 Build-Tools结果构建行为对不上排查了大半天。现在每个项目根目录都放一份环境快照几行字的事省下的是实打实的时间。希望帮到你。本文还有配套的精品资源点击获取
返回列表