当前位置: 首页 > 工具软件 > gcc_termux > 使用案例 >

Win10或者Linux系统下使用Termux环境开发Android软件

法烨烨
2023-12-01

Termux

Termux相当于一个Linux发行版,可以使用Termux的APP,在手机上运行一个Bash环境,在其中使用GCC/Clang编译软件。Termux支持包管理。

我这里主要使用Termux开发动态库。Termux自带的软件包,里面包涵的动态库是可以在APP中直接使用的。

 

Termux有4种CPU架构的版本:x86_64、i686、armhf(应该是没有再维护)、arm64(aarch64)。在Android的X86虚拟机下使用的通常是i686版本的Termux,编译出来的也是i686指令的elf文件。Termux目前还没有multiarch支持,不能交叉编译不同平台上的动态库。

我本身倾向用arm64版本的。在Win电脑上使用WSL2或者VMware,可以运行一个Linux环境。我使用Debian 10,通过qemu-static软件包,在Linux下可以支持执行arm64的elf文件。

在手机上安装Termux软件,进入软件后,将以下的文件夹打包拷贝到Linux环境下。

/system/etc
/system/bin
/system/lib64
/system/usr
/apex/com.android.tzdata
/apex/com.android.runtime
/data/data/com.termux/files/usr
/data/data/com.termux/files/cache

将上述的目录复制为

$HOME/termux/system
$HOME/termux/apex
$HOME/termux/data

使用sudo在Linux的根目录下为上述的3个上当创建软链接:

lrwxrwxrwx   1 root       root     29 22月 23 10:57 apex -> /home/xxx/termux/apex/
lrwxrwxrwx   1 root       root     28 22月 23 10:57 data -> /home/xxx/termux/data
lrwxrwxrwx   1 root       root     30 22月 23 10:57 system -> /home/xxx/termux/system

安装qemu-static与binfmt软件包

执行

/data/data/com.termux/files/usr/bin/bash

bash需要专用的环境变量,一个样例如下:

export HOME=/data/data/com.termux/files/home
export TMPDIR=/data/data/com.termux/files/usr/tmp
export PATH=/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets
export ANDROID_ROOT=/system
export LANG=en_US.UTF-8
export LD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so
export PREFIX=/data/data/com.termux/files/usr
export SHELL=/data/data/com.termux/files/usr/bin/bash
export ANDROID_ROOT=/system
export ANDROID_TZDATA_ROOT=/apex/com.android.tzdata
export LD_LIBRARY_PATH=/apex/com.android.runtime/lib64/

这样就可以在Linux环境下使用aarch64版本的termux生产软件了。

 

其他问题

DNS

Android的DNS解析使用/dev/socket/dnsproxyd,需要使用的域名写入

/system/etc/hosts 

GoLang出错

GoLang运行时可能有问题,试着使用下面的方法,二选一

export GOMAXPROCS=1
export GODEBUG=asyncpreemptoff=1

Clang出错

可能与CFLAGS中的-g选项有关,去掉-g。

 类似资料: