Termux 是 Android 上的一個非常強大的終端模擬器。強大之處在于支持使用 apt 安裝 zsh瘸味、git、vim够挂、python旁仿、ruby、nodejs孽糖、openssh枯冈、gcc、golang 等幾乎所有常用的終端軟件办悟,從此不用忍受功能孱弱的 busybox尘奏。
目前 termux 源中有 400 多個包,顯然還有很多不那么常用的沒有覆蓋到病蛉,除了在 Issues · termux/termux-packages 上反饋外炫加,自己編譯也是個不錯的主意。但目前相關文檔比較匱乏(主頁的 Readme 有錯誤)铺然,一不留神就會將簡單的事情復雜化俗孝,耽誤時間,故整理此文魄健。
需要注意的是赋铝,雖然 Termux 包使用的是 deb 格式,但無需使用基于 Debian 或者 Ubuntu 的發(fā)行版沽瘦。
主頁的 Readme 提供了兩種方式革骨,一種是使用 Docker 中的 Ubuntu 鏡像农尖,一種是直接在 Ubuntu 搭建環(huán)境。
我圖省事先用的 Docker 方式苛蒲,雖然看起來很簡單卤橄,只需要執(zhí)行兩條命令绿满,但我折騰了幾十分鐘也沒搞定臂外。
因為執(zhí)行 docker build --rm=true -t termux .
后會安裝和升級大量(1G 左右)的包,默認的官方源速度是很不給力的喇颁。這樣或者修改 Dockerfile
修改源漏健,或者直接手動進 Docker 里操作。這就不是兩條命令的事情了橘霎,需要對 Docker 比較熟悉蔫浆。我選擇直接手動進 Docker 里操作。在安裝過程中姐叁,我發(fā)現(xiàn)安裝了大量看起來沒有用的包瓦盛,占用了大量空間。同時我看了下 build-package.sh
腳本外潜,發(fā)現(xiàn)并沒有依賴 Ubuntu 特有的命令原环,于是改用直接在 Archlinux 里搭建環(huán)境,這樣能節(jié)省很多時間处窥。
大概看了下幾個腳本嘱吗,發(fā)現(xiàn)步驟很簡單:
- 下載 termux-packages (
git clone https://github.com/termux/termux-packages.git
)。 - 安裝 android-ndk滔驾。下載 http://dl.google.com/android/android-sdk_r24.3.4-linux.tgz 谒麦,解壓到 $HOME/lib/android-ndk (該目錄下有 source.properties 文件)。(android-sdk 通常不需要哆致,如需要绕德,方法類似)
- 創(chuàng)建 /data/data/com.termux/files/usr 目錄,并把 /data 的屬主改成當前用戶摊阀。
- 進入 termux-packages 迁匠,就可以直接用
./build-package.sh packagename
編譯包了(如果提示命令找不到,安裝對應的包即可)驹溃。
搭建完可以隨便編譯一個包試試:
$ ./build-package.sh bc
termux - building bc...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 283k 100 283k 0 0 12885 0 0:00:22 0:00:22 --:--:-- 74740
sed: no input files
configure: WARNING: If you wanted to set the --build type, don't use --host.
If a cross compiler is detected then cross compile mode will be used.
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
...
make[2]: Leaving directory '/home/goreliu/termux/bc/build'dc''
make[1]: Leaving directory '/home/goreliu/termux/bc/build'-- "/data/data/com.termux/files/usr/bin"
termux-elf-cleaner: Removing the DT_VERNEEDED dynamic section entry from './bin/bc'
termux-elf-cleaner: Removing the DT_VERNEEDNUM dynamic section entry from './bin/bc'
termux-elf-cleaner: Removing the DT_VERNEEDED dynamic section entry from './bin/dc'
termux-elf-cleaner: Removing the DT_VERNEEDNUM dynamic section entry from './bin/dc'/files/usr/info"
termux - build of 'bc' done
因為 build-package.sh
這個腳本寫得比較渣城丧,可能提示一些錯誤,但不影響功能豌鹤,編譯出來了亡哄。結果在 $HOME/termux/_deb/bc_1.06.95-1_arm.deb
。
這里需要注意的是 build-package.sh
編譯的是 32 位 arm 版本布疙,如果需要的不是這個蚊惯,可以直接改 build-package.sh
愿卸,將
: ${TERMUX_ARCH:="arm"} # (arm|aarch64|i686|x86_64) - the 64 bit variants do not work yet
里的 "arm"
改成后邊括號內(nèi)的,比如 aarch64 是64 位 arm 的截型。
還有因為 android-ndk 目錄體積巨大趴荸,在編譯完一個包后,這個目錄的同級目錄下會產(chǎn)生一個類似 android-standalone-toolchain-aarch64-api21-gcc4.9 的目錄宦焦,然后我們就可以只保留 android-ndk 下的 source.properties 文件发钝,將該目錄其他文件刪除(試驗如此,保險的話還是先保留)波闹。
驗證沒問題了酝豪,我們就可以添加源里沒有的包了,拿 atool 舉例:
新建 termux-packages/packages/atool 目錄精堕,在該目錄創(chuàng)建 build.sh 文件孵淘,內(nèi)容如下:
TERMUX_PKG_HOMEPAGE=http://www.nongnu.org/atool
TERMUX_PKG_DESCRIPTION="A script for managing file archives of various types"
TERMUX_PKG_VERSION=0.39.0
TERMUX_PKG_BUILD_REVISION=1
TERMUX_PKG_SRCURL=https://savannah.nongnu.org/download/atool/atool-${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_DEPENDS="file, perl"
TERMUX_PKG_PLATFORM_INDEPENDENT=yes
這些字段都比較簡單,參考 termux-packages/packages 下的例子就可以寫出來(有疑問的話歹篓,可以看 build-package.sh 腳本的實現(xiàn))瘫证。
然后在 termux-packages 目錄運行 ./build-package.sh atool
就可以了。
付費解決 Windows庄撮、Linux背捌、Shell、C重窟、C++载萌、AHK、Python巡扇、JavaScript扭仁、Lua 等領域相關問題,靈活定價厅翔,歡迎咨詢乖坠,微信 ly50247。