Termux配置安卓编译环境

news2024/10/6 14:27:44

前言

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

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

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

Step1 配置sdkmanager

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

标准的sdk目录是这样的
在这里插入图片描述

脚本执行处理:

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环境变量

命令

vim ~/.bashrc

配置:

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的。

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

#查看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一条命令即可:

pkg install openjdk-17

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

Step5 安卓sdk环境修复

第一个异常

你的操作过程如下:

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

你得到的错误如下:
在这里插入图片描述

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

# 写全路径,不写$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对应的目录,并覆盖掉。

命令:

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已经被替换了,所以,你直接命令行覆盖报错:

# 注意,因为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下,将其添加到环境变量中,以便运行

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尝试通过

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1438260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【QT】VS-code报错:LNK2019: 无法解析的外部符号

目录 0.环境 1.问题简述 2.分析报错原因 3.解决方法 1)set() 相关语句 2)target_link_libraries() 相关语句 4.参考 0.环境 windows11 、 vs-code 、 qt 、 c、编译器为vs2019-x86_amd64 1.问题简述 项目编译release版本时会报错:报错…

计算机毕业设计 基于SpringBoot的城市垃圾分类管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

哪些是暴利的行为?合法的暴利行为?哪些行为为极善 相对于极恶?

合法的暴利行为 在讨论暴利的合法行为时,重要的是要区分“暴利”一词通常带有负面含义,指的是通过不正当手段或在不具备公平竞争条件下获得的过高利润。然而,有些行业或商业模式在法律范围内运作,可能因为专利保护、市场垄断、技…

C程序训练:二分查找法的应用之2

本文来自:C程序训练:二分查找法的应用之2 在《C程序训练:二分查找法的应用》一文中介绍了利用二分查找计算某个区间中数的个数,本文介绍利用二分查找法计算数列中出现单个数字的位置。题目描述如下。 题目描述:一维整…

elementUI的表单错误项在加载页面后自动标红并提示+自动定位到表单项的实现

文章目录 一、需求二、技术实现1、需求1的实现2、需求2的实现 三、参考文档 一、需求 需要实现2个需求(交互效果): 1、在加载页面后,能自动对表单的错误信息进行标红提示,如下图所示: 2、弹出框提示&…

Java 将TXT文本文件转换为PDF文件

与TXT文本文件,PDF文件更加专业也更适合传输,常用于正式报告、简历、合同等场合。项目中如果有使用Java将TXT文本文件转为PDF文件的需求,可以查看本文中介绍的免费实现方法。 免费Java PDF库 本文介绍的方法需要用到Free Spire.PDF for Java…

Docker-Learn(二)保存、导入、使用Docker镜像

1.保存镜像 根据上一节内容,将创建好镜像进行保存,需要退出当前的已经在运行的docer命令行中断里面,可以通过在终端里面输入指令exit或者按下键盘上的 ctrlD建退出: 回到自己的终端里面,输入指令: docker…

Chrome 沙箱逃逸 -- Plaid CTF 2020 mojo

文章目录 前置知识参考文章环境搭建题目环境调试环境 题目分析附件分析漏洞分析OOBUAF 漏洞利用总结 前置知识 Mojo & Services 简介 chromium mojo 快速入门 Mojo docs Intro to Mojo & Services 译文:利用Mojo IPC的UAF漏洞实现Chrome浏览器沙箱逃逸原文…

『 C++ - STL 』unordered_xxx系列关联式容器及其封装(万字)

文章目录 🎡 unordered系列关联式容器🎡 哈希表的改造🎢 节点的设置与总体框架🎢 迭代器的封装🎠 迭代器的框架🎠 operator()运算符重载🎠 其余成员函数/运算符重载 🎢 迭代器begin(…

【iOS ARKit】人形提取

为解决人形分离和深度估计问题,ARKit 新增加了 Segmentation Buffer(人体分隔缓冲区)和Estimated Depth Data Buffer(深度估计缓冲区)两个缓冲区。人体分隔缓冲区作用类似于图形渲染管线中的 Stencil Buffer&#xff0…

数据结构第九天(堆排序)

目录 前言 概述 源码: 主函数: 运行结果: 其他 前言 哈哈,这个堆排序算法很久之前就已经敲过一遍了,时间一久,思路有点淡忘。今天重新看过一遍之后,又亲自撸代码,幸运的是&am…

python毕设选题 - 基于时间序列的股票预测于分析

文章目录 1 简介2 时间序列的由来2.1 四种模型的名称: 3 数据预览4 理论公式4.1 协方差4.2 相关系数4.3 scikit-learn计算相关性 5 金融数据的时序分析5.1 数据概况5.2 序列变化情况计算 最后 1 简介 Hi,大家好,今天向大家介绍一个大数据项目…

IEC 104电力规约详细解读(三) - 遥信

1.功能简述 遥信,、即状态量,是为了将断路器、隔离开关、中央信号等位置信号上送到监控后台的信息。遥信信息包括:反应电网运行拓扑方式的位置信息。如断路器状态、隔离开关状态;反应一次二次设备工作状况的运行信息,如…

位运算:进制

4982. 进制 - AcWing题库 给定两个整数 a,b 请你计算,在 [a,b] 范围内有多少个整数满足其二进制表示恰好有一个 0。 不考虑前导 0。 例如,当 a5,b10 时,[5,10]范围内的所有整数及其二进制表示如下: 可以看出,只有 5 和…

Python HTTP隧道在远程通信中的应用:穿越网络的“魔法门”

在这个数字化时代,远程通信就像是我们日常生活中的“魔法门”,让我们可以随时随地与远方的朋友、同事或服务器进行交流。而在这扇“魔法门”的背后,Python HTTP隧道技术发挥着举足轻重的作用。 想象一下,你坐在家里的沙发上&…

多维时序 | MATLAB实现基于CNN-LSSVM卷积神经网络-最小二乘支持向量机多变量时间序列预测

多维时序 | MATLAB实现基于CNN-LSSVM卷积神经网络-最小二乘支持向量机多变量时间序列预测 目录 多维时序 | MATLAB实现基于CNN-LSSVM卷积神经网络-最小二乘支持向量机多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于CNN-LSSVM卷积神经…

【知识图谱--第二讲知识图谱的表示】

知识图谱的表示 知识表示Knowledge Representation 知识表示方法知识图谱的符号表示基于图的知识表示与建模简单图建模-最简单的无向图有向标记图OWL与Ontology 知识图谱的向量表示 知识表示 Knowledge Representation 知识表示(KR)就是用易于计算机处…

【C语言】socket函数

一、socket函数函数的原型 int socket(int domain, int type, int protocol); 其中: domain参数指定套接字应该使用的协议族(例如,AF_INET表示IPv4协议族)。type参数指定套接字类型(例如,SOCK_STREAM表示…

老是抓不准现货白银实时报价怎么办?

现货白银的实时报价是不断变动的,投资者要了解当下的现货白银实时走势,并且依靠对实时报价的分析预判未来的趋势,这是不容易的,但是不是不能做到呢?也不是。因为市场不是横盘就是趋势,只要有趋势&#xff0…

机器学习--K近邻算法,以及python中通过Scikit-learn库实现K近邻算法API使用技巧

文章目录 1.K-近邻算法思想2.K-近邻算法(KNN)概念3.电影类型分析4.KNN算法流程总结5.k近邻算法api初步使用机器学习库scikit-learn1 Scikit-learn工具介绍2.安装3.Scikit-learn包含的内容4.K-近邻算法API5.案例5.1 步骤分析5.2 代码过程 1.K-近邻算法思想 假如你有一天来到北京…