用Termux来开启安卓新姿势

Termux是安卓平台上的终端模拟器,用极小的体积提供了Linux环境,适合用来进行轻量的移动学习和开发。

我接触Termux前还玩过AIDE、qpython等。AIDE确实在开发App上有一定可行性,但收费,而且仅限于开发安卓应用;qpython基本只能跑python,提供的终端也不是很好用。Termux则提供了一个通用的Linux终端环境,可以更自由地学习Linux和各种编程语言。

然而需要强调的是,Termux原生仅仅提供了最基本的终端环境,不能完全模拟PC环境,而且外设也不适应开发,用手机或平板取代PC开发是很不方便的。因此,Termux更多是给像我一样喜欢折腾的人玩的,实用性并不大。

如果你准备好了,那就开始享受玩机的乐趣吧~

准备使用

安装Termux

进入Termux官网,你可以看到软件的介绍以及下载地址。
软件不要求root环境,但需要安卓7以上版本(当然鸿蒙也可以)。目前github和F-Droid国内都是可以访问的,不过F-Droid可能会更通畅些。

配置环境

打开软件,屏幕左侧边缘右滑可以打开终端列表(带手势导航就麻烦了QAQ),而主体内容就是终端界面了,点击即可输入指令。另外Termux还很贴心地附赠了特殊字符输入栏哦OwO

为了让后续操作更顺畅,接下来需要进行apt换源,如果需要也可以顺便获取储存权限和开启ssh服务。

apt 换源

apt是Debian系Linux通用的包管理器,Windows用户可以理解为应用商店。apt使用起来方便快捷,但默认的官网软件源实在缓慢,需要更换到国内镜像源。

网上很多教程介绍的是Linux通用的方式,通过修改apt配置文件来换源,然而这很繁琐。幸运的是Termux对换源提供了封装,输入termux后按几次Tab键显示可用命令,你就会发现termux-change-repo,输入更多字符(比如termux-c)来明确你想要执行的命令,然后再次Tab完成补全,回车执行后跟着指引走选择中国镜像源组或者单独选tuna清华源均可。确认后应该会自动更新本地软件列表,注意看弹出来的说明,有时是需要输入y来确认操作的。

