Termux配置安卓编译环境

前言

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.mfbz.cn/a/376417.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CV | Medical-SAM-Adapter论文详解及项目实现

******************************* 👩‍⚕️ 医学影像相关直达👨‍⚕️******************************* CV | SAM在医学影像上的模型调研【20240207更新版】-CSDN博客 CV | Segment Anything论文详解及代码实现 本文主要讲解Medical-SAM-Adapter论文及项…

HTML 样式学习手记

HTML 样式学习手记 在探索网页设计的世界时,我发现HTML元素的样式调整真的是个很酷的环节。通过简单的属性设置,就能让文字换上五彩斑斓的颜色、变换各异的字体和大小。特别是那个style属性,感觉就像是一扇通往CSS魔法世界的大门。 代码小试…

【Python】虚拟环境miniconda安装(python3.7, python3.x)

背景 使用Python开发项目时,我们一般都需要安装环境,可能是在物理机上直接安装,也可能是在虚拟环境上安装,当前是怎么按照conda环境的示例,可以指定安装Python3.x的所有版本。 安装 首先,需要登录当前的…

零基础学Python之网络编程

1.什么是socket 官方定义: 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用…

国产信创领跑者:暴雨信息的创新与实践

随着数字化转型的加速推进,信创产业作为数字经济发展的重要支柱,正日益受到社会各界的广泛关注。在这个大背景下,暴雨信息积极响应国家号召,全面适配国产化,推动信创产业的技术创新和应用拓展,成为了行业的…

AWS创建快照定期备份

备注:aws有快照定期备份工具,名字叫【生命周期管理器】 选择实例点击创建 点击下一步后设置备份频率等 然后点击创建即可

(Python)字典列表数据本地存储工具

前言 一个简单的实现简便 "列表字典" 数据存储本地。 适合不会SQL但又想实现数据存储本地的同学。 操作使用都非常简单。 文件只做了简单的加密处理,如果需要复杂加密的同学可以修改加密函数。 温馨提示: 1.使用前,在项目目录…

人工智能福利站,初识人工智能,图神经网络学习,第三课

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

九思OA user-list-3g sql注入

【产品&&漏洞简述】 九思OA办公软件全面实现协同工作、公文、流程审批、知识管理、项目管理、综合办公、信息共享、移动办公 等应用功能,并能够与其他异构系统整合,打破信息孤岛,建立完整的有效的企业工作平台和移动办公软件。 九思…

(2)(2.14) SPL Satellite Telemetry

文章目录 前言 1 本地 Wi-Fi(费用:30 美元以上,范围:室内) 2 蜂窝电话(费用:100 美元以上,范围:蜂窝电话覆盖区域) 3 手机卫星(费用&#xff…

ChatGPT学习第一周

📖 学习目标 掌握ChatGPT基础知识 理解ChatGPT的基本功能和工作原理。认识到ChatGPT在日常生活和业务中的潜在应用。 了解AI和机器学习的基本概念 获取人工智能(AI)和机器学习(ML)的初步了解。理解这些技术是如何支撑…

介绍一个关于 JSON 可视化的网站

最近在看到一个比较好玩的网站,可以将 JSON以可视化的方式展现出现,比如存在一下JSON数据: {"id": "f3bbc3bc-9f34-4bf7-8a0f-7e6f6e6fbb9a","isActive": false,"age": 25,"name": "…

阿里云服务器Windows系统无法远程连接到服务器桌面怎么办,选择通过Workbench远程连接进入不是桌面,而是命令行界面

最近发现阿里云的Windows系统服务器,点击“远程连接”后,如果直接点击默认的“通过Workbench远程连接”。 并不能直接进入服务器桌面,而是进入了命令行界面(我记得以前是可以的) 那么如何进入Windows系统服务器桌面呢 …

C语言第二十弹---指针(四)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 指针 1、字符指针变量 2、数组指针变量 2.1、数组指针变量是什么? 2.2、数组指针变量怎么初始化 3、⼆维数组传参的本质 4、函数指针变量 4.1…

蓝桥杯Web应用开发-CSS3 新特性

CSS3 新特性 专栏持续更新中 在前面我们已经学习了元素选择器、id 选择器和类选择器,我们可以通过标签名、id 名、类名给指定元素设置样式。 现在我们继续选择器之旅,学习 CSS3 中新增的三类选择器,分别是: • 属性选择器 • 子…

Mysql进阶(锁)

一、锁概述 两个事务的写操作之间的互相影响。隔离性要求同一时刻只能有一个事务对数据进行写操作,InnoDB通过锁机制来保证这一点。 锁机制基本原理: 事务在修改数据之前,需要先获得相应的锁;获得锁之后,事务便可以…

day03.C++函数与指针(含new与delete关键字,函数指针,指针函数,指针数组)

一.指针 #include<iostream> using namespace std; #define pi 3.14159//定义常量int main(){cout<<pi<<endl;int a10;int *pNULL;//定义指针p&a;cout<<"a的地址为&#xff1a;"<<p<<endl;cout<<"a"<&l…

python函数入参、类成员引用支持灵活参数可配

一、背景 python编码时&#xff0c;有可能在不同场景下输入修改的参数&#xff0c;不方便直接写死&#xff0c;因此需要灵活配置这些函数入参&#xff0c;类成员 二、函数入参支持灵活可配 场景&#xff1a;如下场景&#xff0c;对于hello函数&#xff0c;不同场景下想要对不…

如何修改远程端服务器密钥

前言 一段时间没改密码后&#xff0c;远程就会自动提示CtrlAltEnd键修改密码。但我电脑是笔记本&#xff0c;没有end键。打开屏幕键盘按这三个键也没用。 解决方法 打开远程 1、远程端WINC 输入osk 可以发现打开了屏幕键盘 2、电脑键盘同时按住CtrlAlt&#xff08;若自身电…

学习Spring的第十六天

AOP底层两种生成Proxy的方式 我来解释这两种方式 1 目标类有接口 , 调用JDK的动态代理实现 2 目标类没有接口 , 用Cglib实现 , 即生成目标类的子类 , 来实现动态代理 , 所以要求目标类不能时final修饰的 . (若有接口 , 也可用Cglib方式实现 , 需要手动配置<aop: config pr…
最新文章