让安卓手机变成随身携带的开发环境
2024 年 08 月 02 日
前几天突然来了兴致,试了试直接用安卓手机来开发。先说结论,可行,但稍有限制。
关于硬件
整个方案对 CPU/内存/Flash 都有一定要求,因此手机不能配置太低。我自己的手机是 8Gen3 + 16 + 1T 的配置。
考虑到手机屏幕实在是太小了,直接在上面写代码肯定是不适合的。要解决屏幕问题的话,就有两个方案:
- 手机通过 USB-C 直连显示器,配合键鼠外设。需要手机支持 Alt Display。适合带个移动显示器在咖啡厅显摆。
- PC 或 MAC 通过无线网络连接到手机。比较适合在公司摸鱼。
两个方案本质都是一样的。实际的代码和调试运行环境都是在手机上,差别只是手机连接的外设不同而已。
实现思路
具体到实现方式,思路并不复杂,就是以下几个工具:
-
使用 termux 在 Android 模拟 Linux 运行环境。
-
在 termux 环境中运行 code-server。
-
根据不同的硬件方案选择不同的浏览器和连接方式来使用 vscode。
- 直连显示器时,直接使用 Android 的浏览器,最好是 chrome 或 edge,避免兼容性问题。
- PC / MAC 可以通过 ssh 做端口转发,然后使用浏览器直接访问手机上的 code-server。
注:PC / MAC 还可以考虑使用 SSH FS。不过我未加尝试。
具体做法和限制
关于 Termux
可以从 github 或 F-Droid 下载和安装 Termux,不要装 Google Play 版本。我个人比较喜欢 github 的版本。
需要 Android 5 以上的版本。其他限制参考 Termux Wiki。
要注意的一点是,Termux 环境并不是完整的 Linux 环境,在非 root 环境下安装时,有很多限制,例如:
- 无法使用 sudo(虽然可以安装 sudo 命令)。
- 只能监听 127.0.0.1 上的 1024 以上端口,无法监听局域网 IP 地址。
- 由于缺少一些基础 lib,因此并非所有 Linux 软件都能安装。所以无法使用 vscode 的 remote ssh 连接(因为 vscode-server 无法在 Termux 中安装)。
- 单用户系统,用户名固定无法修改。
另外,Termux 可以安装 X11 环境。也就是说,可以运行 Linux 桌面。但对我来说没有这个需求。绝大部分情况下,命令行已经够了。
使用 SSH 连接 Termux
在 Termux 中运行以下命令,获取或设置必要的信息:
# 获取用户名
whoami
# 设置密码
passwd
# 获取 IP,也可以直接查看手机在局域网的 IP
ifconfig
# 启动 ssh 服务
sshd
然后可以使用 SSH 连接,默认端口是 8022。假设用户名是 u0_a123,IP 是 192.168.1.2:
# 在 PC/MAC 上运行 ssh 客户端,增加了端口转发和 keep alive
ssh -L 8080:127.0.0.1:8080 -o "ServerAliveInterval=1" -o "ServerAliveCountMax=3" [email protected] -p 8022
传统的 ssh 简化登录的操作都可以用,比如 ssh-copy-id
。Windows 的 openssh 也可以正常使用。
在 Termux 中安装软件
可以安装的软件在 Termux Wiki 上的软件章节 都有明确说明。我安装了 nodejs/python/rust 环境。安装命令如下:
# 在 Termux 中安装各种运行环境
pkg install nodejs-lts
pkg install python
pkg install rust
# 安装 code-server,参考:https://coder.com/docs/code-server/termux
pkg install tur-repo
pkg install code-server
运行 code-server 和 vscode
# 查看 code-server 密码
cat ~/.config/code-server/config.yaml
# 运行 code-server
code-server
现在可以直接在 android 的浏览器中打开 http://127.0.0.1:8080
,输入密码即可使用浏览器中的 vscode web 开始写程序。如果 ssh 端口转发已经打开了,那么在 PC / MAC 的浏览器里也可以使用。
注:最好解除 Termux 的限制,避免被操作系统杀掉或断网。
另外,vscode web 中有很多插件是不能用的。如果受这点影响比较大,理论上可以考虑用 PC 端的 vscode 配合 SSH FS 插件同步源码,但这种方法我就没有尝试过了。
总结
使用 Termux 模拟 Linux,可以在 Android 上构建一个近似于 Linux Server 的开发环境。虽然稍有限制,但可用性绝对足够。
至于随身携带的 Linux Server 能做些什么,这就请大家随意想象了。