另外,上面补全时看到很多termux开头的命令,这些都是Termux提供的工具,可以通过名字猜测或者带--help执行命令查看工具说明(比如termux-change-repo --help

获取储存权限

安卓系统将外存分为系统空间、私密空间和公共空间,系统空间没有root权限不能访问,私密空间仅供应用自己访问,公共空间可供所有申请过权限的应用访问。为了备份数据、向手机其他应用传递数据、访问视频图片等,你可以选择通过执行termux-setup-storage来获取存储权限。

开启ssh服务

如果觉得在手机上操作不太方便而且动手能力强,可以尝试开启ssh服务通过电脑连接终端。ssh具体是什么请百度,简单来说就是远程终端,为此你需要:

  1. 安装openssh
    输入apt install openssh,确认后一般即可完成安装
  2. 设置密码
    ssh也支持更高级的加密,不过密码是最简单快捷的,输入passwd即可设置用户密码
  3. 启动sshd服务
    输入sshd即可开启sshd服务,默认端口8022。如无意外终端不会输出任何信息。你可以输入top命令在ARGS列看到sshd的进程(看不到的可以双指缩放或者旋转屏幕),按ctrl+c可以结束命令。想结束服务就关闭软件并杀后台,或者记下top里sshd的pid,用kill pid的方式结束进程。
  4. 连通网络
    这大概是最难的一步了,需要对计算机网络有一定了解。。你需要让电脑和手机处于同一子网内,还需要避开校园网对低段位端口的封锁。方便起见,你可以用手机开热点,这样电脑连上热点后即处于统一子网内了。接下来要获取手机ip地址。输入ifconfig查看当前网络环境,一般你的手机会连接多个网络,热点应该是p2p开头的,inet后面即手机在热点网络中的ip地址,记下来。
  5. ssh登陆
    在电脑终端中输入ssh *ip地址*,确认后输密码即可连接Termux。需要注意的是要保持手机亮屏(调息屏时间)且处于Termux界面,否则可能会被手机杀后台。当然,这很麻烦(也不环保),不过禁用电池优化有很多步骤,比如在设置里打开保持息屏网络连接,在应用中心禁止自动关闭Termux后台等

安装常用软件

依次输入以下命令,安装常用软件:

1
2
3
4
~ $ apt install vim         # 安装文本编辑器vim
~ $ apt install python # 安装Python,至少也是个计算器
~ $ apt install g++ # 你忠实的GNU C++套件,开发C++程序需要
~ $ apt install git # 版本管理工具git,方便同步工作

其他软件也可以用类似方式安装,用apt help可以查看更多apt小知识哦~

图形界面?

Termux其实也是支持图形界面的,但。。出来的PC桌面对手机太不友好了,图形甚至不支持GPU渲染。如果你想了解可以参考这个来配置。

学习Linux基本操作

apt install man安装man,接下来的命令都可以用man 命令的方式查看说明

目录操作

Linux的目录是树状结构的,每个文件夹有两个特别的文件夹:.该文件夹,..上一级文件夹,通过ls命令可以查看当前目录文件(夹)。.开头的文件或文件夹都是隐藏的,可以通过ls -a查看。

通过cd可以切换文件夹,比如cd ..可以返回上一级文件夹,当前目录路径可以在$前看到,初始是主页~,其上一级是/data/data/com.termux/files,终端指示会隐藏一部分,用pwd可以显示完整路径。

ls可以发现当前目录有homeusrusr就是GUN/Linux的相关组件所在目录,可以理解为Windows下的C盘,home则类似于桌面(不过很多软件的配置文件也会以因此文件的形式放在里面),Linux会以~代指。而看到当前完整路径,发现与常规Linux不同,系统文件夹不是根目录\,这是因为Termux并非模拟器,其路径与安卓系统是一致的,Termux能访问的也就只有com.termux下的东西。

cd ~回到homemkdir test即可创建test文件夹;ln命令可以创建文件链接,具体可以百度。

文件操作

vim a即可打开a文件,如果不存在则vim会创建。vim分为命令模式、输入模式、底线命令模式。初始为命令模式,按i进入输入模式,输入完后按Esc退出,输入:进入底线命令模式,w保存,q退出,:wq一起就是保存退出。更多vim操作可以搜索。

cat a也可以打开文件,但会直接把所有文件内容输出到屏幕。可以用lesscat a | less的形式(管道)让它不会使整个屏幕刷满,回车继续输出,q退出。如果屏幕被刷满了很难看,用clear清空。

mv a b即可把a路径的文件(夹)变成b路径的文件(夹),当然这个也可以用来改名,比如mv ~/cpp/a.cpp ~/b.cpp同时完成了移动和改名

cp a b可以复制文件

zipunzip可以压缩和解压

rm可以删除文件,加上-r可以删除文件夹,所以 rm -rf / 就是删除整个系统(-f是强制的意思,当然实际上会没有权限)。注意Linux没有回收站,谨慎删除。

其他命令

curl可以“打开”网站(试试curl www.baidu.com),wget可以打开并保存(通常用于下载文件),git clone可以下载项目源代码(去github/gitee逛逛?),ls -lh可以显示更详细的信息

搭建开发环境

python

上面已经安装了python,直接输入命令python即可进入交互模式,运行exit()退出。Termux支持pip安装拓展库,但由于平台兼容性问题,如果库依赖本地代码就需要在本地编译构建,很有可能装个几十分钟然后报错退出。目前发现可用的包有sympy(代数系统),pwntools(pwn手工具,部分需编译,要安装十几分钟分钟,现在好像装不上了QAQ),numpy(需要安装cmake并编译几十分钟),jupyterlabmatplotlibpillow(但需要补全一些运行库,挺麻烦的)。scipypandas等由于某些原因装不上。

C/C++

上面已经安装了g++,接下来就可以用vim a.cpp写代码,然后用g++ a.cpp的形式编译源代码(多个文件参与编译就把要编译的文件都在后面加上)。带上-g参数生成调试信息方便debug,-O2开启优化,-o 文件名可以更改输出文件名。编译完成后当前目录会多出一个绿色的可执行文件(默认叫a.out,不要在意后缀,Linux可执行文件后缀不重要),输入./a.out即可执行。这里需要明确程序路径,这是因为Linux终端查找程序的范围不包括当前文件夹。

gdb a.exe打开gdb调试器。l可以列出源代码,l a.cpp:0形式可指定文件和行号(多文件编译时有用);b接数字可以打断点;r运行程序;n跳过语句(多次执行同一条命令不需要重复输入,直接回车即可);s进入语句;p接表达式打印变量;c继续执行;q退出gdb。

其他语言

Termux支持很多语言,包括Java、nodejs、rust、haskell、golang等,安装方式与普通Linux无异

解锁更多新姿势

利用Jupyter Lab在有图形的IDE上开发

安装python后,用pip install jupyterlab可以安装jupyter lab,这是一个将python代码和markdown注释结合起来的神器ide,由于其通过Web服务器的形式提供GUI,其使用体验除了不能自动打开浏览器外和普通Linux上无异。不过你要先禁止对Termux的电池优化,否则切出Termux后它很快就被休眠乃至清除了(经测试我手机会在十秒后使其休眠)。另外手机显示PC的界面布局很不好看,面向PC的按键系统对触控也很不友好,如果真的要用,建议配合平板和蓝牙键鼠使用。由于Termux很难调用GPU,python库有些也很难装上,所以Jupyter+Python并不太好用(这方面AidLux会更优秀,但它太重了QAQ);貌似Jupyter也支持其他语言,我没试过,也许可以。

利用ffmpeg和Python处理视频图片

开源软件ffmpeg是很多剪辑软件的内核,其功能强大,可以完成音频视频图片的格式转换、裁切、剪辑、打水印等各种操作,但操作完全命令行,比较难学。
Python有pillow库来执行更多图片处理命令,不过因为Termux缺少图形库,这个比较难装。

口袋里的计算机实验室

Termux还可以用来进行一些网络安全或计算机组成原理的实验。比如nmapradara2等软件都是可以使用的

无限的探索空间

总之吧,Termux就是给了你接触安卓底层的机会,你终于可以不用被App开发者牵着鼻子走啦!接下来,用Termux搭服务器之类的无限潜力就可以由我们慢慢发掘探索啦!