十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Android 6老手机安装Termux 0.117完全指南:配置、API与传感器采集

Android 6老手机安装Termux 0.117完全指南:配置、API与传感器采集 我先把结论摆出来Android 6上跑Termux完全可行而且配合Termux:API能把这台老设备变成一个小型Linux开发机加传感器采集站。但有一个硬性前提——你不能直接装最新版的Termux APK而是要用0.117这个分水岭版本。这篇笔记是我在Android 6设备上从零折腾Termux、Termux:API的完整记录包括版本选择、仓库源配置、权限处理、常用命令实测和几个容易踩的坑给同样手上有老设备的兄弟一个可以直接照抄的路径。1. 老系统装新终端先搞清楚Android 6卡的版本门槛1.1 Termux版本演进与系统要求的对应Termux这几年的版本策略有个明显变化0.117及更早的版本是支持Android 6的但从0.118.0开始Termux团队把最低系统要求抬到了Android 7以上Google Play商店里更是要求Android 8起步。原因也不难理解——2022年前后Termux重构了包仓库结构、升级了底层bootstrap和TLS策略旧版Android系统上的二进制和动态库配置已经跟不上新仓库的解析逻辑。所以Android 6设备能够稳定使用的是Termux 0.117这个版本它是最后一代支持Android 6的主流版本。你如果硬装0.118或更新版本大概率会出现“解析包时出现问题”的提示或者安装成功但启动后卡在初始化界面bootstrap根本解压不出来。安卓版本和Termux版本的简单对应关系如下Android版本可用Termux版本说明Android 7及以上0.118及更新当前Termux主线版本仓库源基本通吃Android 6API 230.117及更早需要手动替换仓库源才能正常安装软件包Android 5及以下0.116或更早没有继续折腾的必要建议换设备这个结论不是纸上谈兵是我拿一台Android 6的旧手机实测出来的。先安装了0.118的APK提示解析失败然后换到0.117才成功进入Termux的命令行界面。1.2 0.117 APK的获取与避坑安装Termux 0.117的APK主要来源是GitHub Releases页面找到对应的v0.117标签下载com.termux_117.apk这类命名的安装包。F-Droid的版本列表里也能找到历史版本但注意F-Droid和GitHub/Google Play的签名不一样如果设备上已经装过其他来源的Termux需要先卸载干净再安装否则会提示签名冲突。这地方有个小坑Termux主程序和Termux:API应用最好保持同一来源。我一开始主程序用的GitHub版Termux:API用的F-Droid版虽然大部分命令能跑但偶尔会出现通信不上的问题后来统一重新安装才稳定。安装时注意Android 6要在“设置-安全-未知来源”里允许安装外部APK。如果安装时反复提示解析失败先检查APK是否下载完整再看系统版本是否满足要求——很多第三方下载站会把新版APK的标题写成旧版本下载下来实际是0.118以上这种最容易迷惑人。1.3 开机初始化bootstrap与home目录安装完成后第一次打开Termux会有一个解压bootstrap的过程。这个环节会创建$PREFIX默认是/data/data/com.termux/files/usr和$HOME目录并安装基础工具集。如果网络不好或者存储空间不够会一直卡在“Installing...”状态。遇到这种情况我的办法是先把Termux完全停止清掉应用数据重新打开让bootstrap重新解压。不要试图在初始化过程中手工干预目录内容很容易把权限搞乱。初始化完成后你可以用uname -a和pwd确认环境是否正常。注意Android 6上Termux使用的是自己的目录结构不是Android系统目录所以/data、/system这些路径虽然能看到但没有root权限也写不进去这是正常的。2. 换源与包管理0.117默认仓库失效的完整排查2.1 报错现场与根因分析Termux 0.117装好后的第一件事不是玩命令而是先把软件源处理好否则后续安装任何包都会失败。我当时的报错现场是$ pkg update Get:1 https://packages.termux.org/apt/termux-main stable InRelease [xx.x kB] Err:1 https://packages.termux.org/apt/termux-main stable InRelease The following signatures couldnt be verified because the public key is not available: NO_PUBKEY ... Reading package lists... Done W: GPG error: ... E: The repository ... Release does not have a Release file.这个问题的根因有两层。第一0.117默认指向packages.termux.org这个地址在国内网络环境下连接超时率很高第二也是更关键的一点Termux在2022年切换了新仓库结构而0.117自带的apt版本比较老直接解析新仓库的Release文件时容易出现GPG密钥或格式兼容问题。所以正确的处理思路不是硬等官方源而是直接把源替换成公共镜像源。2.2 手动替换镜像源与证书处理Termux的源配置文件在$PREFIX/etc/apt/sources.list。0.117版本的默认内容基本是这样的deb https://packages.termux.org/apt/termux-main stable main替换为清华镜像源一句命令搞定sed -i spackages.termux.org/apt/termux-mainmirrors.tuna.tsinghua.edu.cn/termux/apt/termux-maing $PREFIX/etc/apt/sources.list执行完以后再运行apt update apt upgrade如果apt update出现GPG公钥问题多半是0.117的keyring包太旧需要手动安装新的termux-keyring。可以先用curl把keyring包下载到本地再安装curl -LO https://packages.termux.org/termux-keyring_0.1_all.deb apt install ./termux-keyring_0.1_all.deb这步很关键因为keyring不更新的话后面无论换哪个镜像源签名校验都是过不去的apt会一直拒绝拉取包列表。2.3 pkg upgrade之后可装的基础工具源换好、apt upgrade跑完一遍后基础环境就基本可用了。我建议先把这几个包补上它们会影响后续所有的使用体验包名用途备注nano文本编辑器Termux自带vi但nano对新手友好得多termux-toolsTermux基础工具脚本部分Termux命令依赖它termux-apiTermux:API客户端工具不装这个API APK就只是个摆设opensshSSH服务端/客户端远程调试老设备必备pythonPython解释器跑脚本和自动化任务直接用cronie定时任务配合termux-services使用安装命令pkg install nano termux-tools termux-api openssh python cronie termux-services注意这一套在Android 6上安装时间会比较长尤其python和openssh要编译安装依赖耐心等就好。如果中途断网或者包里出现Sub-process /data/data/com.termux/files/usr/bin/dpkg returned an error code不要慌执行apt --fix-broken install修复完再继续。3. Termux:API的安装、授权与连通性验证3.1 termux-api脚本与API APK的分工关系Termux:API这套东西由两个部分组成一个是Android应用端的APK另一个是Termux环境内部的termux-api工具包。很多人困惑为什么装了命令行工具还调不通API就是漏装了APK这个根源。两者的分工是APK负责在Android系统层面调用权限敏感的能力比如摄像头、麦克风、传感器、通知栏、剪贴板等Termux内的termux-api脚本则负责把命令行的参数翻译成对APK的请求并把结果返回成JSON格式文本。在Android 6上两个组成部分都要安装。APK从GitHub Releases里选择较老的稳定版本新版APK可能要求Android 7以上。如果安装时提示“解析包时出现问题”或“无法安装”不要硬扛往版本列表的旧版本方向翻直到能装为止。装好后打开一次APK让它完成初始化不然后续命令经常会返回空结果。3.2 Android 6运行时权限的逐项授权Android 6引入了运行时权限机制和Android 5及以下在安装时统一授权不同系统会在应用第一次调用某项能力时弹窗询问。如果在Termux里执行termux-battery-status这种需要访问系统的命令系统会弹窗提示“是否允许Termux:API访问”。全部点允许后部分权限还要去“设置-应用-Termux:API-权限”里检查一遍尤其是存储、定位、相机这三项。一个非常实用的命令是termux-permission它可以直接从Termux内部发起权限授权请求termux-permission grant CAMERA termux-permission grant RECORD_AUDIO termux-permission grant ACCESS_FINE_LOCATION如果提示termux-permission: command not found说明termux-api包没有装完整或者版本太旧升级后再试。这个命令在Android 6上的表现不太稳定有时候授权结果要等几秒才生效建议执行完以后去系统设置里再次确认。3.3 常见连通失败定位流程Termux:API最容易出现的报错是命令执行后没有输出或者直接提示null、API not found。这套排查链路我踩了好几次总结如下先确认APK装了没有在Android应用列表里能看到Termux:API图标。打开一次Termux:API应用让它完成初始化然后再回Termux执行命令。在Termux里输入pkg list-installed | grep termux-api确认命令行工具已经安装。执行最基础的连通性测试命令termux-toast hello如果手机顶部弹出Toast提示说明整个链路通了。如果Toast没有弹出来先杀掉Termux:API进程再试。这个排查顺序一定不要乱尤其不要跳过第2步。我在Android 6上遇到过几次APK安装后没有打开导致接口一直不通的情况打开一次后立刻就能用了。4. 在Android 6上实测高频Termux:API命令4.1 通知、剪贴板、Toast等轻量命令Termux:API的轻量命令在Android 6上跑得很顺畅几乎没有任何适配问题。最常用的三个是# 弹Toast通知 termux-toast hello from termux # 读取剪贴板 termux-clipboard-get # 写入剪贴板 termux-clipboard-set copy this text还可以用termux-notification发系统通知比Toast更持久适合脚本跑完通知你结果termux-notification --title 任务完成 --content 备份脚本执行成功Android 6上这些命令的响应速度和新版系统没有明显差别延迟基本在1秒以内。唯一的注意点是如果命令行带中文参数建议先确认终端设置了UTF-8编码否则可能出现中文乱码。我习惯在~/.bashrc里加一行export LANGzh_CN.UTF-8配合中文字体包基本就没问题了。4.2 传感器、电池、设备信息类命令这组命令是我在Android 6上折腾时觉得最有价值的部分也是很多桌面Linux环境做不到的——终端直接读取手机硬件信息。# 电池状态返回JSON termux-battery-status # 列出所有传感器 termux-sensor -l # 读取加速度计数据 termux-sensor -s accelerometer -n 1 # 设备基础信息 termux-telephony-deviceinfotermux-battery-status返回的JSON包含了电量百分比、充电状态、温度等字段可以直接用python脚本解析做电量监控。传感器这块不同手机的传感器名称不一样用termux-sensor -l列出来以后才方便选定正确的传感器名称。运行termux-telephony-deviceinfo会请求读取设备信息的权限Android 6上给一次权限就行。这个命令返回数据很快但注意它拿不到IMEI这类高敏感信息只能拿到品牌、型号、系统版本等公开字段。4.3 定位、拍照、录音等敏感权限场景摄像头和麦克风是Termux:API里权限要求最重的一类Android 6上必须单独授权。拍照命令示例termux-camera-photo -c 0 /sdcard/DCIM/termux_test.jpg这个命令在Android 6上有两个坑。第一个坑是拍照前要等摄像头对焦完成不然容易拍出黑图或者模糊图我的解决办法是在脚本里加两秒延时再读文件。第二个坑是-c参数指定摄像头序号有些手机只有后置摄像头识别为0如果拍出来是黑图试试-c 1。录音命令termux-microphone-record -d -l 5 /sdcard/test_recording.mp3这个命令的-d是默认音源-l 5是录音时长5秒。Android 6上录音完成后文件会正常保存到指定路径但偶尔会出现文件大小为0的情况通常是权限授予后没有重新打开Termux让系统重新绑定权限导致的。定位命令termux-location -p gpsAndroid 6上如果GPS信号弱返回结果会很慢甚至超时可以先测试网络定位termux-location -p network注意termux-location这几类定位方式都需要Termux:API具备定位权限而且系统设置里的定位服务必须打开否则命令会卡住直到超时。5. 存储授权与文件打开那点事5.1 termux-setup-storage的行为和坑Termux在Android上不能直接读写/sdcard必须要经过授权和目录映射。执行下面的命令会申请存储权限并在Termux的home目录下创建storage目录termux-setup-storage执行成功后~/storage下会出现downloads、dcim、pictures、music等软链接指向/sdcard里对应的真实目录。建议以后都通过~/storage访问外部存储不要直接写/sdcard路径因为不同ROM的路径映射有细微差异通过软链接最保险。有一个坑Android 6上如果第一次弹窗点了拒绝之后即使去系统设置里打开了存储权限termux-setup-storage也可能不会立即生效。解决办法是重启一次Termux应用再执行命令。如果重启后还是不行就彻底清掉Termux应用数据重新初始化然后第一时间执行termux-setup-storage。如果是root过的设备可以在命令行里直接用chmod等文件权限命令操作Android系统目录但普通用户没这个能力还是老老实实走storage目录映射。5.2 termux-open打开外部文件的差异Termux里想打开一个文件有两种常见需求查看文件内容或者调用外部应用打开。前者用cat、less、nano后者用termux-open。termux-open ~/storage/downloads/test.pdf termux-open ~/storage/dcim/test.jpg这个命令会调起Android系统里匹配文件类型的外部应用。在Android 6上一个很友好的点直接传文件路径就能打开不用担心FileUriExposedException。这个异常是从Android 7.0开始引入FileProvider机制后才出现的所以Android 6反而省了写成content://URI的操作这是老系统的便利之处。Android 6上如果termux-open没有反应最常见的排查方向是没有关联应用能处理这个文件类型。比如在没装PDF阅读器的手机上打开PDF就是无响应这不算Termux的问题。6. 把旧手机变成小服务器的几个配置方案6.1 SSH远程登录与保持连接Termux里装好openssh后启动sshd服务sshd默认端口是8022不是22。Termux环境下whoami会输出当前用户名从电脑端连入时用这个用户名加上设备IP和8022端口即可ssh 用户名设备IP -p 8022Android 6上跑了sshd以后要注意一个常见问题锁屏后WiFi自动休眠SSH连接会断开。一劳永逸的解决方法是前台保持Termux运行并加上wake-locktermux-wake-lock这个命令来自Termux:API能让CPU保持唤醒状态。锁屏后连接也不会断非常适合把旧手机挂在办公室当演示服务器或者数据中转站。6.2 定时任务与Python脚本联动定时任务是这些老手机最好的应用场景之一。安装cronie和termux-services后启动cron服务sv-enable cron sv-enable sshd然后用crontab -e添加定时任务比如每天早上8点读取一次电池状态写入日志0 8 * * * termux-battery-status ~/battery.log也可以配合Termux:API做更实际的玩法定时拍照、定时发通知、定时把传感器数据汇总到本地文件。Android 6没有新版系统那么多后台限制cron跑起来非常稳定手机充着电放那边连续跑一周基本不会出问题。Python脚本这块写一个简单的电量记录脚本import json import subprocess from datetime import datetime result subprocess.run([termux-battery-status], capture_outputTrue, textTrue) data json.loads(result.stdout) print(f{datetime.now().strftime(%Y-%m-%d %H:%M:%S)} 电量{data[percentage]}% 状态{data[status]})保存成py文件后用cron定时跑记得pkg install python装好解释器就行。类似这种思路还能扩展到监控摄像头画面、定时采集温度传感器等场景本质上就是“Linux环境硬件API”的组合拳。6.3 proot-distro、APK重签名等进阶玩法如果玩腻了基础功能Android 6上的Termux还能装Linux发行版。安装proot-distro后可以拉取Ubuntu或Kali的rootfs在Termux环境中跑一个完整的发行版用户态pkg install proot-distro proot-distro install ubuntu proot-distro login ubuntu在Android 6上运行体验要降低预期内存小的设备跑起来会比较吃力CPU占用也偏高但做基础的软件编译和脚本运行还是能凑合的。我实测的结论是Ubuntu发行版的安装和解压时间比新设备多出三分之一以上进入系统后命令响应也有可见延迟当玩具可以当主力工作环境就算了吧。APK重签名也是老生常谈的进阶操作。Termux里装apktool后可以反编译、修改、回编译一个APK再用keytool生成签名密钥、apksigner签名pkg install apktool apktool d app.apk apktool b app -o new.apk keytool -genkey -keystore mykey.jks -alias mykey -keyalg RSA apksigner sign --ks mykey.jks --out signed.apk new.apk这套流程在Android 6上确实能跑但耗时很长一个稍大的APK回编译可能要等几分钟。偶尔玩一次可以不建议作为日常工具大量使用。最后提醒一句Termux是一把功能非常强的瑞士军刀能用它做自动化、做开发、做数据采集但网上一搜一大把的“Termux破解WiFi密码”“Termux查询别人IP”之类的内容既不稳定也存在法律风险完全没有必要碰。我在Android 6上折腾这一圈下来的体会是旧设备不是不能用而是要耐心解决版本兼容和源配置这两个门槛。版本锁定在0.117源换成镜像Termux:API的APK和工具包都装齐、权限给全剩下的使用体验和新版系统没有本质差别。建议把所有配置过程整理成一个shell脚本保存下来下次换旧手机时跑一遍就能快速恢复环境这事我亲身验证过能省下大量重复时间。
返回列表