用多语言实现一个安卓终端模拟器-概述

350 阅读4分钟

Project Mterm 系列章节

系列章节:

  1. 用多语言实现一个安卓终端模拟器-概述
  2. 用多语言实现一个安卓终端模拟器-libmterm
  3. 用多语言实现一个安卓终端模拟器-mterm
  4. 用多语言实现一个安卓终端模拟器-mterm_packages
  5. 用多语言实现一个安卓终端模拟器-总结

项目仓库:

话说上回---Mterm 项目起源

话说为何会诞生此项目,还得从去年这个时候说起。那个时候喜欢折腾手里的一台 K40,在刷 ROM、刷调度等这些常规玩法之下,逐步开始对修改编译刷入内核产生兴趣。

一直想把 Android 当作电脑来使的我,曾经最多也就下了个 Termux 然后在 chroot 环境下装上一些发行版 rootfs 然后装上 xfce 桌面跑跑 vscode 啥的。有一天在酷安刷到一条帖子,大致讲的是通过手动修改安卓内核编译配置文件可以满足开启 docker 的条件。本着好奇心的我决定自己手动给我的 K40 修改编译内核试试,也正是这次尝试,让我了解了安卓内核的编译是多么漫长的过程。

在实现在 Android 上跑 docker 之后,我发现用 Termux 从安装 docker 容器到运行容器的整个过程并不是很方便,从此我对定制一个终端模拟器产生兴趣。 一开始本想 fork 一下 Termux 然后魔改,但最终因为对 java 或者是说 androidUi 写法不太感冒而放弃,我在想能否用 Vue 作为 UI,然后用其它语言作为底层复刻一个终端模拟器。

我尝试过用 uniapp 这款框架实现了这个设想,即我之前发布的 TermDo 项目,但这个产品不算完善(应该是自己对这方面的理解还不够深入和太菜导致的),连终端环境没有编译出来,只能用安卓自带的/system/bin/sh。

也就说 Mterm 是对我之前这个愿望的重新实现(可能是因为强迫症),从底层到 UI 完全重构,也完成了虚拟 rootfs 的编译和使用。

或许哪天又会重构?于是想写下这篇博客,供自己以后使用和为其他想做类似项目尝试的用户提供帮助。

抛砖引玉---Mterm 项目自述

Mterm

一个简单、易用的 Android 终端模拟器。

Tauri Vue.js Kotlin Rust C++

一、项目简介

Mterm 是一个基于 Tauri 2.0 Beta 构建的,支持 Android 平台的终端模拟器(理论上支持 Android 全架构平台,但目前只编译了 aarch64 架构的 Packages),借鉴了 Termux

二、项目架构

1.整体语言调用层次

Vue-(webview)-Kotlin-(jni)-Rust-(ffi)-C++

2.项目构成

  • mterm: 终端模拟器前端和业务逻辑后端,用 Tauri+Vue+Rust+Kotlin 实现

  • libmterm: 终端模拟器核心部分,包括伪终端的核心实现部分,用 C++ 实现,Linux 系统编程,封装出来的库提供给 mterm 使用,顺便给 java/rust 等语言封装了调用接口

  • mterm_packages: 终端模拟器的运行环境包, 包括 bootstrap 提供的 bash 和 apt 和其他众多库包(目前只编译了 aarch64 架构),自 termux-packages fork 修改而来,核心原理为 proot

三、开发原理与过程

详情请见博客 Zephyr's Blog-用多语言实现一个安卓终端模拟器系列

四、产品展示

screenshot.jpg

五、产品下载

至 Github Release 页面下载

六、其他问题

有 Bug 或什么不懂的地方或者您有更好的建议,请随时提出 issue

概述总览---Mterm 系列安排

根据对项目的理解,我将项目划分为项目自述中所提到的 3 个部分,即 libmterm、mterm、mterm_packages。 而我对此项目的讲解,也将分为这 3 个主体部分,外加此概述和最后总结 2 个部分。亦即总共 5 个部分。 接下来是 libmterm 的详细讲解。

本篇转载自本人博客:Zephyr's blog (大佬轻喷,还只是个学生,更新较慢,耐心等待)