基于Termux的Android平台C++控制台程序开发指南
编写一个可以在安卓运行的C++控制台程序,并通过termux-app在手机上运行
通过上文《2025年的Android NDK 快速开发入门》想必你已经了解了当下的NDK开发了,今天我想通过一个例子,让你的C++控制台程序直接可以运行在安卓手机上。这样你写的那些运行在PC上的好玩的C++程序,直接无痛的搞到手机上了,还不需要构建真正的安卓应用,是不是有点意思?学习C++的同学们听到此消息都兴奋的不得了!
本文分两部分,第一部分介绍用Android Studio的NDK工具链对我们的C++控制台程序进行编译,生成可执行程序后,传到安卓手机;第二部分使用termux-app将刚刚的程序运行。那么闲话少叙,我们开始吧。
一、C++程序的编译
1. 新创建一个Native项目
打开 Android Studio → New Project → Native C++ 模板。一路下一步即可。
目录结构如下:
我们重点关注cpp目录下,新建一个cpp-demo.cpp.
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
int a, b;
cout << "Please Input two numbers." << endl;
cin >> a >> b;
cout << a << "+" << b << "=" << a + b << endl;
cout << a << "*" << b << "=" << a * b << endl;
return 0;
}
修改CMakeLists.txt文件参考如下:
cmake_minimum_required(VERSION 3.22.1)
project("androidcppdemo")
# 设置 C/C++ 标准
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
# 添加可执行文件
add_executable(${CMAKE_PROJECT_NAME}
cpp-demo.cpp
)
target_link_libraries(${CMAKE_PROJECT_NAME}
# List libraries link to the target library
android
log)
app下的build.gradle.kts参考如下:
defaultConfig {
applicationId = "com.linc.androidcppdemo"
minSdk = 28
targetSdk = 34
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags += "-std=c++17"
abiFilters += "arm64-v8a" // 指定 ABI
}
}
}
externalNativeBuild {
cmake {
path = file("src/main/cpp/CMakeLists.txt")
version = "3.22.1"
}
}
2. 编译
点击菜单 Build → Make Project,生成的二进制文件在 app\build\intermediates\cxx\Debug\4k3c1344\obj\arm64-v8a\androidcppdemo。
注:4k3c1344是随机生成的目录,每次编译会变。
3. 将可执行文件传到手机
有两种方式:
- 通过数据线直接复制到sdcard根目录
- 通过adb push 到sdcard根目录
至此第一部分完成,Android Studio目前是最方便的工具,用好它会提高工作效率。
二、安卓上的运行(通过Termux)
上文中C++编写的是终端程序,通过终端与用户交互,所以我们需要找一个安卓上的终端模拟器运行它。而Termux是Android平台上的开源终端模拟器,个人认为还是非常契合这个场景的。
1. 下载安装termux
直接在github上下载:https://github.com/termux/termux-app/releases
最新版本是v0.119.0-beta.2 - 2025-03-29 07:05
有下载问题可以留言。
正常安装并启动,界面如下:
2. 获取访问SDCard目录权限
启动后默认目录是/data/data/com.termux/files/home, 此时目录下无任何文件,也没有访问其他目录的权限。我们需要执行如下命令来申请sdcard目录权限。
# 获取存储权限(在手机上的termux软件上执行)
termux-setup-storage # 授权后生成/storage目录映射手机存储
授权后生成/storage目录映射手机存储
$ ls
storage
$ cd storage
~/storage $ ls
dcim movies picture downloads music shared
3. 复制程序到termux目录
我尝试了直接在sdcard下执行androidcppdemo,提示没有执行权限,即使授权后也不行。也尝试在CMakeLists.txt中添加如下配置也无用。
# 添加 -pie 选项:很重要,目的是程序可以在任意目录运行
if(ANDROID)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pie")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pie")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie")
endif()
那只好将androidcppdemo复制到termux目录并授权执行权限,运行即可。直接看效果图吧!
cp ~/storage/shared/androidcppdemo .
chmod +x androidcppdemo
./androidcppdemo
至此大功告成!大家可以把用C/C++写过的好玩的控制台小游戏比如恶魔轮盘啦,都可以通过此方法在安卓手机上运行,让别人小羡慕一下!
后面的内容,供有余力的小伙伴更深入些的了解Termux。
三、Termux app介绍
其实Termux的功能远不是简单的终端模拟器,它还有很多强大的功能。下面简单介绍下,让大家了解下神器。
1.Termux概述与技术定位
Termux是Android平台上的开源终端模拟器,通过Proot技术模拟完整的Linux环境,无需Root权限即可运行超过3000个Linux软件包。其核心特性包括:
- 零Root权限:基于Android沙箱机制运行,通过Proot容器技术实现文件系统隔离
- 跨平台开发支持:支持Python、Node.js、C/C++、Java等主流开发环境,兼容VS Code远程开发
- 完整包管理:内置APT包管理系统,提供超过900个预编译软件包,覆盖网络工具(nmap/wget)、编辑器(vim/emacs)、服务器(nginx/redis)等
- 硬件集成:通过Termux API调用手机传感器、摄像头等硬件设备
相较于传统虚拟机方案,Termux在资源占用(最低500MB存储、1GB内存)和启动速度(秒级启动)方面具有显著优势,已成为移动端渗透测试、边缘计算和应急开发的重要工具。
2. 安装与初始化配置
基础环境初始化
# 获取存储权限
termux-setup-storage # 授权后生成/storage目录映射手机存储
# 更新软件源
pkg update && pkg upgrade # 首次执行需等待bootstrap安装
# 安装核心工具
pkg install git wget vim proot # 开发三件套
镜像源优化
国内用户必须替换默认源以解决网络问题:
# 使用清华源(2025年最新版)
sed -i 's@^$$deb.*stable main$$$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main@' $PREFIX/etc/apt/sources.list
sed -i 's@^$$deb.*games stable$$$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/game-packages-24 games stable@' $PREFIX/etc/apt/sources.list.d/game.list
pkg update # 更新源缓存
3. 高级功能实践
完整Linux发行版安装
通过proot-distro实现多系统共存:
# 安装容器管理工具
pkg install proot-distro
# 查看支持的系统
proot-distro list # 显示Debian/Ubuntu/Kali等选项
# 安装Debian
proot-distro install debian # 默认使用bookworm版本
# 启动系统
proot-distro login debian # 进入独立环境
图形化桌面环境
- 方案一:Termux X11
# 安装X11服务
pkg install x11-repo termux-x11
# 启动XFCE桌面
apt install xfce4 tigervnc
vncserver :1 -geometry 1920x1080 # 设置分辨率
通过VNC Viewer连接localhost:5901即可进入桌面环境。
- 方案二:AidLux集成方案
基于Termux二次开发,提供开箱即用的桌面:
wget https://aidlux.com/download/aidlux.apk
termux-open aidlux.apk # 自动安装并启动图形界面
该方案预装VS Code、Jupyter等开发工具,适合快速部署
4. 开发环境配置
Python全栈开发
# 安装Python3.11
pkg install python
# 配置虚拟环境
python -m venv ~/.venv && source ~/.venv/bin/activate
# 安装Jupyter
pip install jupyterlab # 启动命令:jupyter notebook --ip=0.0.0.0
移动端适配:使用Termux:Widget创建桌面快捷方式,一键启动开发服务器。
Node.js Web服务
pkg install nodejs
# 创建Express应用
npm install express
# 示例代码(server.js)
const app = require('express')();
app.get('/', (req, res) => res.send('Termux Server'));
app.listen(3000, () => console.log('Running on port 3000'))
通过ngrok实现公网访问:pkg install ngrok && ngrok http 3000
5. 典型应用场景
渗透测试工具箱
# 安装常用工具
pkg install nmap sqlmap metasploit
# 使用案例
nmap -sV 192.168.1.0/24 # 扫描局域网设备
边缘计算节点
通过Termux API实现传感器数据采集:
# 读取光照强度
termux-sensor -s light | jq .light # 需安装jq工具
# 定时任务
crontab -e # 添加:* * * * * termux-sensor -n 1 >> ~/sensor.log