Termux配置安卓编译环境

前言

Termux安装后,就相当于把手机变成了一台Linux服务器,而且现在手机卡通常是能拿到ipv6公网地址的,所以,这个服务器能干啥?

  • 编程
  • 搭建网站
  • 跑脚本

本文讲述的就是怎么在Termux搭建安卓编译环境,实现手机app自产自编,自己搞自己,脱离电脑搞app开发。

Step1 配置sdkmanager

打开android 官网,下载sdkmanager最新版,推送到Termux中,创建android sdk 保存目录,解压commandline-tools并进行调整,参考android sdk标准目录,把解压内容都放到latest中。

不要直接解压,这个commandline-tools解压后不是标准目录。

标准的sdk目录是这样的

脚本执行处理:

bash 复制代码
curl -O https://googledownloads.cn/android/repository/commandlinetools-linux-11076708_latest.zip

ANDROID_HOME=~/android/sdk/
mkdir -p $ANDROID_HOME
unzip `ls |grep "commandlinetools-linux.*_latest.zip"` -d $ANDROID_HOME
# cmdline-tools 的产物需要移动到cmdline-tools/latest目录中,这是android sdk固定的路径组织形式
# 压缩包没有包含在latest文件夹中,自己移动一下
mv $ANDROID_HOME/cmdline-tools/* $ANDROID_HOME/latest
mv $ANDROID_HOME/latest $ANDROID_HOME/cmdline-tools

啥,命令有点多,手指打字累死

那还是连接个蓝牙键盘吧,打开手机otg功能,就可以自由输入了,啥,你没有蓝牙键盘?没事,淘宝几元一个usb otg转接头,把键盘插到手机上也可以。

啥?都没有,那你还是开启sshd服务,电脑连接手机吧,可以参考作者前一篇文。

Step2 配置android环境变量

命令

bash 复制代码
vim ~/.bashrc

配置:

bash 复制代码
echo "用户:"$(whoami)
 
if pgrep -x "sshd" >/dev/null
  then
   echo
   #echo "sshd运行中..."
  else
    sshd
    echo "自动启动sshd"
fi
export ANDROID_HOME=~/android/sdk
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$PATH

执行source .bashrc 更新环境变量,使之生效

不生效就干掉Termux,重新打开。

Step3 下载android sdk开发工具

sdkmanager下载之后不代表弄完了android开发环境,这个sdkmanager仅仅是个管理sdk的命令行工具,它是用来下载、更新、移除安卓sdk的。

所以,通过它安装目前最新的安卓版本开发工具吧:

bash 复制代码
#查看sdk列表
sdkmanager --list
#安装安卓14平台开发工具
sdkmanager --install "platforms;android-34"
#安装支持安卓14的构建工具
sdkmanager --install "build-tools;34.0.0"

Step3 配置Java环境

Termux显然不能直接安装android studio来使用,所以需要我们自己配置java环境(当然,你又在Termux中安装ubutun当我没说)

Termux 官方的jdk是17,比较新,正常来说,本文发布时安卓开发用得最多的是jdk11,jdk17部分老项目无法编译。

但是jdk11的Termux兼容版本被原作者干掉了,所以,想折腾的兄弟去github再找找吧,不行就自己编译。

不用纠结,上jdk17,编译不了的项目,给它升级!

Termux安装jdk17一条命令即可:

bash 复制代码
pkg install openjdk-17

哈哈哈,啊啊啊~你仰天大笑一声,竖子!敢尔。你以为不过如此,和linux平台搞环境一毛一样,于是你匆匆忙忙安装git,然后迫不及待地下载一个项目来编译,结果编译失败,你傻眼了。

Step5 安卓sdk环境修复

第一个异常

你的操作过程如下:

bash 复制代码
# 下载一个git项目
git clone xxxx.git
cd xxxx
# 赋予gradle脚本执行权限
chmod +x ./gradlew
./gradlew build

你得到的错误如下:

原因很简单,环境变量ANDROID_HOME没配置???什么,之前不是配置了吗?你不管了,你知道Termux和正常的Linux还是有区别的,于是vim local.properties 编辑文件,指定了

bash 复制代码
# 写全路径,不写$ANDROID_HOME,读不到
sdk.dir=/data/data/com.termux/files/home/android/sdk

再然后,编译,你又傻眼了

第二个异常

你观察发现,似乎报错是说这个错误正常不应该出现。所以是sdk异常?

问谷歌,你找到了原因,原来是google编译的安卓sdk没有arm版本,而现代手机通常都是arm-v8-64架构。

github一番,你千辛万苦找到了sdk工具的各种架构版本:
https://github.com/lzhiyong/android-sdk-tools/releases/tag/34.0.3

https://github.com/lzhiyong/android-sdk-tools/releases/download/34.0.3/android-sdk-tools-static-aarch64.zip

https://github.com/lzhiyong/android-sdk-tools/releases/download/34.0.3/android-sdk-tools-static-arm.zip

https://github.com/lzhiyong/android-sdk-tools/releases/download/34.0.3/android-sdk-tools-static-i686.zip

https://github.com/lzhiyong/android-sdk-tools/releases/download/34.0.3/android-sdk-tools-static-x86_64.zip

你选择了arm版本下载,按照指引将其解压到sdk对应的目录,并覆盖掉。

命令:

bash 复制代码
curl -O https://github.com/lzhiyong/android-sdk-tools/releases/download/34.0.3/android-sdk-tools-static-arm.zip

unzip android-sdk-tools-static-arm.zip -d ./armtools
# 下载的是34版本的,所以,覆盖到34版本的目录
cp -p ./armtools/build-tools/*  ~/android/sdk/build-tools/34.0.0
cp -p ./armtools/platform-tools/*  ~/android/sdk/platform-tools 

再次编译项目,你懵逼了,怎么还是一样的错误?你不禁深深地怀疑人生。

经过一个香烟的思考时间后,你终于把目光看向这一行报错代码:
/data/data/com.termux/files/home/.gradle/caches/transforms-4/2e9d53eb8f30ecd552adf0fe0f14f8c5/transformed/aapt2-8.4.0-alpha07-11315950-linux/aapt2[2]: syntax error: unexpected '('

这说明.gradle下存在一个aapt2,gradle编译的时根本没拿sdk目录的aapt 文件?

你进到报错的目录一看,果然如此!

你不禁跃跃欲试:"大胆点?我直接把这个gradle路径下的aapt2替换掉?"

说干就干。

因为sdk目录的aapt2已经被替换了,所以,你直接命令行覆盖报错:

bash 复制代码
# 注意,因为gradle草丹的缓存机制,每个人甚至每个项目的路径都不一样,请按照自己报错的路径进行替换
cp -f ~/android/sdk/build-tools/34.0.0/aapt2 /data/data/com.termux/files/home/.gradle/caches/transforms-4/2e9d53eb8f30ecd552adf0fe0f14f8c5/transformed/aapt2-8.4.0-alpha07-11315950-linux/aapt2

再次编译,./gradlew assembleDebug

Good good study, day day up.

Success!

可以愉快地去安装apk了。

Setup6 安装apk到手机中

编译已经完成,我相信,大家可以随意拖apk出来,然后点击安装了。

不外呼:cp ./app/build/outputs/apk/debug/app-debug.apk /sdcard/

然后打开手机,去点击安装嘛。

不过,现在我要介绍的是,执行adb安装到本手机上。

adb在sdk的platform-tools下,将其添加到环境变量中,以便运行

bash 复制代码
echo "用户:"$(whoami)
 
if pgrep -x "sshd" >/dev/null
  then
   echo
   #echo "sshd运行中..."
  else
    sshd
    echo "自动启动sshd"
fi
export ANDROID_HOME=~/android/sdk
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH

如果,我是说如果你是普通运用,只想用adb安装东西,不想安装sdk那么繁琐,完全可以执行命令安装pkg install android-tools

这会安装一个旧版本的安卓开发工具包,包含adb。

接下来就是重头戏。平时我们都是电脑调式手机,现在如何让手机自己调试自己呢?

换个角度,平时电脑执行adb,相当与Termux现在是电脑,如何让手机开启调式后,连上自己呢?

我们可以通过开启wifi调试来使Termux中的adb连接到手机本身

具体步骤:

  • 手机和电脑同一个局域网,且连接USB到电脑
  • 手机开启wifi调试模式
  • 获取wifi调试地址,命令连接:adb connect xxxxx:xxx

以上是针对android11及以上手机,如果是安卓10以以下的手机:

  • adb tcpip 6666 开启手机调式端口,6666
  • 打开Termux,·adb connect 手机ip:6666· 即可连接
  • 拔掉USB。正常在Termux使用adb调式

和一般的adb wifi调试没有任何区别

针对远程云手机,又是什么情况呢?

不通过adb显示画面的远程云机

直接在Termux操作就行,但不一定能开启,因为低于安卓11的手机,需要USB线连接电脑后才能执行命令打开wifi连接,但远程云机基本都是虚拟机,根本没有USB这回事儿。

通过adb显示画面的远程云机

  • 由于adb连接地址本身就Termux尝试通过
相关推荐
努力努力再努力wz35 分钟前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表
Jurio.1 小时前
开源 Codex Sticky:在终端 Codex CLI 长对话中始终固定底部输入框
linux·rust·github·开源软件·codex·codex cli
无足鸟ICT1 小时前
【RHCA+】撤销和恢复撤销快捷键
linux
质造者1 小时前
LangChain + Ollama + Tavily 实现旅游问答系统
linux·人工智能·python·langchain·rag
潘潘潘1 小时前
Android网络结构分析——有线网络
android
踏雪羽翼2 小时前
Android OpenGL实现十几种美颜功能
android
starvapour2 小时前
Ubuntu部署gitlab频繁出现502的问题
linux·ubuntu·gitlab
zhangfeng11333 小时前
ps aux讲解,结合国家超算中心 hpc apptainer
linux·服务器·网络
夜月yeyue3 小时前
STM32 DMA 双缓冲采样
linux·stm32·单片机·嵌入式硬件·系统架构
ScilogyHunter3 小时前
Buildroot完全指南:从入门到实战
linux·嵌入式·buildroot