如何在adb shell环境下编译运行C/C++命令行程序
结论
你提到的两类操作都可以在安卓adb shell环境下正常实现,具体说明如下:
1. C/C++ 编译环境配置
安卓系统默认没有预装gcc、clang这类编译工具,你可以通过两种方式搭建本地编译环境:
- 安装Termux终端应用,直接在Termux内执行
pkg install clang或pkg install gcc即可安装完整的编译工具链,编译生成的都是原生安卓命令行二进制程序,无需打包为APK,既可以在Termux内直接运行,也可以放到adb shell环境下执行。 - 不想额外安装应用的话,也可以使用安卓NDK交叉编译工具链在电脑端提前编译好
gcc/clang的静态二进制包,推送到手机的/data/local/tmp这类有可执行权限的目录后,就可以直接在adb shell中调用编译C/C++代码。
注意:不要把编译好的二进制程序放到内置存储(sdcard)目录下运行,安卓默认给内置存储挂载了noexec参数,无法直接执行存储在内置存储的二进制文件。
2. 标准库与系统调用支持
- C标准库:安卓默认使用自研的Bionic C库,和桌面Linux常用的glibc有少量接口差异,但绝大多数C标准函数都可以正常使用,编译时开启静态编译把依赖打包进二进制,基本不会出现兼容问题。
- 系统调用与文件操作:
fork()、exec()、kill()这类经典POSIX系统调用安卓完全支持,文件描述符的打开、读写、复制等常规操作和普通Linux系统逻辑完全一致,普通用户权限下的常规使用没有任何限制。 - 权限限制:部分涉及访问其他应用私有目录、修改系统配置的高权限操作,会受到安卓SELinux规则的限制,需要提前获取root权限或者修改对应SELinux规则才能正常执行。
内容的提问来源于stack exchange,提问作者Galaxy
相关产品推荐
相关产品推荐

