
簡(jiǎn)介本資源為 Android Studio Bumblebee 2021.1.1 Patch 2版本號(hào) 2021.1.1.22官方 Linux 發(fā)行版安裝包面向 Android 應(yīng)用開發(fā)者、移動(dòng)開發(fā)學(xué)習(xí)者及高校實(shí)訓(xùn)師生用于搭建穩(wěn)定、功能完備的安卓應(yīng)用開發(fā)環(huán)境。壓縮包共含 2000 個(gè)文件主體為 689 個(gè) jar核心工具鏈與插件、1012 個(gè) py構(gòu)建腳本與自動(dòng)化支持、250 個(gè) json配置與元數(shù)據(jù)、200 個(gè) ttfUI 字體資源及 164 個(gè) webp界面圖標(biāo)素材另有大量 so 動(dòng)態(tài)庫(kù)、xml 布局定義與 license 文件體現(xiàn)完整 IDE 運(yùn)行依賴體系。資源大小為 904.35MB結(jié)構(gòu)規(guī)范開箱即用。目前已有 345 人下載學(xué)習(xí)可直接解壓部署于 Ubuntu/CentOS 等主流 Linux 發(fā)行版支持 Kotlin/Java 開發(fā)、Jetpack Compose 調(diào)試、NDK 編譯及 Profiler 性能分析等全棧開發(fā)流程是適配 Android 12 SDK 的關(guān)鍵開發(fā)基線版本。 這一版的標(biāo)題雖是老版本但確實(shí)值得拆開來(lái)講。Bumblebee2021.1.1是我實(shí)際在Linux上用了很久的Android Studio版本客觀說(shuō)它沒(méi)有新版那么多花哨功能但勝在穩(wěn)定、資源占用可控尤其對(duì)配置一般的開發(fā)機(jī)非常友好。這篇文章我會(huì)從安裝到跑通第一個(gè)項(xiàng)目把我在Linux上折騰這臺(tái)開發(fā)環(huán)境的完整過(guò)程寫出來(lái)包括KVM虛擬化、SDK配置、Gradle加速、中文界面處理這些高頻問(wèn)題也算是給準(zhǔn)備入坑的人一份可以直接照抄的操作記錄。整個(gè)安裝過(guò)程其實(shí)不復(fù)雜但Linux的坑往往不在“安裝”這一步而在安裝完之后的權(quán)限、環(huán)境變量、虛擬化這些細(xì)節(jié)上。如果你之前習(xí)慣用Windows換到Linux之后經(jīng)常會(huì)疑惑“為什么我裝了Android Studio模擬器卻跑不起來(lái)”或者“明明項(xiàng)目同步好了編譯卻報(bào)各種奇怪錯(cuò)誤”。這篇文章里提到的內(nèi)容基本都能覆蓋到這些困惑。1. 版本背景與選型思考1.1 Bumblebee在Android Studio版本線里的位置Android Studio的版本命名從Arctic Fox之后就統(tǒng)一改成了按年份動(dòng)物代號(hào)的形式Bumblebee就是2021.1.1這個(gè)版本對(duì)應(yīng)的是2021年底到2022年初的主力版本。它排在北極狐Arctic Fox之后、大黃蜂Chipmunk之前所以你在網(wǎng)上搜資料時(shí)經(jīng)??吹竭@三個(gè)版本混在一起說(shuō)。Bumblebee有幾個(gè)比較關(guān)鍵的更新點(diǎn)首次把項(xiàng)目創(chuàng)建向?qū)д麄€(gè)重寫了新建Android項(xiàng)目時(shí)會(huì)讓你填包名、選擇語(yǔ)言Kotlin/Java、最小SDK版本比老版本那種多頁(yè)面的向?qū)Ш?jiǎn)潔很多同時(shí)它對(duì)Jetpack Compose的支持已經(jīng)趨于成熟如果你是想學(xué)Compose用Bumblebee沒(méi)有任何問(wèn)題另外它內(nèi)置了OpenJDK 11就是安裝包里的jbr目錄也就是說(shuō)你不需要自己?jiǎn)为?dú)裝JDK這個(gè)對(duì)新手來(lái)說(shuō)非常友好。我在標(biāo)題里寫的是android-studio-2021.1.1.22-linux這是Bumblebee在2021年12月左右發(fā)布的一個(gè)修訂版安裝包對(duì)應(yīng)具體的Linux x86_64平臺(tái)的tar.gz壓縮包。當(dāng)時(shí)這個(gè)版本解決的問(wèn)題主要是上一次小版本里的Gradle同步卡死、低內(nèi)存環(huán)境下IDE崩潰等所以穩(wěn)定性比初版好不少直到今天依然有不少人在老電腦或者服務(wù)器上用它。1.2 為什么現(xiàn)在還要選這個(gè)老版本我知道你可能會(huì)問(wèn)為什么不直接用最新版Android Studio這里有個(gè)很現(xiàn)實(shí)的問(wèn)題最新版對(duì)硬件要求不斷提高比如新版JBRJetBrains Runtime默認(rèn)會(huì)占用更多內(nèi)存而且Gradle和AGP版本的更新節(jié)奏很快很多老項(xiàng)目直接升級(jí)到新版之后編譯會(huì)報(bào)一堆兼容性錯(cuò)誤。如果你手里有一個(gè)穩(wěn)定的老項(xiàng)目平時(shí)只是維護(hù)不追求用最新的編譯工具鏈選擇像Bumblebee這樣的穩(wěn)定版本反而省心。從資源占用的角度說(shuō)Bumblebee在Linux上的表現(xiàn)非??煽貑?dòng)后內(nèi)存占用在2GB左右創(chuàng)建空項(xiàng)目跑一次完整構(gòu)建大約需要1-2分鐘取決于Gradle版本和網(wǎng)絡(luò)狀況而新版本動(dòng)不動(dòng)就吃3GB以上內(nèi)存Gradle同步也要等更久。對(duì)于8GB內(nèi)存的開發(fā)機(jī)尤其是筆記本來(lái)說(shuō)Bumblebee的體驗(yàn)會(huì)明顯流暢很多。另外一個(gè)很實(shí)用的點(diǎn)Bumblebee和AGP 7.x系列配合非常成熟。當(dāng)時(shí)的默認(rèn)AGP版本是7.0或7.1Gradle版本7.0這個(gè)組合的兼容性經(jīng)過(guò)了大量項(xiàng)目的驗(yàn)證網(wǎng)上能搜到的錯(cuò)誤解決辦法也最多遇到問(wèn)題基本都能查到解法。換到新版Android Studio之后很多老問(wèn)題不再出現(xiàn)但新問(wèn)題的資料卻很少排查起來(lái)很頭疼。1.3 Linux下安裝的開發(fā)環(huán)境全景在開始裝之前先對(duì)Linux下Android開發(fā)的環(huán)境組成有個(gè)總覽認(rèn)識(shí)后面動(dòng)手時(shí)會(huì)清晰很多。整個(gè)開發(fā)環(huán)境大致由四層組成最底層是Linux系統(tǒng)本身和硬件CPU、內(nèi)存、磁盤第二層是Java運(yùn)行環(huán)境Android Studio的JBR第三層是IDE和Android SDKplatform、build-tools、platform-tools第四層是構(gòu)建系統(tǒng)和模擬器Gradle、AGP、KVM加速的模擬器。這四個(gè)層次之間不是獨(dú)立的任何一個(gè)環(huán)節(jié)有問(wèn)題都會(huì)在IDE的某個(gè)功能上體現(xiàn)出來(lái)。比如KVM沒(méi)安裝好模擬器啟動(dòng)就會(huì)報(bào)“/dev/kvm not found”JDK版本不對(duì)Gradle同步就會(huì)失敗SDK的platform-tools沒(méi)裝adb就找不到設(shè)備。所以后面我會(huì)按這個(gè)層次逐個(gè)檢查、逐個(gè)安裝盡可能把基礎(chǔ)環(huán)境一次搭好避免后續(xù)反復(fù)折騰。2. 安裝前的準(zhǔn)備工作2.1 確認(rèn)Linux發(fā)行版和磁盤空間我是在Ubuntu 20.04 LTS上做的安裝但Debian、CentOS、Fedora這些發(fā)行版的安裝思路是通用的差異主要在包管理器上。Ubuntu/Debian用aptFedora用dnfArch用pacman都行。如果你的系統(tǒng)是國(guó)產(chǎn)操作系統(tǒng)如統(tǒng)信UOS、麒麟底層如果是Debian系那和我下面說(shuō)的apt命令是通用的。首先是磁盤空間。Android Studio安裝包本身約1GB解壓后占2GB左右但Android SDK你至少要準(zhǔn)備20GB以上空間。一個(gè)platform版本加build-tools大概要2GB系統(tǒng)鏡像system image動(dòng)輒1GB起步我建議把SDK放在一個(gè)單獨(dú)的分區(qū)避免和系統(tǒng)盤搶空間。用df -h命令先看一下當(dāng)前各分區(qū)剩余空間優(yōu)先選空間大的。然后是內(nèi)存和CPU。最低要求是8GB內(nèi)存低于這個(gè)跑起來(lái)會(huì)比較難受。CPU只要是x86_64架構(gòu)AMD、Intel都行并支持虛擬化VMX/SVM模擬器加速就沒(méi)問(wèn)題。用nproc看CPU核心數(shù)用free -h看內(nèi)存大小如果內(nèi)存不夠后面可以優(yōu)化VM堆內(nèi)存但體驗(yàn)有限。在Ubuntu上我建議先把一些基礎(chǔ)工具裝好比如git、unzip、curl、wget這些后面搭建環(huán)境經(jīng)常用sudo apt update sudo apt install git unzip curl wget vim如果系統(tǒng)中缺少某些運(yùn)行庫(kù)啟動(dòng)Android Studio時(shí)可能會(huì)報(bào)錯(cuò)或白屏常見的庫(kù)有l(wèi)ibgl1、libxrandr2、libxi6等。讓我確認(rèn)一個(gè)細(xì)節(jié)如果你用的是精簡(jiǎn)版Linux或者服務(wù)器版桌面環(huán)境都沒(méi)裝那跑Android Studio就比較費(fèi)勁了。如果只有命令行終端我建議你先裝一個(gè)輕量桌面如Xfce否則IDE無(wú)法顯示界面。2.2 JDK檢查與系統(tǒng)自帶Java的干擾問(wèn)題很多人裝Android Studio之前會(huì)自己先裝一個(gè)Java這里其實(shí)有個(gè)常見的坑。Android Studio的安裝包里自帶jbr目錄它使用的是JetBrains RuntimeOpenJDK 11的定制版這個(gè)內(nèi)置的JDK是IDE自身運(yùn)行和Gradle構(gòu)建都依賴的版本。它不一定非要我們額外安裝系統(tǒng)級(jí)JDK。但問(wèn)題是如果系統(tǒng)里已經(jīng)裝了其他版本的Java環(huán)境變量JAVA_HOME可能指向它而Gradle構(gòu)建時(shí)會(huì)優(yōu)先讀取JAVA_HOME或者讀取Android Studio設(shè)置里的Gradle JDK配置。一旦這個(gè)JDK版本不對(duì)比如JDK 17就可能導(dǎo)致Gradle構(gòu)建報(bào)“Unsupported class file major version”這類錯(cuò)誤。所以安裝前最好檢查一下系統(tǒng)當(dāng)前Java情況java -version echo $JAVA_HOME如果顯示了Java版本且不是你需要的也不要急著卸載因?yàn)橄到y(tǒng)里有些工具可能依賴它。正確的做法是進(jìn)入Android Studio后打開“File - Settings - Build Tools - Gradle”在“Gradle JDK”下拉框里選擇“Use embedded JDK推薦”。這樣Gradle就會(huì)用Android Studio自帶的JDK 11不會(huì)受系統(tǒng)Java干擾。我實(shí)際遇到過(guò)一個(gè)情況系統(tǒng)里裝了OpenJDK 17Gradle同步正常但打包時(shí)提示“Invalid JDK”后來(lái)一查就是Gradle JDK設(shè)置錯(cuò)誤。所以提前把這個(gè)設(shè)置寫清楚免得踩同樣的坑。2.3 KVM虛擬化檢查與權(quán)限配置如果你打算用模擬器KVM不是可選項(xiàng)而是必需項(xiàng)。Linux上的Android模擬器不像Windows那樣依賴HAXM或Hyper-V它走的是KVMKernel-based Virtual Machine這套內(nèi)核級(jí)虛擬化方案。Intel的VT-x和AMD的SVM在BIOS里開啟之后系統(tǒng)才能通過(guò)KVM提供硬件加速。先檢查系統(tǒng)是否支持虛擬化egrep -c (vmx|svm) /proc/cpuinfo如果輸出數(shù)字大于0說(shuō)明CPU支持虛擬化。然后再確認(rèn)KVM內(nèi)核模塊是否已加載ls -l /dev/kvm如果提示No such file or directory說(shuō)明KVM模塊沒(méi)啟用或者BIOS里的虛擬化開關(guān)沒(méi)打開。最簡(jiǎn)單的處理是sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils sudo adduser $USER kvm加完用戶組之后需要注銷重新登錄。如果/dev/kvm還是沒(méi)有出現(xiàn)那就得重啟進(jìn)BIOS找到Intel VT-x或者AMD SVM的開關(guān)把它打開然后再次檢查。這里還有一個(gè)很容易忽略的點(diǎn)即使/dev/kvm存在如果當(dāng)前用戶在kvm組里沒(méi)有權(quán)限模擬器照樣起不來(lái)。用getent group kvm看一下組成員用id確認(rèn)自己是否在組內(nèi)。如果在但還沒(méi)生效執(zhí)行newgrp kvm或者重新登錄一次。我一開始裝的時(shí)候就漏了這個(gè)模擬器一直報(bào)權(quán)限錯(cuò)誤后來(lái)才發(fā)現(xiàn)是沒(méi)重新登錄用戶組配置沒(méi)生效。3. 安裝實(shí)操步驟3.1 下載安裝包與解壓目錄的選擇以android-studio-2021.1.1.22-linux這個(gè)包為例從官網(wǎng)或者鏡像站下載得到的是一個(gè)tar.gz壓縮包文件名大概是android-studio-2021.1.1.22-linux.tar.gz。下載完成后我習(xí)慣把它放到~/Downloads目錄然后解壓到/opt而不是用戶目錄這樣系統(tǒng)所有用戶都能訪問(wèn)也便于統(tǒng)一管理。為什么要放/opt而不是直接解壓到家目錄原因有兩點(diǎn)一是/opt是Linux里存放第三方軟件的標(biāo)準(zhǔn)目錄文件結(jié)構(gòu)更規(guī)范二是如果你用多個(gè)Linux賬號(hào)大家都能共享這套IDE不需要每個(gè)賬號(hào)單獨(dú)裝一份。當(dāng)然放/opt需要root權(quán)限你執(zhí)行下面的命令時(shí)注意sudo的使用sudo tar -xzf ~/Downloads/android-studio-2021.1.1.22-linux.tar.gz -C /opt解壓完成后檢查一下目錄結(jié)構(gòu)ls -l /opt/android-studio正常情況下你會(huì)看到一個(gè)bin、jbr、lib、plugins等目錄其中bin/studio.sh是啟動(dòng)腳本jbr就是自帶的Java運(yùn)行時(shí)。如果ls能看到這些說(shuō)明解壓沒(méi)有損壞。如果你不想用/opt也可以解壓到~/AndroidStudio目錄這樣無(wú)需sudo但后續(xù)不同用戶共享就不太方便。自己一臺(tái)機(jī)器的話隨便放哪個(gè)目錄都可以只要記住路徑就行。我遇到過(guò)一種情況解壓時(shí)報(bào)“tar: This does not look like a tar archive”錯(cuò)誤多半是下載的文件不完整重新下載就好。另外下載過(guò)程中建議校驗(yàn)一下文件大小和sha256校驗(yàn)值官網(wǎng)都會(huì)給避免網(wǎng)絡(luò)原因?qū)е碌陌鼡p壞。3.2 用命令行啟動(dòng)還是桌面快捷方式啟動(dòng)Android Studio最直接的方式是運(yùn)行啟動(dòng)腳本/opt/android-studio/bin/studio.sh這個(gè)腳本會(huì)檢測(cè)Java環(huán)境、設(shè)置IDE運(yùn)行參數(shù)然后彈出啟動(dòng)畫面。初次啟動(dòng)它會(huì)引導(dǎo)你進(jìn)行初始配置比如導(dǎo)入設(shè)置如果你沒(méi)有舊版本配置選擇“Do not import settings”、選擇UI主題然后進(jìn)入Setup Wizard。第一次啟動(dòng)可能要等上一兩分鐘因?yàn)镮DE要初始化索引、創(chuàng)建配置文件目錄。配置文件目錄默認(rèn)在~/.config/Google/AndroidStudio2021.1/或~/.android具體路徑和安裝方式有關(guān)后面排查問(wèn)題時(shí)經(jīng)常會(huì)用到這些目錄。這里有一個(gè)非常重要的建議不要用sudo來(lái)啟動(dòng)studio.sh。如果你用root權(quán)限運(yùn)行IDE創(chuàng)建出來(lái)的文件和目錄所有者都是root之后你寫代碼、運(yùn)行Gradle時(shí)那個(gè)項(xiàng)目目錄就成root的了普通用戶無(wú)法寫入。這樣會(huì)導(dǎo)致你每次保存代碼都要sudo非常痛苦。就算之前誤操作過(guò)可以用sudo chown -R 你的用戶名:你的用戶組 目錄路徑來(lái)修復(fù)。每次都在終端里敲一長(zhǎng)串命令去啟動(dòng)確實(shí)不太方便。Linux下更常見的做法是創(chuàng)建桌面快捷方式在/usr/share/applications/目錄下新建一個(gè)android-studio.desktop文件[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;保存之后在應(yīng)用菜單里就能看到Android Studio圖標(biāo)。如果你的桌面環(huán)境顯示不出來(lái)可能是.desktop文件沒(méi)有執(zhí)行權(quán)限運(yùn)行chmod x /usr/share/applications/android-studio.desktop再刷新菜單。3.3 環(huán)境變量與常用命令配置為了讓日常操作更順手我建議把Android SDK相關(guān)的路徑加到環(huán)境變量里。編輯~/.bashrc在末尾追加export ANDROID_HOME$HOME/Android/Sdk export PATH$PATH:$ANDROID_HOME/platform-tools export PATH$PATH:$ANDROID_HOME/cmdline-tools/latest/bin等等SDK的默認(rèn)路徑你其實(shí)可以在IDE里自己指定不一定非要用Android/Sdk這個(gè)默認(rèn)值。我之所以建議把ANDROID_HOME設(shè)置好是因?yàn)楹芏嗝钚袠?gòu)建工具比如Gradle、Cordova、Flutter都會(huì)讀取這個(gè)環(huán)境變量來(lái)定位SDK。如果你不用這些工具不設(shè)置也不影響IDE工作但設(shè)置了總是穩(wěn)妥一些。執(zhí)行source ~/.bashrc讓配置生效。之后在終端輸入adb如果能看到adb的版本文案說(shuō)明platform-tools已經(jīng)在PATH里了。另外很多人習(xí)慣在終端里直接敲studio來(lái)啟動(dòng)IDE這個(gè)可以做別名alias studio/opt/android-studio/bin/studio.sh把這個(gè)加到.bashrc里即可。不過(guò)提醒一下如果你在終端里運(yùn)行studio命令后關(guān)閉了終端IDE也會(huì)跟著退出最好用nohup或者直接通過(guò)桌面快捷方式啟動(dòng)讓IDE獨(dú)立于終端運(yùn)行。3.4 Windows遷移用戶特別注意的地方如果你之前是在Windows上開發(fā)遷到Linux之后有幾個(gè)習(xí)慣改一改能少踩很多坑。首先Linux對(duì)文件權(quán)限敏感不要再用類似Windows里“管理員身份運(yùn)行”的思路去解決問(wèn)題。遇到權(quán)限不足優(yōu)先檢查當(dāng)前用戶是否在相應(yīng)組里或者目錄所有者是否正確。其次路徑分隔符不一樣。Windows用反斜杠Linux用正斜杠。Android項(xiàng)目很多配置里需要寫文件路徑用反斜杠會(huì)直接報(bào)錯(cuò)。Gradle構(gòu)建腳本里如果用Windows風(fēng)格路徑大概率編譯失敗。第三換行符。Windows的文本文件默認(rèn)CRLF換行Linux默認(rèn)LF。如果你用Git管理項(xiàng)目建議在倉(cāng)庫(kù)根目錄放一個(gè).gitattributes文件聲明對(duì)文本文件統(tǒng)一用LF否則IDE里可能每一行都提示Diff非常惱火。最后Windows下開發(fā)常用的SDK平臺(tái)、NDK這些在Linux下不能直接拷貝SDK目錄過(guò)去因?yàn)槎M(jìn)制文件不兼容需要重新下載對(duì)應(yīng)平臺(tái)的SDK組件這個(gè)后面會(huì)講。4. 首次啟動(dòng)與SDK配置4.1 Setup Wizard中的三個(gè)關(guān)鍵選擇第一次啟動(dòng)Android Studio會(huì)進(jìn)入Setup Wizard主要做三個(gè)關(guān)鍵選擇。第一個(gè)是導(dǎo)入設(shè)置。如果你之前沒(méi)有安裝過(guò)Android Studio選“Do not import settings”。如果你有舊版本或者有從別的地方弄來(lái)的配置文件可以選“Import settings from...”把之前的IDE配置、快捷鍵、主題帶過(guò)來(lái)。我建議沒(méi)有特殊需求就選不導(dǎo)入盡量干凈起步避免舊配置里的插件兼容性問(wèn)題。第二個(gè)是UI主題。這里可選Darcula深色或者IntelliJ淺色。選哪個(gè)純看個(gè)人喜好后續(xù)在Settings里隨時(shí)可以改。第三個(gè)是SDK組件的安裝。Setup Wizard會(huì)自動(dòng)檢測(cè)SDK路徑默認(rèn)是~/Android/Sdk。如果你之前沒(méi)有SDK它會(huì)詢問(wèn)是否下載此時(shí)建議把需要的組件先選好Android SDK Platform-Tools包含adb、Android SDK Build-Tools構(gòu)建工具、Android SDK Platform至少一個(gè)版本的platform比如Android 12對(duì)應(yīng)API 31。注意系統(tǒng)鏡像System Image不要在這步下載占空間又慢等創(chuàng)建模擬器的時(shí)候再單獨(dú)選。Setup Wizard下載SDK組件時(shí)耗時(shí)較長(zhǎng)因?yàn)槟J(rèn)走的是Google的服務(wù)器。這一步網(wǎng)絡(luò)通暢的話沒(méi)問(wèn)題如果下載慢后續(xù)可以在SDK Manager里配置國(guó)內(nèi)鏡像源這里先留個(gè)印象后面專門說(shuō)。4.2 SDK路徑選擇與目錄管理Setup Wizard會(huì)讓你確認(rèn)SDK安裝路徑。默認(rèn)是~/Android/Sdk這個(gè)路徑本身沒(méi)有太大問(wèn)題但我想提醒幾點(diǎn)。第一不要在路徑中包含空格和中文。雖然現(xiàn)代Linux對(duì)空格的支持不錯(cuò)但Android SDK工具鏈里很多腳本不做空格轉(zhuǎn)義一旦出現(xiàn)空格構(gòu)建時(shí)可能報(bào)各種奇怪錯(cuò)誤。這一點(diǎn)在Windows上大家經(jīng)常會(huì)犯Linux上如果你手動(dòng)指定了含空格的目錄同樣會(huì)踩坑。第二SDK會(huì)占很大的磁盤空間。如果你有獨(dú)立的home分區(qū)那沒(méi)問(wèn)題放在默認(rèn)路徑就好。如果你把home和系統(tǒng)放在同一個(gè)分區(qū)且空間緊張我建議把SDK放到獨(dú)立的路徑比如/data/Android/Sdk然后在IDE的SDK Manager里手動(dòng)填這個(gè)路徑。第三一個(gè)SDK可以被多個(gè)項(xiàng)目共用所以SDK路徑其實(shí)沒(méi)有“每個(gè)項(xiàng)目一個(gè)”這種說(shuō)法。你可以在多個(gè)Android Studio版本之間共用同一個(gè)SDK前提是SDK版本足夠新老版本AS也能識(shí)別。Bumblebee對(duì)SDK版本的支持到API 31沒(méi)問(wèn)題再新一點(diǎn)的API 33也會(huì)提示安裝但能用不必太擔(dān)心。4.3 SDK Manager里我建議勾選哪些組件SDK Manager的完整路徑是“File - Settings - Appearance Behavior - System Settings - Android SDK”。進(jìn)入后會(huì)看到SDK Platforms和SDK Tools兩個(gè)選項(xiàng)卡。在SDK Platforms下我建議先勾選你目標(biāo)設(shè)備系統(tǒng)對(duì)應(yīng)的API版本。比如你在用Android 12手機(jī)調(diào)試就勾選Android 12API 31。如果不知道選哪個(gè)最穩(wěn)妥的辦法是把你開發(fā)應(yīng)用的minSdkVersion和targetSdkVersion之間的所有版本都勾上這樣后續(xù)切換設(shè)備調(diào)試時(shí)不會(huì)缺SDK。在SDK Tools下重點(diǎn)關(guān)注這幾項(xiàng)Android SDK Build-Tools構(gòu)建工具通常安裝一個(gè)常用的版本即可比如31.0.0。Android SDK Platform-Tools包含adb、fastboot等工具必裝。Android Emulator模擬器本體如果有KVM支持就裝。Android SDK Command-line Tools提供sdkmanager命令后續(xù)很多自動(dòng)化操作靠它。NDK可選如果你想寫C/C代碼需要NDK和CMake。不要一次性把所有系統(tǒng)鏡像都下了再慢慢挑先裝核心組件等實(shí)際用到再補(bǔ)。因?yàn)槊總€(gè)系統(tǒng)鏡像都很大下了一堆沒(méi)用上最后只會(huì)占磁盤。4.4 創(chuàng)建第一個(gè)項(xiàng)目并跑通構(gòu)建配置完SDK之后就可以創(chuàng)建一個(gè)空項(xiàng)目來(lái)驗(yàn)證環(huán)境了。點(diǎn)擊“New Project”選擇“Empty Activity”填寫項(xiàng)目名稱比如MyFirstApp、包名比如com.example.myfirstapp、語(yǔ)言Kotlin或Java然后Finish。Bumblebee的Project Structure里默認(rèn)的AGP版本是7.0.4或更高Gradle版本是7.3.x這套組合不需要額外修改就能跑起來(lái)。第一次打開項(xiàng)目會(huì)觸發(fā)Gradle同步Gradle Sync。這個(gè)階段會(huì)下載Gradle本身Gradle wrapper會(huì)根據(jù)gradle-wrapper.properties里的distributionUrl去下載、AGP依賴、以及項(xiàng)目里用到的第三方庫(kù)。通常這一步是最容易卡住的尤其是網(wǎng)絡(luò)狀況不佳的時(shí)候下到一半就失敗。如果Gradle同步卡住或超時(shí)你可以手動(dòng)檢查gradle-wrapper.properties文件distributionUrlhttps\://services.gradle.org/distributions/gradle-7.3.3-bin.zip下載這個(gè)zip然后放到Gradle緩存目錄一般在~/.gradle/wrapper/dists或者改distributionUrl指向國(guó)內(nèi)鏡像。我用的是把Gradle壓縮包手動(dòng)下載并提前放到Gradle緩存目錄的方法這樣Android Studio同步時(shí)直接命中緩存不需要重復(fù)下載速度提升非常明顯。同步完成之后點(diǎn)擊工具欄的“Run”綠色三角形或者按ShiftF10構(gòu)建項(xiàng)目并嘗試部署到設(shè)備。如果沒(méi)有連接真機(jī)也沒(méi)有創(chuàng)建模擬器IDE會(huì)提示選擇部署目標(biāo)。Bumblebee里可以直接點(diǎn)“Create New Virtual Device”來(lái)創(chuàng)建模擬器選一個(gè)Pixel 4之類的設(shè)備再選一個(gè)System Image建議選x86_64架構(gòu)然后就會(huì)啟動(dòng)模擬器。模擬器首次啟動(dòng)會(huì)比較慢可能1-2分鐘如果一直卡在啟動(dòng)界面多半是KVM問(wèn)題或者設(shè)備配置過(guò)高。把模擬器配置調(diào)低一點(diǎn)比如分配1GB內(nèi)存、低分辨率會(huì)更容易啟動(dòng)成功。5. 中文設(shè)置與漢化的正確姿勢(shì)5.1 區(qū)分系統(tǒng)中文和IDE中文設(shè)置“Android Studio怎么設(shè)置中文”這個(gè)熱搜詞其實(shí)包含兩層意思一是Linux系統(tǒng)界面的中文顯示這個(gè)由操作系統(tǒng)和桌面環(huán)境決定二是Android Studio的IDE界面語(yǔ)言。很多人把這兩個(gè)混在一起導(dǎo)致查問(wèn)題越查越亂。如果你的Linux系統(tǒng)本身是英文界面但你希望操作系統(tǒng)的文件管理器、設(shè)置菜單顯示中文可以在系統(tǒng)設(shè)置的用戶語(yǔ)言里選擇中文簡(jiǎn)體并重啟。以Ubuntu為例路徑是“Settings - Region Language”把Language改為“中文簡(jiǎn)體”然后注銷重新登錄。如果系統(tǒng)本身已經(jīng)包含中文字體包就不會(huì)出現(xiàn)亂碼如果沒(méi)有用apt install fonts-noto-cjk安裝中文字體。IDE中文界面則完全是另一回事。Android Studio和IntelliJ IDEA一樣默認(rèn)界面語(yǔ)言是英文它的界面語(yǔ)言設(shè)置并不在系統(tǒng)設(shè)置里而是通過(guò)插件機(jī)制和IDE的“IDE Language”配置來(lái)實(shí)現(xiàn)。你不需要去修改系統(tǒng)語(yǔ)言只需要在IDE內(nèi)部做設(shè)置即可。5.2 通過(guò)插件安裝官方中文語(yǔ)言包Android Studio從Bumblebee這代開始官方就已經(jīng)提供了中文語(yǔ)言包插件“Chinese (Simplified) Language Pack”這個(gè)插件在JetBrains插件倉(cāng)庫(kù)里可以搜索到安裝后重啟IDE界面就變成中文了。操作路徑是File - Settings - Plugins - Marketplace搜索“Chinese”看到“Chinese (Simplified) Language Pack”有時(shí)帶EAP后綴點(diǎn)Install。安裝完成后IDE會(huì)提示重啟重啟后界面語(yǔ)言就切換為簡(jiǎn)體中文。如果你在Marketplace里搜不到這個(gè)插件常見原因是網(wǎng)絡(luò)問(wèn)題導(dǎo)致插件列表加載失敗。這種情況下可以先去JetBrains插件官網(wǎng)下載插件zip包然后通過(guò)Plugins頁(yè)面右上角的齒輪圖標(biāo)選擇“Install Plugin from Disk...”選中下載的zip文件即可離線安裝。另外如果你既安裝了官方中文包又想保留英文的某些術(shù)語(yǔ)可以在語(yǔ)言插件安裝后不用重啟去Settings里搜索“Language”或者手動(dòng)調(diào)整界面語(yǔ)言如下老版本沒(méi)有直接切換語(yǔ)言菜單需要添加JVM參數(shù)編輯bin/studio.vmoptions添加-Duser.languageen或zh_CN。但Bumblebee這代裝中文包已經(jīng)夠用不需要手工改參數(shù)。5.3 輸入法設(shè)置與中文亂碼問(wèn)題Linux下寫代碼時(shí)輸入中文主要靠輸入法框架fcitx或ibus。Android Studio作為Swing應(yīng)用對(duì)輸入法框架的支持一直比較敏感。常見的問(wèn)題是明明系統(tǒng)輸入法能正常輸入中文但Android Studio里卻打不出中文或者輸入法狀態(tài)欄不出現(xiàn)。如果你使用的是fcitx5可以在/etc/environment或~/.xprofile里加兩行export XMODIFIERSimfcitx export GTK_IM_MODULEfcitx export QT_IM_MODULEfcitx然后注銷重新登錄。如果用的是ibus對(duì)應(yīng)改成ibus。中文亂碼這個(gè)問(wèn)題通常是字體缺字導(dǎo)致的。安裝中文字體包一般能解決大部分亂碼問(wèn)題sudo apt install fonts-noto-cjk fonts-wqy-microhei fonts-wqy-zenhei。然后在IDE的Settings - Editor - Font里選擇中文顯示友好的字體比如Noto Sans CJK SC或文泉驛微米黑。有一位朋友曾經(jīng)問(wèn)我為什么IDE設(shè)置里把字體改成了中文但代碼編輯器里中文注釋還是顯示為方塊我讓他去檢查系統(tǒng)是否安裝了中文字體裝完之后問(wèn)題就消失了。這個(gè)問(wèn)題其實(shí)和IDE沒(méi)有關(guān)系是系統(tǒng)字體缺失。5.4 漢化之后需要避免的坑中文語(yǔ)言包不是沒(méi)有代價(jià)的。裝完之后有些菜單被翻譯得和網(wǎng)上英文教程對(duì)不上如果你習(xí)慣對(duì)照英文教程查資料建議你在漢化后仍然保留對(duì)英文界面位置的了解或者直接記住設(shè)置項(xiàng)對(duì)應(yīng)的英文名不然別人說(shuō)“File - Settings”你卻找不到“文件 - 設(shè)置”在哪里就尷尬了。另外某些第三方插件的漢化程度不完整界面可能是中英混雜的這不影響功能只是視覺上不統(tǒng)一。如果你實(shí)在不習(xí)慣中文翻譯的某些術(shù)語(yǔ)比如“重構(gòu)”對(duì)應(yīng)Refactor可以暫時(shí)不去管它功能上不影響。我個(gè)人建議如果是新手中文界面確實(shí)能降低入門門檻如果你已經(jīng)有一定經(jīng)驗(yàn)還是盡量用英文界面因?yàn)閲?guó)內(nèi)外的教程、Stack Overflow回答絕大多數(shù)用英文術(shù)語(yǔ)后續(xù)閱讀資料會(huì)少一層轉(zhuǎn)換成本。6. 常見問(wèn)題與排查技巧實(shí)錄6.1 啟動(dòng)時(shí)報(bào)錯(cuò)或閃退怎么辦Android Studio在Linux上啟動(dòng)失敗或閃退最常見的三個(gè)原因是內(nèi)存不足、顯卡驅(qū)動(dòng)問(wèn)題、配置文件損壞。內(nèi)存不足的典型表現(xiàn)是啟動(dòng)畫面一閃而過(guò)或者IDE能開但過(guò)一會(huì)就崩。處理方法編輯安裝目錄下bin/studio.vmoptions把-Xmx參數(shù)調(diào)小例如改成-Xmx1536m減少堆內(nèi)存占用。同時(shí)把-Xss降低一些比如-Xss512k這樣對(duì)低內(nèi)存的機(jī)器更友好。我自己的8GB內(nèi)存開發(fā)機(jī)用的是-Xms512m -Xmx2048m -XX:MaxPermSize512m -XX:ReservedCodeCacheSize256m如果啟動(dòng)時(shí)白屏或界面渲染異常多半是顯卡/GPU渲染問(wèn)題。Bumblebee在部分Linux顯卡驅(qū)動(dòng)下默認(rèn)開啟GPU渲染會(huì)導(dǎo)致花屏、卡頓甚至閃退。解決方式是在啟動(dòng)時(shí)禁用GPU打開bin/studio.sh找到最后的啟動(dòng)命令加上./studio.sh -Djava.awt.headlessfalse -Dorg.eclipse.swt.internal.gtk.disableGraphicsAccelerationtrue或者更簡(jiǎn)單設(shè)置環(huán)境變量export LIBGL_ALWAYS_SOFTWARE1這樣強(qiáng)制使用軟件渲染雖然性能稍微打折但穩(wěn)定性大幅提升。配置文件損壞一般發(fā)生在不正常關(guān)機(jī)的場(chǎng)景。如果你發(fā)現(xiàn)IDE啟動(dòng)后卡在歡迎界面或者設(shè)置丟失可以備份并刪除配置文件目錄讓它恢復(fù)默認(rèn)。Bumblebee的配置目錄一般在~/.config/Google/AndroidStudio2021.1/清理前先備份因?yàn)槔锩姘愕腎DE設(shè)置和插件信息。刪除后重新啟動(dòng)IDE會(huì)重新生成默認(rèn)配置。查看啟動(dòng)日志定位問(wèn)題的路徑Help - Show Log in Files或者直接看~/.cache/Google/AndroidStudio2021.1/log/idea.log。這個(gè)日志文件會(huì)記錄啟動(dòng)過(guò)程中的異常堆棧是排查問(wèn)題的第一手資料。6.2 Gradle同步緩慢或失敗的排查Gradle同步慢是Linux以及Windows/macOS上Android Studio用戶最頭疼的問(wèn)題。慢了還好說(shuō)失敗就麻煩了。這里我梳理幾種常見情況和解法。如果是Gradle wrapper下載失敗報(bào)錯(cuò)信息里通常有“Could not download Gradle”字樣。處理方式很直接手動(dòng)下載對(duì)應(yīng)版本的Gradle壓縮包放到Gradle wrapper緩存目錄。先查看gradle-wrapper.properties里的distributionUrl得到版本號(hào)比如gradle-7.3.3-bin.zip然后從鏡像站下載最后把它放到~/.gradle/wrapper/dists/gradle-7.3.3-bin/xxxx/下。那個(gè)xxxx是隨機(jī)哈希你讓IDE同步時(shí)會(huì)自動(dòng)創(chuàng)建或者你先運(yùn)行一次同步讓目錄出現(xiàn)再拷貝。如果是依賴庫(kù)下載失敗比如maven.google.com連不上那就要配置倉(cāng)庫(kù)鏡像。打開項(xiàng)目根目錄的build.gradleProject級(jí)別在allprojects的repositories或settings.gradle里的pluginManagement/repositories里添加阿里云鏡像repositories { 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 } google() mavenCentral() }注意順序有影響鏡像倉(cāng)庫(kù)要放在google()和mavenCentral()前面這樣依賴優(yōu)先從鏡像拉取速度會(huì)明顯快很多。此外Gradle的依賴緩存目錄~/.gradle/caches越大構(gòu)建速度越快但占用磁盤也多這個(gè)提前有心理預(yù)期。如果同步過(guò)程出現(xiàn)“Read timed out”這種網(wǎng)絡(luò)超時(shí)你可以在gradle.properties里調(diào)大超時(shí)時(shí)間systemProp.org.gradle.internal.http.connectionTimeout180000 systemProp.org.gradle.internal.http.socketTimeout180000如果構(gòu)建時(shí)內(nèi)存不足把gradle.properties里的org.gradle.jvmargs調(diào)大一點(diǎn)比如org.gradle.jvmargs-Xmx2048m -XX:MaxMetaspaceSize512m6.3 KVM不可用導(dǎo)致模擬器無(wú)法運(yùn)行模擬器是Android開發(fā)中故障率最高的環(huán)節(jié)之一。在Linux上模擬器起不來(lái)的首要原因就是KVM不可用。常見的報(bào)錯(cuò)信息有這些“/dev/kvm is not found”“This AVDs configuration is missing a kernel file”“x86_64 emulation currently requires hardware acceleration!”如果報(bào)錯(cuò)里提到KVM not found按前面說(shuō)的檢查BIOS虛擬化開關(guān)、安裝qemu-kvm、把用戶加入kvm組。如果還不行確認(rèn)是否運(yùn)行在虛擬機(jī)里比如你在VirtualBox里裝了UbuntuUbuntu里再跑Android模擬器這種情況下需要開啟嵌套虛擬化否則KVM不可用。KVM正常的情況下還要檢查模擬器鏡像架構(gòu)。確保你選的System Image是x86_64而不是arm64。如果你在x86_64的電腦上選了arm64的系統(tǒng)鏡像模擬器會(huì)非常慢甚至直接起不來(lái)。在SDK Manager里系統(tǒng)鏡像通常有“x86_64”和“arm64-v8a”兩個(gè)標(biāo)簽選x86_64。如果模擬器能啟動(dòng)但非常卡可以降低模擬器配置在AVD Manager里編輯設(shè)備配置把Internal Storage改為2GB把Memory和VM heap調(diào)低一些同時(shí)開啟“Use Host GPU”選項(xiàng)這會(huì)顯著提升流暢度。我這里也推薦一個(gè)排查技巧在終端里直接啟動(dòng)模擬器可以看到更詳細(xì)的錯(cuò)誤日志$ANDROID_HOME/emulator/emulator -avd 你的AVD名稱 -verbose這樣輸出的日志比IDE里的更詳細(xì)能幫你定位具體是哪里出問(wèn)題。6.4 SDK組件下載失敗與許可接受問(wèn)題SDK組件下載失敗除了網(wǎng)絡(luò)原因外還有一個(gè)常被忽略的問(wèn)題許可協(xié)議沒(méi)有接受。首次從一個(gè)新環(huán)境下載SDK時(shí)命令行工具會(huì)要求你接受所有SDK License否則組件會(huì)被拒絕安裝或下載到一半自動(dòng)取消。接受許可的方法是$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses執(zhí)行后一直輸入y回車把出現(xiàn)的許可協(xié)議全接受。如果你沒(méi)有cmdline-tools也可以在SDK Manager的圖形界面里勾選“Accept licenses”然后點(diǎn)安裝。如果下載組件總是失敗可以在SDK Manager左下角的“SDK Update Sites”里取消勾選“Force http...”之類的選項(xiàng)或者把下載源改成國(guó)內(nèi)鏡像。Android SDK鏡像有很多你可以在SDK Manager設(shè)置里添加一個(gè)可用的鏡像源。不過(guò)我實(shí)際體驗(yàn)下來(lái)改鏡像后SDK的兼容性有時(shí)候會(huì)有小問(wèn)題建議在官方源能下載的情況下優(yōu)先用官方。如果SDK組件下載到一半卡住刪掉SDK目錄里下載不完整的臨時(shí)文件通常是.tmp或.part后綴然后重新下載。另外SDK Manager默認(rèn)的下載線程數(shù)可能較少如果你網(wǎng)速不錯(cuò)可以在IDE的VM options里加-Djava.net.preferIPv4Stacktrue有時(shí)能改善。6.5 Linux權(quán)限問(wèn)題導(dǎo)致編譯失敗Linux下編譯報(bào)錯(cuò)“Permission denied”的情況比比皆是多半和文件所有者以及Gradle守護(hù)進(jìn)程有關(guān)。如果你用了sudo啟動(dòng)Android Studio或者從網(wǎng)上下載的項(xiàng)目文件所有者是rootGradle編譯時(shí)就會(huì)因?yàn)闊o(wú)法寫入Gradle緩存或項(xiàng)目構(gòu)建目錄而失敗。解決辦法是把項(xiàng)目目錄的所有者改成你自己sudo chown -R 你的用戶名:你的用戶組 /path/to/your/projectGradle守護(hù)進(jìn)程Gradle Daemon有時(shí)會(huì)占用舊版本的緩存文件導(dǎo)致新構(gòu)建異常??梢試L試關(guān)閉守護(hù)進(jìn)程后重啟./gradlew --stop ./gradlew --no-daemon clean build或者更徹底刪掉Gradle緩存目錄里的部分緩存~/.gradle/caches讓它重新下載依賴。這個(gè)方法比較費(fèi)時(shí)但能解決很多緩存損壞的問(wèn)題。如果編譯時(shí)提示“Android SDK location not found”這通常是local.properties文件缺失。Android Studio會(huì)生成一個(gè)local.properties文件里面包含sdk.dir/home/你的用戶名/Android/Sdk如果沒(méi)有就手動(dòng)創(chuàng)建并指向你實(shí)際的SDK路徑。注意這個(gè)文件不應(yīng)該提交到Git倉(cāng)庫(kù)因?yàn)椴煌瑱C(jī)器SDK路徑不一樣。6.6 關(guān)于HAXM的常見誤解最后必須澄清一個(gè)經(jīng)典誤區(qū)很多從Windows轉(zhuǎn)過(guò)來(lái)的開發(fā)者在Linux上找HAXM怎么裝。HAXMIntel Hardware Accelerated Execution Manager是英特爾的硬件加速方案但它在Linux上并沒(méi)有對(duì)應(yīng)的版本。Linux下的硬件加速方案就是KVM它的作用類似于HAXM用來(lái)加速模擬器。所以如果你在Linux上手動(dòng)添加HAXM或者看到網(wǎng)上教程讓你去裝HAXM SDK源那是給Windows用的Linux下直接忽略。這時(shí)候正確做法是確保KVM可用如果CPU是AMD的用的是SVM虛擬化KVM同樣支持。這個(gè)誤區(qū)很容易在寫嵌入式Linux相關(guān)的開發(fā)環(huán)境時(shí)再次碰到因?yàn)楹芏嗳肆?xí)慣同時(shí)開VMware、VirtualBox和Android Studio這幾個(gè)虛擬化工具疊加起來(lái)對(duì)資源占用和嵌套虛擬化支持要求都很高。如果你在虛擬機(jī)里開發(fā)優(yōu)先保證宿主機(jī)開啟了“向虛擬機(jī)傳遞虛擬化指令”嵌套虛擬化選項(xiàng)然后虛擬機(jī)里的KVM才能正常工作。在Linux上用好Android Studio說(shuō)到底就是把系統(tǒng)環(huán)境、SDK工具鏈、虛擬化加速這三層關(guān)系理順。Bumblebee雖然老但它的穩(wěn)定性在低配Linux機(jī)器上確實(shí)能打。我建議是先把SDK和KVM這兩塊環(huán)境完全調(diào)通再考慮升級(jí)新版本因?yàn)槟M器和構(gòu)建流程的順暢程度往往比IDE功能多少更能影響日常開發(fā)效率。最后分享一個(gè)我自己的習(xí)慣每次配置完新環(huán)境我會(huì)把studio.vmoptions、gradle.properties、基礎(chǔ)SDK組件的清單都備份一份到文本文件里。這樣下次換電腦或者重裝系統(tǒng)照著清單重新配一遍比重新踩一遍坑快太多了。你如果也在Linux上長(zhǎng)期寫Android不妨也養(yǎng)個(gè)這樣的習(xí)慣。本文還有配套的精品資源點(diǎn)擊獲取