很多人一提到 Android 开发,第一反应就是:
但我这次在 Linux 上把一个真实的 Android APK 项目跑通、修改、编译、安装,反而更加确信一件事:
Linux 完全可以作为 Android 的一线开发环境,而且命令行工作流其实很强。
这篇文章我尽量用“手工搭环境 + 命令行构建 + 真机调试”的方式讲清楚,适合:
这份指南也结合了一个真实项目验证过的流程:
./gradlew :app:assembleDebugAndroid 开发看起来复杂,本质上其实只需要理解 5 件事:
换句话说,Android Studio 只是把这些东西打包得更完整,但不是唯一入口。
如果你已经有:
gradlew 的 Android 项目那你离能编译 APK,其实已经不远了。
下面以 Ubuntu / Debian 系为例。
bash展开代码sudo apt update sudo apt install -y openjdk-17-jdk unzip zip wget curl git
检查 JDK:
bash展开代码java -version javac -version
如果项目使用的是较新的 Android Gradle Plugin,JDK 17 基本已经是当前最稳妥的选择。
如果你机器上装了多个 JDK,建议显式设置:
bash展开代码export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
不同发行版的 JDK 路径可能不同,可以这样查:
bash展开代码readlink -f $(which java)
Android 官方已经明确支持不装 Android Studio,只安装命令行工具的方式开发和构建 Android。这个方式尤其适合 Linux、服务器和 CI。
比如:
bash展开代码mkdir -p $HOME/android-sdk
去 Android 官方下载页下载 Command line tools for Linux:
下载完成后解压,并整理成 Android 官方推荐的目录结构:
bash展开代码mkdir -p $HOME/android-sdk/cmdline-tools
cd /tmp
unzip commandlinetools-linux-*.zip
mv cmdline-tools $HOME/android-sdk/cmdline-tools/latest
最终建议目录长这样:
text展开代码$HOME/android-sdk/ ├── cmdline-tools/ │ └── latest/ │ ├── bin/ │ ├── lib/ │ └── source.properties
把下面这些内容写进 ~/.bashrc 或 ~/.zshrc:
bash展开代码export ANDROID_HOME=$HOME/android-sdk
export ANDROID_SDK_ROOT=$ANDROID_HOME
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
生效:
bash展开代码source ~/.bashrc
检查:
bash展开代码sdkmanager --version adb version
Command-line Tools 本身只是一把钥匙,真正构建项目时还需要平台包和 build-tools。
先接受许可证:
bash展开代码yes | sdkmanager --licenses
然后安装常用组件:
bash展开代码sdkmanager --install \
"platform-tools" \
"platforms;android-36" \
"build-tools;36.0.0" \
"cmdline-tools;latest"
如果你项目的 compileSdk 是别的版本,比如 34 或 35,就把 platforms;android-36 改掉。
直接看模块的 build.gradle.kts 或 build.gradle:
kotlin展开代码android {
compileSdk = 36
defaultConfig {
minSdk = 33
targetSdk = 36
}
}
如果项目声明了:
compileSdk = 36targetSdk = 36那你至少要装:
platforms;android-36build-toolsgradlew很多 Android 新手会直接装一个系统级 gradle,然后执行:
bash展开代码gradle build
这通常不是最稳的做法。
更推荐使用项目自带的 gradlew,因为:
也就是说,进入项目目录后,优先执行:
bash展开代码./gradlew tasks
而不是直接使用系统的 gradle。
假设项目目录是:
text展开代码pipecat_apps/livekit_video_chat_apk/
这个目录里有:
gradlewsettings.gradle.ktsapp/那么最常用的命令就是:
bash展开代码cd pipecat_apps/livekit_video_chat_apk
export ANDROID_HOME=/opt/android-sdk
export ANDROID_SDK_ROOT=/opt/android-sdk
./gradlew :app:compileDebugKotlin
./gradlew :app:assembleDebug
如果构建成功,APK 通常在:
text展开代码app/build/outputs/apk/debug/app-debug.apk
bash展开代码./gradlew :app:compileDebugKotlin
作用:
bash展开代码./gradlew :app:assembleDebug
作用:
我个人非常推荐:Linux + 真机 + adb。
因为很多时候,真机比模拟器更省心:
在 Android 手机上:
bash展开代码adb devices
如果第一次连接,手机会弹授权框,点允许。
看到类似输出就说明连上了:
text展开代码List of devices attached XXXXXXXXXXXX device
bash展开代码adb install -r app/build/outputs/apk/debug/app-debug.apk
说明:
-r 表示覆盖安装如果你知道应用包名,也可以直接启动:
bash展开代码adb shell am start -n com.zhiyue.livekitvideochatapk/.MainActivity
很多人只在 Android Studio 里看 Logcat,但 Linux 终端下调日志其实非常顺手。
bash展开代码adb logcat
bash展开代码adb logcat -c adb logcat
rg 过滤关键词bash展开代码adb logcat | rg "AndroidRuntime|FATAL|LiveKit|OkHttp|zhiyue"
这个组合在 Linux 上特别强:
adb logcat 输出系统日志rg 做高性能筛选你可以重点关注:
AndroidRuntimeFATAL EXCEPTIONSecurityExceptionNetworkSecurityConfigIllegalStateExceptionNullPointerException如果你没有真机,也可以在 Linux 上用模拟器,只是通常更重一些。
先安装:
bash展开代码sdkmanager --install \
"emulator" \
"platform-tools" \
"platforms;android-36" \
"system-images;android-36;google_apis;x86_64"
创建 AVD:
bash展开代码avdmanager create avd -n pixel-api-36 \
-k "system-images;android-36;google_apis;x86_64"
启动模拟器:
bash展开代码emulator -avd pixel-api-36
不过,如果你的项目涉及:
我还是建议优先真机。
./gradlew: No such file or directory原因通常很简单:你不在 Android 项目的根目录。
比如要进到这个目录:
bash展开代码cd pipecat_apps/livekit_video_chat_apk
再执行:
bash展开代码./gradlew :app:assembleDebug
SDK location not found说明 Gradle 没找到 Android SDK。
检查:
bash展开代码echo $ANDROID_HOME
echo $ANDROID_SDK_ROOT
必要时显式设置:
bash展开代码export ANDROID_HOME=$HOME/android-sdk
export ANDROID_SDK_ROOT=$ANDROID_HOME
failed to find Build Tools revision说明缺少对应 build-tools。
解决:
bash展开代码sdkmanager --install "build-tools;36.0.0"
按项目实际版本替换即可。
Platform android-XX not found说明缺少平台包。
解决:
bash展开代码sdkmanager --install "platforms;android-36"
如果项目要求 JDK 17,而你机器默认还是 11 或 21,Gradle 可能会报莫名其妙的问题。
建议:
bash展开代码java -version ./gradlew --version
优先保证项目和本机 JDK 主版本一致。
adb devices 看不到手机Linux 下这很常见,通常有几种原因:
先试:
bash展开代码adb kill-server adb start-server adb devices
如果还是不行,再去补设备厂商的 udev 规则。
10.0.2.2 只对模拟器有效这是非常高频的坑。
10.0.2.210.0.2.2常见原因:
localhostws:// 和 wss:// 混用了Android 联网问题,七成不是代码,而是地址和网络边界。
很多人觉得 Android Studio 才是“正统”,但如果你从工程效率角度看,Linux 命令行其实有很大优势。
比如你可以很自然地串起来:
bash展开代码./gradlew :app:compileDebugKotlin && \ ./gradlew :app:assembleDebug && \ adb install -r app/build/outputs/apk/debug/app-debug.apk
在服务器、远程工作站、容器、云开发机上,CLI 方案比 GUI 方案稳定得多。
当项目能通过:
形成完整闭环时,AI 其实能帮你做非常多事情。
终端日志、Gradle 任务、依赖下载过程、打包路径,都更直接。
你不会只看到一个 IDE 弹窗写着:
text展开代码Build failed
而是能看到具体失败在哪个 task、哪个依赖、哪个源码文件。
虽然我一直在强调 Linux CLI 工作流很好,但我并不反对 Android Studio。
如果你要做这些事情,Android Studio 依然很有价值:
我的建议是:
这样你的工作流最灵活。
如果你问我,Linux 上开发 Android,最舒服的姿势是什么,我会推荐这套:
./gradlewadb logcat | rg 看日志Makefile、justfile 或 shell script比如:
bash展开代码#!/usr/bin/env bash
set -e
export ANDROID_HOME=$HOME/android-sdk
export ANDROID_SDK_ROOT=$ANDROID_HOME
./gradlew :app:assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk
你会发现,一旦链路打通,Android 在 Linux 上并不“麻烦”,反而是非常适合工程化和自动化的一类开发工作。
Android 开发真正难的,不是 Linux。
真正难的是:
一旦你把它拆开,Android 在 Linux 上其实很清晰:
搞明白这一层以后,你会发现:
Linux 不但能开发 Android,而且非常适合认真做 Android。
bash展开代码sudo apt update sudo apt install -y openjdk-17-jdk unzip zip wget curl git
bash展开代码export ANDROID_HOME=$HOME/android-sdk
export ANDROID_SDK_ROOT=$ANDROID_HOME
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
bash展开代码yes | sdkmanager --licenses
sdkmanager --install \
"platform-tools" \
"platforms;android-36" \
"build-tools;36.0.0" \
"cmdline-tools;latest"
bash展开代码cd pipecat_apps/livekit_video_chat_apk
./gradlew :app:compileDebugKotlin
./gradlew :app:assembleDebug
bash展开代码adb devices adb install -r app/build/outputs/apk/debug/app-debug.apk
bash展开代码adb logcat -c
adb logcat | rg "AndroidRuntime|FATAL|LiveKit|OkHttp"
sdkmanager


本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!