当前位置: 首页 > news >正文

基于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. 将可执行文件传到手机

有两种方式:

  1. 通过数据线直接复制到sdcard根目录
  2. 通过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

相关文章:

  • 速盾:高防CDN的原理和高防IP一样吗?
  • yum的基本操作和vim指令
  • 深翻页问题剖析与解决方案:原理与 Java 实践
  • 链表-算法小结
  • Pytorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(一)
  • 《LNMP架构+Nextcloud私有云超维部署:量子级安全与跨域穿透实战》
  • 手动部署内网穿透
  • 有序数组的平方
  • 【云安全】云原生-centos7搭建/安装/部署k8s1.23.6单节点
  • 【开源项目】Excel手撕AI算法深入理解(二):Transformer
  • 头歌educoder——数据库 第10-11章
  • 对自己的优缺点评价
  • 导入 Excel 批量替换文件夹名称
  • MySQL 分区与分库分表策略
  • 【场景应用6】Autoformer在时间序列预测任务中的应用
  • LangGraph——Agent AI的持久化状态
  • 038-flatbuffers
  • ngx_set_worker_processes
  • 考研数据结构之串的模式匹配算法——KMP算法详解(包含真题及解析)
  • 回顾CSA,CSA复习
  • 中方在世贸组织对美国“对等关税”表达关注,呼吁维护多边主义
  • 中国与东盟十国全面完成中国—东盟自贸区3.0版谈判
  • 渝昆高铁云南段路基土石方工程已完成97%,桥隧施工完成超90%
  • 中方敦促美国停止将溯源问题政治化
  • IPO周报|本周2只新股申购,比亚迪、上汽“小伙伴”来了
  • 世卫大会中国代表团:中国深入参与全球卫生治理,为构建人类卫生健康共同体贡献中国力量