在纽曼纽扣 CM810 上把 Termux 跑起来


本文目录

手边这台纽曼纽扣 CM810 是 2015 年的千元机:骁龙 615、2GB 内存、16GB 存储、后置指纹。当年卖 1199 块,现在二手价格在几十块区间,当个备用机或者”随身 Linux 玩具”正合适。

折腾它的起因很简单:想在上面装 Termux。但真正动手才发现,难点不在 Termux 本身,而在于这台机器的系统版本太老——Termux 从 2020 年起就放弃过 Android 5/6,虽然 2022 年又加回来了,但正式发布包一直没有跟上,只能去 GitHub Actions 的构建产物里翻。下面是完整过程和踩过的坑。

一、先摸清这台机器的底细

纽曼纽扣 CM810 的配置:

项目参数
CPU高通骁龙 615(MSM8939),64 位八核 1.5GHz
GPUAdreno 405
内存 / 存储2GB LP-DDR3 + 16GB eMMC,支持 Micro SD 扩展(官方称最高 64GB)
屏幕5.5 英寸 1920×1080,LTPS,GFF 全贴合,2.6mm 边框
摄像头后置 1300 万堆栈式(0.5 秒快速对焦)+ 前置 500 万 86° 广角
电池3000mAh,9V/1.8A 输入转 5V/3A 快充
指纹后置圆形”纽扣”,与华为 Mate 7 同款方案
网络双卡双待,移动/联通双 4G,Micro SIM
系统阿里巴巴 YunOS 3.0(无 GMS)

三个限制决定了后面所有的技术选型:

1. YunOS 3.0 不是 AOSP。 阿里把它包装成自研操作系统,安卓 App 通过自家的云应用运行时转码兼容执行,底层用的是 Linux 内核 + Bionic + Dalvik。它对外的安卓兼容层大致对应 Android 5.1(API 22) 这一代。这意味着装 Termux 时你面对的是”安卓 5 级别”的环境。

2. MSM8939 实际跑的是 32 位用户态。 骁龙 615 是 64 位 SoC,但当年这批机器绝大多数只提供 32 位 ARM 用户态。所以 Termux 装的是 arm(armeabi-v7a) 那一套包,不要去碰 arm64 的。

3. 2GB RAM + 16GB eMMC。 跑 Termux 本身绰绰有余,但编译这类重活要克制。

动手前先确认系统到底报的是什么版本,别凭参数表猜。手机开 USB 调试,连电脑执行:

adb shell getprop ro.build.version.release   # 期望 5.1
adb shell getprop ro.build.version.sdk        # 期望 22
adb shell getprop ro.product.cpu.abi         # 期望 armeabi-v7a

YunOS 3.0 在”设置 - 关于手机”里显示的是自己的版本号,看不到 API 级别,用 getprop 最直接。

二、装 Termux:别下错版本

这里有个很容易踩的历史坑:

  • Termux v0.83(2020-01-01) 结束对 Android 5/6 的支持,minSdkVersion 提到 24(Android 7.0)
  • 2022-05-24,Termux 在 PR #2740 “Enable support for android 5/6” 中重新加回支持,master 分支的 minSdkVersion 改回 21
  • 但 v0.118.0 及以前的正式发布包 minSdk 仍然是 24,Android 5/6 支持目前只存在于 master 分支的调试构建里,官方说明是”Until termux-app 0.119 is released”

所以从 F-Droid 或 GitHub Releases 直接下载正式版 APK,装到这台机器上只会得到”应用未安装”或者”解析包错误”。正确做法是去 Actions 构建产物里找 apt-android-5 变体:

  1. 打开 termux-app 的 debug_build.yml 工作流
  2. 展开最近一次 master 分支的 push 运行记录
  3. 在 Artifacts 里下载名字里带 apt-android-5 的那个压缩包(形如 termux-app_v0.118.0+<commit>-apt-android-5-github-debug_universal)
  4. 解压出 .apk,传到手机上安装,过程中允许”安装未知来源应用”

几个注意点:

  • 下载 Actions 产物需要登录 GitHub 账号,这是唯一有点麻烦的地方
  • Google Play 版的 Termux 已经停止更新,而且签名和 F-Droid / GitHub 版不同,不能覆盖安装,必须先卸载 Play 版再装
  • 如果想用 F-Droid 装 Termux,注意 F-Droid 自己也要降级:Android 5.1(API 22)用 F-Droid 1.15.6,API 21 及以下用 1.12.1。但 F-Droid 仓库里的 Termux 仍是 minSdk 24 的构建,所以最后还是得手动下 APK

装好之后进 Termux,先别急着 pkg update,直接换源。

三、换源:最容易翻车的一步

