ZorvAI:Android 设备端 AI Agent 编程语言支持详解

1 阅读8分钟

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
QuickJSJavaScript 引擎原生 C++ 编译,内存隔离沙箱
BrythonPython 解释器纯 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

系统要求

  • 操作系统:Android 8.0+(API 26+)
  • 存储空间:至少 500MB 可用空间
  • 网络:首次使用需要网络连接下载依赖

安装步骤

  1. 下载 APK 文件
  2. 在手机上打开文件管理器
  3. 点击 APK 文件进行安装
  4. 允许安装未知来源应用
  5. 完成安装后打开 ZorvAI

贡献与反馈

开源地址

问题反馈

贡献代码

  1. Fork 本仓库
  2. 创建特性分支(git checkout -b feature/amazing-feature
  3. 提交更改(git commit -m 'Add amazing feature'
  4. 推送到分支(git push origin feature/amazing-feature
  5. 创建 Pull Request

许可证

本项目采用 Apache-2.0 许可证 - 详见 LICENSE 文件


⭐ 如果这个项目对你有帮助,请给个 Star 支持一下!⭐

Made with ❤️ by the Zorv AI Team