Termux 应用程序
Termux 是一个 Android 终端应用程序和 Linux 环境。
请注意,这个仓库是针对应用程序本身(用户界面和终端模拟)。关于应用内可安装的软件包,请参阅 termux/termux-packages。
Termux 包管理的快速指南可在 包管理 查看。其中还包含了如何修复运行 apt
或 pkg
命令时出现的 repository is under maintenance or down
错误的信息。
我们正在寻找 Termux Android 应用程序的维护者。
注意:Termux 在 Android 12+ 上可能不稳定。 Android 操作系统会终止超过 32 个的任何(幻影)进程(限制适用于所有应用程序的总和),并且还会终止使用过多 CPU 的任何进程。您可能会在终端中看到 [Process completed (signal 9) - press Enter]
消息,而实际上您并未自己退出 shell 进程。请查看相关问题 #2366、问题追踪器、幻影缓存和空进程文档 以及 这个 TLDR 评论,了解如何禁用幻影和过度 CPU 使用进程的修剪。稍后将添加适当的文档页面。Android 12L 或 13 中应该会提供禁用终止的选项,所以如果您使用的是 Android 11,特别是如果您没有 root 权限,请自行权衡升级风险。
目录
Termux 应用和插件
核心 Termux 应用附带以下可选插件应用。
安装
最新版本是 v0.118.0
。
注意:强烈建议您尽快更新到 v0.118.0
或更高版本,以修复各种错误,包括 此处 报告的严重的世界可读漏洞。关于 Google Play 上的 Termux 信息,请参见 下文。
Termux 可以通过以下列出的各种来源获得,仅适用于 Android >= 7
,并完全支持应用和软件包。
对 Android 5
和 6
的应用和软件包支持于 2020-01-01 在 v0.83
版本中停止,但仅针对应用的支持(不支持软件包更新)于 2022-05-24 通过 GitHub 源重新添加。详情请查看 这里。
不同来源的 APK 文件使用不同的签名密钥签名。Termux
应用及其所有插件使用相同的 sharedUserId
com.termux
,因此安装在设备上的所有 APK 必须使用相同的签名密钥签名才能一起工作,所以它们必须全部从同一来源安装。不要尝试混合使用它们,即不要尝试从 F-Droid
安装一个应用或插件,而从其他来源(如 GitHub
)安装另一个。Android 包管理器通常也不允许安装具有不同签名的 APK,安装时会出现诸如 应用未安装
、由于未知错误而安装失败
、INSTALL_FAILED_UPDATE_INCOMPATIBLE
、INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
、签名与先前安装的版本不匹配
等错误。只有通过 root 或自定义 ROM 才能绕过这一限制。
如果您希望从不同的来源安装,那么您必须首先从您的设备上卸载所有现有的Termux或其插件应用的APK,然后从同一个新来源安装所有新的APK。有关详细信息,请查看卸载部分。在卸载之前,您可能还想考虑备份Termux,以便在从不同来源重新安装Termux后可以恢复它。
在接下来的段落中,"bootstrap"指的是与termux-app
本身一起提供的最小软件包,用于启动一个可工作的shell环境。其压缩包在此处构建和发布。
F-Droid
Termux应用可以从这里的F-Droid
获取。
您不需要下载F-Droid
应用(通过"下载F-Droid"链接)来安装Termux。您可以通过点击每个版本部分底部的"下载APK"链接直接从网站下载Termux APK。
通常,一旦GitHub
上发布了更新,需要几天(甚至一周或更长时间)更新才能在F-Droid
上可用。F-Droid
版本是由F-Droid
在检测到新的GitHub
发布后构建和发布的。Termux维护者无法控制F-Droid
上Termux应用的构建和发布。此外,Termux维护者也无法访问F-Droid
发布版本的APK签名密钥,因此我们无法在GitHub
上自行发布与F-Droid
发布版本兼容的APK。
F-Droid
应用通常可能不会通知您更新,您需要在应用的"更新"标签中手动下拉刷新来检查更新。确保为该应用禁用了电池优化,有关如何操作的详细信息,请查看https://dontkillmyapp.com/。
只发布一个通用APK,它可以在所有支持的架构上运行。APK和bootstrap安装大小将为~180MB
。F-Droid
不支持特定架构的APK。
GitHub
Termux应用可以在GitHub
上从GitHub Releases
(适用于版本>= 0.118.0
)或GitHub Build Action
工作流程获取。对于android >= 7
,只安装apt-android-7
变体。对于android 5
和6
,只安装apt-android-5
变体。
GitHub Releases
的APK将列在发布版本的Assets
下拉菜单中。这些在发布新版本时会自动附加。
GitHub Build
操作工作流程的APK将列在工作流程运行的Artifacts
部分。这些是为每次对存储库的提交/推送创建的,可供不想等待发布并希望立即尝试最新功能或想要测试其拉取请求的用户使用。请注意,对于操作工作流程,您需要登录GitHub
账户才能启用/点击Artifacts
链接。如果您使用GitHub
应用,请确保在已登录GitHub账户的Chrome或Firefox等浏览器中打开工作流程链接,因为应用内浏览器可能未登录。
这两种APK都是可调试的
,并且彼此兼容,但与其他来源不兼容。
发布了通用和特定架构的APK。如果使用通用APK,APK和bootstrap安装大小将为~180MB
,如果使用特定架构的APK,则为~120MB
。详细信息请查看这里。
安全警告:GitHub上的APK文件使用已与社区共享的测试密钥签名。这不是官方开发者密钥,每个人都可以使用它来生成自己的测试版本。在使用从https://github.com/termux/termux-app以外的地方获得的Termux GitHub构建时要非常小心。任何人都能够使用它来伪造可安装在GitHub构建版本之上的恶意Termux更新。在安装通过Telegram或其他社交媒体分发的Termux构建时要三思。如果您的设备被恶意软件感染,我们将无法帮助您。
测试密钥不应被用来冒充@termux,也无法用于此目的。我们不信任这个密钥,而且很容易在用户生成的内容中检测到它的使用。
密钥库信息
别名: alias
创建日期: 2019年10月4日
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=APK Signer, OU=Earth, O=Earth
发行者: CN=APK Signer, OU=Earth, O=Earth
序列号: 29be297b
有效期自: 2019年9月4日 02:03:24 EEST 至: 2049年10月26日 02:03:24 EEST
证书指纹:
SHA1: 51:79:55:EA:BF:69:FC:05:7C:41:C7:D3:79:DB:BC:EF:20:AD:85:F2
SHA256: B6:DA:01:48:0E:EF:D5:FB:F2:CD:37:71:B8:D1:02:1E:C7:91:30:4B:DD:6C:4B:F4:1D:3F:AA:BA:D4:8E:E5:E1
签名算法名称: SHA1withRSA (已禁用)
主体公钥算法: 2048位RSA密钥
版本: 3
Google Play商店 (实验性分支)
目前在Google Play上有一个适用于Android 11+设备的Termux版本,为了通过政策要求进行了大量调整。这个版本正在开发中,与稳定的F-Droid版本相比功能不完整且存在bug(更新状态请参见这里),因此大多数用户仍应使用上述提到的F-Droid或GitHub版本。
目前,Google Play会尝试将F-Droid安装的版本更新。由于移除了sharedUserId,更新仍会失败。计划中的0.118.1 F-Droid版本将通过设置高于PlayStore应用的版本号来解决这个问题。同时,为防止Google Play尝试下载并安装失败Google Play版本,你可以打开Google Play上的Termux应用页面,点击右上角的3点选项按钮,然后禁用"启用自动更新"开关。但是,Termux应用的更新仍会显示在PlayStore应用更新列表中。
如果你想帮助测试Google Play版本(或无法从其他来源安装Termux),请注意它是从一个单独的仓库(https://github.com/termux-play-store/)构建的 - 请务必在那里报告问题,因为遇到的任何问题很可能是特定于该仓库的。
卸载
如果用户不再想在设备上安装Termux或正在切换到不同的安装来源,可能需要卸载。在卸载之前,你可能还想考虑备份Termux。
要完全卸载Termux,你必须卸载Termux应用和插件中列出的所有现有的Termux或其插件应用APK。
转到Android设置
-> 应用程序
,然后查找这些应用。如果你的设备上有搜索功能,也可以在应用程序列表中搜索termux
。
即使你认为没有安装任何插件,也强烈建议仔细检查Android设置中的应用程序列表。
重要链接
社区
所有社区链接都可以在这里找到。
主要链接如下。
维基
其他
- 常见问题
- Termux文件系统布局
- 与Linux的差异
- 软件包管理
- 远程访问
- 备份Termux
- 终端设置
- 触摸键盘
- Android存储和与其他应用共享数据
- Android APIs
- 将Termux软件包托管从Bintray迁移到IPFS
- 通过
RUN_COMMAND
意图从其他应用在Termux中运行命令 - Termux和Android 10
终端
终端资源
终端仿真器
-
VTE (libvte): 用于GTK+的终端仿真器组件,主要用于gnome-terminal。源代码,未解决问题和所有问题(包括已关闭)。
-
iTerm 2: OS X终端应用。源代码,问题和文档(包括iTerm2专有转义码)。
-
xterm:终端模拟器的鼻祖。源代码。
-
Connectbot:Android SSH 客户端。源代码
-
Android Terminal Emulator:Termux 终端处理基于的 Android 终端应用。已停止维护。源代码。
调试
您可以通过在 Termux 应用设置 -> <APP_NAME> -> 调试 -> 日志级别中设置适当的 logcat 日志级别来帮助调试 Termux 应用及其插件的问题(需要 Termux 应用版本 >= 0.118.0)。日志级别默认为"正常",而"详细"日志级别目前会记录额外信息。完成调试后最好将日志级别恢复为"正常",因为私密数据可能会在正常操作期间传递给 logcat,而且额外的日志记录会增加执行时间。
插件应用不会自行执行命令,而是向 Termux 应用发送执行意图,Termux 应用有自己的日志级别,可以在 Termux 应用设置 -> Termux -> 调试 -> 日志级别中设置。因此,您必须同时设置 Termux 和相应插件应用的日志级别,以获取所有信息。
设置日志级别后,您可以在 Termux 应用终端中运行 logcat 命令实时查看日志(Ctrl+c 停止),或使用 logcat -d > logcat.txt 转储日志。您也可以通过 ADB 从 PC 查看日志。更多信息,请查看官方 Android logcat 指南此处。
此外,用户还可以通过终端长按选项菜单中的"更多" -> "报告问题"选项,并在显示的提示中选择"是"来添加调试信息,自动生成 Termux 文件统计信息和 logcat 转储。这对报告和调试其他问题很有帮助。如果生成的报告太大,可以使用"报告活动"上下文菜单(右上角 3 个点)中的"保存到文件"选项,然后查看/共享该文件。
用户在报告问题时必须发布完整报告(可选择不包含敏感信息)。使用**(部分)错误报告截图**而不是文本打开的问题可能会被自动关闭/删除。
日志级别
- "关闭" - 不记录任何内容。
- "正常" - 开始记录错误、警告和信息消息以及堆栈跟踪。
- "调试" - 开始记录调试消息。
- "详细" - 开始记录详细消息。
对于维护者和贡献者
termux-shared 库在 v0.109 中添加。它定义了 Termux 应用及其插件的共享常量和工具。创建它是为了允许删除 Termux 应用中的所有硬编码路径。一些 Termux 插件也在使用它,其余的将来也会使用。如果您正在贡献使用可能共享的常量或工具的代码,那么如果它当前不存在,请在 termux-shared 库中定义它,并从那里引用它。同时更新相关的更新日志。使用硬编码值的拉取请求不会/不应该被接受。Termux 应用和插件特定的类必须添加在 com.termux.shared.termux 包下,一般类则添加在外部。在贡献代码时,还必须检查并在必要时更新 termux-shared 许可证。必须遵守任何外部库或代码的许可证。
主要的 Termux 常量由 TermuxConstants 类定义。它还包含有关如何分叉 Termux 或使用您自己的包名构建它的信息。更改包名将需要使用新的 $PREFIX 构建引导 zip 包和其他包,查看构建包以获取更多信息。
查看 Termux 库 了解如何在插件应用中导入 Termux 库,以及分叉和本地开发 了解如何更新插件的 Termux 库。
Termux 及其插件应用的 build.gradle 文件中的 versionName 必须遵循 语义版本 2.0.0 规范,格式为 major.minor.patch(-prerelease)(+buildmetadata)。在 build.gradle 文件中更新 versionName 并在 GitHub 上为新版本创建标签时,请确保包含补丁号,如 v0.1.0 而不仅仅是 v0.1。build.gradle 文件和 attach_debug_apks_to_release 工作流也会验证版本,如果 versionName 不符合规范,构建/附加将失败。
提交信息指南
提交信息必须使用 Conventional Commits 规范,以便可以由 create-conventional-changelog 脚本自动生成符合 Keep a Changelog 规范的更新日志,查看其仓库以获取有关规范的更多详细信息。**type 和 description 的首字母必须大写,描述应使用现在时态。**冒号 : 后的空格是必需的。对于破坏性更改,在冒号 : 之前添加感叹号 !,以便在更新日志中自动突出显示。
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
**只能使用下面列出的 types,它们与更新日志标题中使用的完全一致。**例如,Added: Add foo, Added|Fixed: Add foo and fix bar, Changed!: Change baz as a breaking change 等。您还可以选择添加范围,如 Fixed(terminal): Fix some bug。不要使用任何其他内容作为类型,例如使用 add 而不是 Added 等。
- 新增:用于新功能。
- 变更:用于现有功能的变更。
- 弃用:用于即将移除的功能。
- 移除:用于已移除的功能。
- 修复:用于任何错误修复。
- 安全:用于处理漏洞。
分支
- 查看
TermuxConstants
的 javadoc,了解更改应用程序包名时需要进行哪些修改。 - 你还需要为新的包名重新编译引导程序压缩包。请查看构建引导程序,这里和这里。
- 目前,并非所有插件都使用
termux-shared
库中的TermuxConstants
,有些插件中硬编码了com.termux
的值,需要手动修改。 - 如果分支 Termux 插件,请查看分支和本地开发,了解如何为插件使用 Termux 库。