新版 Termux 默认写入的是 Android 7+ 的源(termux-main / -24),在这台 Android 5.1 上执行 pkg update 只会得到 404 或者 Release file not found。

Termux 官方 Wiki 给 Android 5/6 的源是这四行:

deb https://packages.termux.dev/apt/termux-main-21 stable main
deb https://termux.dev/science-packages-21-bin science stable
deb https://termux.dev/game-packages-21-bin games stable
deb https://termux.dev/termux-root-packages-21-bin root stable

-21 对应 API 21,也就是 Android 5.0。实操命令:

apt_path=$PREFIX/etc/apt

echo "deb https://packages.termux.dev/apt/termux-main-21 stable main" > $apt_path/sources.list
echo "deb https://termux.dev/science-packages-21-bin science stable" > $apt_path/sources.list.d/science.list
echo "deb https://termux.dev/game-packages-21-bin games stable"     > $apt_path/sources.list.d/game.list
echo "deb https://termux.dev/termux-root-packages-21-bin root stable" > $apt_path/sources.list.d/root.list

apt update && apt upgrade

几个实测下来的注意点:

国内镜像帮不上忙。 清华 TUNA、中科大 USTC 的 termux 镜像只有 termux-main(Android 7+ 那套),没有 -21,所以这台机器只能直连 packages.termux.dev。好在 termux-main-21 的 Release 文件里 Architectures 明确包含 arm,32 位 ARM 包是齐的。

root 源用不上。 termux-root-packages-21-bin 需要系统里有 su,而 YunOS 3.0 官方没有开放 root。好在 Termux 本身完全不需要 root,删掉 root.list 不影响任何事。

science / games 源可能拉不动。 这两个 -21 仓库的可用性一般,如果 apt update 卡住或报 404,直接把对应的 .list 删掉,只留主源即可——python、git、vim、clang 这些日常要用的包都在主源里。

四、验证与日常使用

换完源先自检一遍环境:

uname -m           # armv7l,确认是 32 位 ARM
pkg --version
pkg install -y git vim curl python

然后是几个这台机器上值得单独配一下的点。

访问手机存储。 执行 termux-setup-storage 让 Termux 拿到 /sdcard 权限。如果在 YunOS 的权限模型下这个脚本没反应,手动软链:

mkdir -p ~/storage/shared
ln -s /sdcard ~/storage/shared

软键盘错位 / 遮挡。 Termux 自带的输入法在 5.5 英寸 1080p 上体验一般,地址栏输入 https:// 这类组合还容易弹提示。推荐从 F-Droid 装 Hacker’s Keyboard 替代。另一个思路是在 ~/.termux/termux.properties 里加:

volume-keys = escape
extra-keys = [['ESC','/','-','HOME','UP','DOWN','LEFT','RIGHT']]

音量键变成 ESC,顺手多出一排功能键,/、- 在敲命令时非常实用。

后台被杀。 Android 5 还没有 Doze,但厂商 ROM 的省电策略照样会杀后台。到系统设置里把 Termux 的电池优化关掉,Termux 内部再执行一次 termux-wake-lock 拿住唤醒锁。

编译要克制。 pkg install clang 能装上,但 2GB 内存跑大型编译容易 OOM。真要编译东西,优先走预编译包,或者在电脑上交叉编译再推过来。

五、踩坑清单

现象原因处理
安装 APK 提示”应用未安装”正式版 minSdk 24,系统只有 22换 Actions 里的 apt-android-5 产物
Play 版与 F-Droid 版互相覆盖失败签名不同先卸载 Play 版再装
apt update 报 404 / Release file not found用的是 Android 7+ 的 -24 源改成 termux-main-21
apt update 卡住不动science/games 的 -21 仓库不稳定删掉这两个源,只留主源
装包到一半被杀掉2GB 内存 + 厂商省电策略关电池优化、termux-wake-lock、单包安装
键盘输入错乱、弹提示YunOS 自带输入法与 Termux 不兼容换 Hacker’s Keyboard,或设 volume-keys = escape
termux-setup-storage 无反应YunOS 权限模型差异手动 ln -s /sdcard ~/storage/shared

六、值不值得折腾

值得的地方:便宜、待机长、有指纹(可以拿来做远程解锁/自动化触发)、支持 Micro SD 扩展、32 位 ARM 反而让 Termux 装包更轻。

要接受的事实:2GB 内存 + 16GB 存储的上限摆在这;YunOS 早已停止更新,安全补丁停留在 2015 年,装了 Termux 之后更要小心别在这上面存敏感数据;没有 GMS,装不了依赖 Google 服务的应用。

我的建议是把它当成备用机和随身 Linux 玩具,用来跑 ssh、python 脚本、跑个静态小站或者做 IoT 调试终端,而不是主力设备。


参考

← 返回博客