ZorvAI 编程语言支持介绍
项目开源地址:github.com/Quor-a/Zorv…
版本:v1.0.60 | 许可证:Apache-2.0 | 平台:Android 8.0+
ZorvAI 是一款运行在 Android 上的设备端 AI Agent,内置了强大的代码执行能力,支持 7 种主流编程语言的实时运行和渲染。本文档详细介绍每种语言的架构、功能特点和代码示例。
📋 目录
整体架构
ZorvAI 的代码执行架构采用分层设计:
┌─────────────────────────────────────────────────────────┐
│ 对话框 UI 层 │
│ ChatScreen → CodeBlock → WebView 渲染 │
├─────────────────────────────────────────────────────────┤
│ 工具执行层 │
│ RunCodeTool → 语言路由 → 执行引擎 │
├─────────────────────────────────────────────────────────┤
│ 运行时引擎层 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │QuickJS │ │Brython │ │Shell │ │WebView │ │
│ │原生沙箱 │ │Python │ │命令执行 │ │HTML渲染 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
├─────────────────────────────────────────────────────────┤
│ 网络请求层 │
│ http_request 工具 / network.py 模块 │
└─────────────────────────────────────────────────────────┘
核心组件
| 组件 | 功能 | 技术实现 |
|---|---|---|
| RunCodeTool | 代码执行入口 | Kotlin 实现,注册为 AI 工具 |
| CodeBlock | 代码预览组件 | Jetpack Compose + WebView |
| QuickJS | JavaScript 引擎 | 原生 C++ 编译,内存隔离沙箱 |
| Brython | Python 解释器 | 纯 JavaScript 实现,浏览器端运行 |
| network.py | 网络请求模块 | 基于 XMLHttpRequest 的 requests 风格 API |
1. JavaScript
架构说明
JavaScript 在 ZorvAI 中使用 QuickJS 原生沙箱 执行,无需依赖 Termux 或外部环境。
用户输入代码 → RunCodeTool.lang="javascript"
↓
QuroJsEvaluator.eval(code)
↓
QuickJS 原生库 (libquroplugin.so)
↓
执行结果 → HTML 格式化 → WebView 渲染
功能特点
- ✅ 离线执行:无需网络连接
- ✅ 内存隔离:每个执行实例独立沙箱
- ✅ 超时中断:防止死循环卡死
- ✅ JSON 处理:原生支持 JSON 解析
- ✅ 字符串操作:丰富的字符串方法
- ✅ 数学计算:支持 Math 对象
代码示例
// 示例1: 基础计算
function fibonacci(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
console.log("斐波那契数列前10项:");
for (let i = 0; i < 10; i++) {
console.log(`F(${i}) = ${fibonacci(i)}`);
}
// 示例2: JSON 处理
const users = [
{ name: "张三", age: 25, city: "北京" },
{ name: "李四", age: 30, city: "上海" },
{ name: "王五", age: 28, city: "广州" }
];
const result = users
.filter(u => u.age > 26)
.map(u => `${u.name} (${u.city})`)
.join(", ");
console.log("年龄大于26的用户:", result);
// 示例3: 字符串操作
function reverseWords(str) {
return str.split(" ").reverse().join(" ");
}
console.log(reverseWords("Hello World ZorvAI"));
在 ZorvAI 中使用
在对话框中输入:
帮我用 JavaScript 计算斐波那契数列前20项
2. Python
架构说明
Python 使用 Brython(浏览器端 Python 解释器)执行,支持完整的 Python 3 语法。
用户输入代码 → RunCodeTool.lang="python"
↓
runPythonBrython(code)
↓
┌─────────────────────────────────────┐
│ 预加载模块 │
│ 1. python_env.py (30+ 标准库) │
│ 2. network.py (HTTP 请求) │
│ 3. 用户代码 │
└─────────────────────────────────────┘
↓
Brython 引擎 (brython.min.js)
↓
执行结果 → HTML 格式化 → WebView 渲染
功能特点
- ✅ 30+ 标准库:json, math, datetime, re, collections 等
- ✅ 网络请求:内置
network模块,类似 requests 库 - ✅ 异步支持:async/await 语法
- ✅ 数据处理:pandas 风格的数据操作
- ✅ 正则表达式:完整的 re 模块支持
- ✅ 文件操作:模拟文件系统
代码示例
# 示例1: 网络请求
import network
# GET 请求
response = network.get("https://api.github.com/repos/Quor-a/ZorvAI")
data = response.json()
print(f"仓库名: {data['name']}")
print(f"星标数: {data['stargazers_count']}")
print(f"描述: {data['description'][:50]}...")
# 示例2: 数据处理
import json
from collections import Counter
text = "Python 是一种简洁强大的编程语言 Python 被广泛用于数据分析"
words = text.split()
word_count = Counter(words)
print("词频统计:")
for word, count in word_count.most_common(3):
print(f" {word}: {count}次")
# 示例3: 数学计算
import math
def is_prime(n):
"""判断是否为质数"""
if n < 2:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
primes = [n for n in range(2, 50) if is_prime(n)]
print(f"50以内的质数: {primes}")
# 示例4: 日期时间
import datetime
now = datetime.datetime.now()
print(f"当前时间: {now.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"星期: {['一', '二', '三', '四', '五', '六', '日'][now.weekday()]}")
在 ZorvAI 中使用
在对话框中输入:
用 Python 抓取 GitHub 上 ZorvAI 仓库的信息并分析
3. HTML
架构说明
HTML 代码直接作为网页工件返回,由 WebView 实时渲染成可交互网页。
用户输入代码 → RunCodeTool.lang="html"
↓
直接返回 HTML 源码
↓
WebView.loadDataWithBaseURL()
↓
实时渲染成可交互网页
功能特点
- ✅ 实时预览:代码即所得
- ✅ 完整交互:支持 JavaScript 事件
- ✅ 响应式设计:自适应屏幕宽度
- ✅ 离线渲染:支持内联 CSS/JS
- ✅ 多媒体支持:图片、音频、视频
- ✅ 3D 渲染:支持 Three.js 等库
代码示例
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ZorvAI 交互式仪表板</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: 'Segoe UI', sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
padding: 20px;
}
.container {
max-width: 800px;
margin: 0 auto;
background: rgba(255,255,255,0.1);
border-radius: 20px;
padding: 30px;
backdrop-filter: blur(10px);
}
.card {
background: rgba(255,255,255,0.2);
border-radius: 15px;
padding: 20px;
margin: 15px 0;
}
.stat {
font-size: 48px;
font-weight: bold;
text-align: center;
}
button {
background: #4CAF50;
color: white;
border: none;
padding: 12px 24px;
border-radius: 8px;
cursor: pointer;
font-size: 16px;
margin: 5px;
}
button:hover { background: #45a049; }
</style>
</head>
<body>
<div class="container">
<h1 style="text-align:center; color:white;">📊 ZorvAI 数据仪表板</h1>
<div class="card">
<h2>实时数据</h2>
<div class="stat" id="counter">0</div>
<div style="text-align:center;">
<button onclick="increment()">➕ 增加</button>
<button onclick="decrement()">➖ 减少</button>
<button onclick="reset()">🔄 重置</button>
</div>
</div>
<div class="card">
<h2>用户信息</h2>
<input type="text" id="name" placeholder="输入姓名..." style="width:100%; padding:10px; margin:5px 0;">
<button onclick="greet()">👋 打招呼</button>
<div id="greeting" style="margin-top:10px; font-size:18px;"></div>
</div>
<div class="card">
<h2>时间</h2>
<div id="clock" style="font-size:36px; text-align:center; font-family:monospace;"></div>
</div>
</div>
<script>
let count = 0;
function increment() { document.getElementById('counter').textContent = ++count; }
function decrement() { document.getElementById('counter').textContent = --count; }
function reset() { count = 0; document.getElementById('counter').textContent = 0; }
function greet() {
const name = document.getElementById('name').value || '访客';
document.getElementById('greeting').textContent = `你好, ${name}! 👋`;
}
setInterval(() => {
document.getElementById('clock').textContent = new Date().toLocaleTimeString();
}, 1000);
</script>
</body>
</html>
在 ZorvAI 中使用
在对话框中输入:
创建一个带有实时计数器和用户输入的交互式仪表板
4. JSON
架构说明
JSON 数据会自动解析并渲染为格式化的树形视图,支持语法高亮和折叠展开。
用户输入 JSON → RunCodeTool.lang="json"
↓
JSON 解析验证
↓
语法高亮 + 树形渲染
↓
HTML 格式化输出 → WebView 渲染
功能特点
- ✅ 语法验证:自动检测 JSON 格式错误
- ✅ 树形视图:层级结构可视化
- ✅ 语法高亮:键名、字符串、数字、布尔值颜色区分
- ✅ 格式化输出:自动缩进和换行
- ✅ 压缩模式:支持紧凑格式
代码示例
{
"project": "ZorvAI",
"version": "1.0.60",
"description": "运行在 Android 上的设备端 AI Agent",
"features": {
"languages": ["JavaScript", "Python", "HTML", "JSON", "CSS", "XML", "C/C++/Java"],
"engines": {
"javascript": "QuickJS 原生沙箱",
"python": "Brython 浏览器端解释器",
"html": "WebView 实时渲染"
},
"capabilities": [
"离线代码执行",
"网络请求",
"数据可视化",
"交互式界面"
]
},
"metadata": {
"author": "Zorv AI Team",
"license": "Apache-2.0",
"platform": "Android 8.0+",
"repository": "https://github.com/Quor-a/ZorvAI"
}
}
在 ZorvAI 中使用
在对话框中输入:
解析并格式化这段 JSON 数据
5. CSS
架构说明
CSS 代码会自动包装成预览页面,实时显示样式效果。
用户输入 CSS → RunCodeTool.lang="css"
↓
包装成完整 HTML 页面
↓
插入演示元素 + 应用样式
↓
WebView 渲染预览
功能特点
- ✅ 实时预览:即时查看样式效果
- ✅ 语法高亮:属性名、值、选择器颜色区分
- ✅ 演示元素:自动生成演示内容
- ✅ 响应式预览:支持不同屏幕尺寸
代码示例
/* 现代卡片样式 */
.card {
background: linear-gradient(145deg, #ffffff, #f0f0f0);
border-radius: 16px;
padding: 24px;
box-shadow:
0 10px 30px rgba(0, 0, 0, 0.1),
0 1px 8px rgba(0, 0, 0, 0.05);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.card:hover {
transform: translateY(-5px);
box-shadow:
0 20px 40px rgba(0, 0, 0, 0.15),
0 5px 15px rgba(0, 0, 0, 0.1);
}
/* 渐变按钮 */
.btn-gradient {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
border: none;
padding: 12px 24px;
border-radius: 8px;
font-weight: bold;
cursor: pointer;
transition: opacity 0.3s ease;
}
.btn-gradient:hover {
opacity: 0.9;
}
/* 动画效果 */
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.05); }
100% { transform: scale(1); }
}
.animate-pulse {
animation: pulse 2s infinite;
}
在 ZorvAI 中使用
在对话框中输入:
创建一个现代卡片组件的 CSS 样式
6. XML
架构说明
XML 代码支持两种渲染模式:SVG 图形和格式化树形视图。
用户输入 XML → RunCodeTool.lang="xml"
↓
检测是否包含 <svg> 标签
↓
┌─────────────┬─────────────┐
│ SVG 模式 │ XML 模式 │
│ 直接渲染图形 │ 格式化树形 │
└─────────────┴─────────────┘
↓
WebView 渲染
功能特点
- ✅ SVG 渲染:直接显示矢量图形
- ✅ 树形视图:XML 结构可视化
- ✅ 语法高亮:标签、属性、值颜色区分
- ✅ 格式化输出:自动缩进和换行
代码示例
<!-- 示例1: SVG 图形 -->
<svg width="200" height="200" viewBox="0 0 200 200">
<defs>
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
<stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
</linearGradient>
</defs>
<circle cx="100" cy="100" r="80" fill="url(#grad1)" />
<text x="100" y="105" text-anchor="middle" fill="white" font-size="16" font-weight="bold">ZorvAI</text>
</svg>
<!-- 示例2: 数据结构 -->
<config>
<app>
<name>ZorvAI</name>
<version>1.0.60</version>
<features>
<feature>AI Agent</feature>
<feature>Code Execution</feature>
<feature>Multi-language</feature>
</features>
</app>
<settings>
<theme>dark</theme>
<language>zh-CN</language>
<autoSave>true</autoSave>
</settings>
</config>
在 ZorvAI 中使用
在对话框中输入:
创建一个带有渐变效果的 SVG logo
7. C/C++/Java
架构说明
C/C++/Java 是编译型语言,ZorvAI 提供语法高亮预览,完整编译需要通过 ACI 构建台。
用户输入代码 → RunCodeTool.lang="c"/"java"
↓
语法高亮处理
↓
HTML 格式化输出(带语法颜色)
↓
WebView 渲染代码预览
功能特点
- ✅ 语法高亮:关键字、字符串、注释颜色区分
- ✅ 代码格式化:自动缩进和换行
- ✅ 多语言支持:C, C++, Java, Kotlin 等
- ✅ 编译提示:引导使用 ACI 构建台
代码示例
// Java 示例: 简单的学生管理系统
import java.util.ArrayList;
import java.util.List;
public class StudentManager {
private List<Student> students = new ArrayList<>();
// 学生类
static class Student {
private String name;
private int age;
private double score;
public Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
@Override
public String toString() {
return String.format("Student{name='%s', age=%d, score=%.1f}",
name, age, score);
}
}
// 添加学生
public void addStudent(String name, int age, double score) {
students.add(new Student(name, age, score));
System.out.println("已添加学生: " + name);
}
// 查找最高分学生
public Student findTopStudent() {
return students.stream()
.max((s1, s2) -> Double.compare(s1.score, s2.score))
.orElse(null);
}
// 打印所有学生
public void printAllStudents() {
System.out.println("=== 学生列表 ===");
students.forEach(System.out::println);
}
public static void main(String[] args) {
StudentManager manager = new StudentManager();
manager.addStudent("张三", 20, 95.5);
manager.addStudent("李四", 22, 88.0);
manager.addStudent("王五", 21, 92.3);
manager.printAllStudents();
Student top = manager.findTopStudent();
System.out.println("最高分学生: " + top);
}
}
// C++ 示例: 模板函数
#include <iostream>
#include <vector>
#include <algorithm>
template<typename T>
void printVector(const std::vector<T>& vec) {
std::cout << "[";
for (size_t i = 0; i < vec.size(); ++i) {
std::cout << vec[i];
if (i < vec.size() - 1) std::cout << ", ";
}
std::cout << "]" << std::endl;
}
template<typename T>
T findMax(const std::vector<T>& vec) {
return *std::max_element(vec.begin(), vec.end());
}
int main() {
std::vector<int> numbers = {3, 1, 4, 1, 5, 9, 2, 6};
std::vector<std::string> words = {"ZorvAI", "is", "awesome"};
std::cout << "数字: ";
printVector(numbers);
std::cout << "最大值: " << findMax(numbers) << std::endl;
std::cout << "单词: ";
printVector(words);
std::cout << "最长单词: " << findMax(words) << std::endl;
return 0;
}
在 ZorvAI 中使用
在对话框中输入:
用 Java 实现一个简单的学生管理系统
下载与安装
APK 下载
最新版本:v1.0.60
- 🟢 ZorvAI-full-debug.apk(约 350MB,含离线引擎)
系统要求
- 操作系统:Android 8.0+(API 26+)
- 存储空间:至少 500MB 可用空间
- 网络:首次使用需要网络连接下载依赖
安装步骤
- 下载 APK 文件
- 在手机上打开文件管理器
- 点击 APK 文件进行安装
- 允许安装未知来源应用
- 完成安装后打开 ZorvAI
贡献与反馈
开源地址
- GitHub:github.com/Quor-a/Zorv…
- Gitee:gitee.com/ZorvAI/Zorv…
- GitLab:jihulab.com/quor-a-grou…
问题反馈
- GitHub Issues:github.com/Quor-a/Zorv…
贡献代码
- Fork 本仓库
- 创建特性分支(
git checkout -b feature/amazing-feature) - 提交更改(
git commit -m 'Add amazing feature') - 推送到分支(
git push origin feature/amazing-feature) - 创建 Pull Request
许可证
本项目采用 Apache-2.0 许可证 - 详见 LICENSE 文件
⭐ 如果这个项目对你有帮助,请给个 Star 支持一下!⭐
Made with ❤️ by the Zorv AI Team