清泛IT社区App Inventor 2 中文社区

搜索

扫码访问移动社区 移动社区,您的掌上技术专家

关注我,精彩不错过! 关注我,精彩不错过!

扫码安装最新版AI伴侣 最新版AI伴侣v2.76

Aia StoreApp上架指南 .aia 源码一站式解决方案 发布日志AI2连接测试ai2Starter模拟器

AppInventor2离线版中文教育版接入DeepSeek VIP会员 享专有教程,免费赠送基础版*技术支持服务! AI2入门必读中文文档AI2拓展IoT专题

查看: 15|回复: 0
打印 上一主题 下一主题

[经验分享] wxbit平台第三方扩展报错分析:no such class 运行时错误的根本原因

  • TA的每日心情
    开心
    昨天 06:50
  • 签到天数: 814 天

    [LV.10]以坛为家III

    1151

    主题

    1929

    帖子

    5万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    54689

    AI2中文网VIP弹球达人接水果达人撸猫达人

    跳转到指定楼层
    楼主
    发表于 昨天 06:49 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    用户提问:

    在fun123.cn中测试CloudBase 拓展 能正常查询数据,我今天打算把wxbit平台中的原来调用LeanCloud的,也改为CloudBase拓展调用时,运行时出错:

    错误:java.lang.RuntimeException: invalid syntax in eval form:
    <string>:51:1: caught exception in inliner for #<procedure make> - java.lang.RuntimeException: no such class: cn.fun123.CloudBase.CloudBaseAuth
    gnu.bytecode.ObjectType.getReflectClass(Unknown Source:64)
    gnu.bytecode.ClassType.getModifiers(Unknown Source:11)
    gnu.bytecode.ClassType.isInterface(Unknown Source:0)
    gnu.expr.InlineCalls.checkType(Unknown Source:13)
    gnu.expr.InlineCalls.visit(Unknown Source:19)
    gnu.expr.InlineCalls.visitSetExpValue(Unknown Source:13)
    gnu.expr.InlineCalls.visitSetExpValue(Unknown Source:2)
    gnu.expr.ExpVisitor.visitSetExp(Unknown Source:19)
    gnu.expr.InlineCalls.visitSetExp(Unknown Source:4)
    gnu.expr.InlineCalls.visitSetExp(Unknown Source:2)
    gnu.expr.SetExp.visit(Unknown Source:0)
    gnu.expr.ExpVisitor.visit(Unknown Source:49)

    这是哪里出错了? 调研一下用户疑问,wxbit 到底做了什么,导致正常的拓展几乎都用不了,之前也有类似反馈


    ai2claw 回答:

    错误分析

    错误信息核心:

    no such class: cn.fun123.CloudBase.CloudBaseAuth

    这发生在 Kawa Scheme 运行时的 inliner 阶段,即 InlineCalls - checkType - ObjectType.getReflectClass 这条调用链。意思是:Kawa 运行时尝试通过 Java 反射加载 cn.fun123.CloudBase.CloudBaseAuth 这个类,但在 wxbit 的 APK 中找不到它。


    根本原因:wxbit 构建服务器的 Extension 处理机制

    这是 wxbit 平台的结构性问题,从三个层面解释:

    1. MIT 原版的 Extension 加载流程

    在 MIT 官方版(以及 fun123.cn 同步的版本)中:
    - 构建服务器(BuildServer)收到 .aia 后,会解析其中的 extension .aix 文件
    - 将 extension 的 Java 类打入 APK 的 classes.dex
    - 运行时 Kawa 通过标准类加载器(PathClassLoader)能找到这些类
    - 一切正常

    2. wxbit 做了什么

    wxbit 对 MIT 源码做了深度定制
    - 修改了 Kawa/Scheme 运行时:wxbit 定制了 Yail 编译器和 Kawa 运行时,加入了错误定位、代码块搜索等独家功能
    - 修改了构建服务器(BuildServer):wxbit 有自己独立的构建服务器,它对自己的内置组件(高德地图、百度语音、MQTT 等)做了特殊处理——这些组件的类已经预编译在 wxbit 的 APK 模板中
    - 但第三方 extension 的处理不同:wxbit 的构建服务器在处理第三方 extension 时,可能没有将 extension 的 Java 类正确打包进 DEX

    3. 为什么出错

    在 fun123.cn 上正常工作的 CloudBase 拓展,到了 wxbit 上报 no such class,具体原因:

    wxbit 的构建服务器没有把 cn.fun123.CloudBase.CloudBaseAuth 这个类打入最终 APK 的 DEX 文件中。

    Kawa 运行时在编译 Yail 代码时(InlineCalls 阶段),会尝试对 Java 类型进行编译期内联检查(checkType - getReflectClass)。这个检查会通过 Java 反射去验证类是否存在。如果类不在 APK 的 classpath 中,就会抛出 no such class 异常。


    为什么 wxbit 的第三方扩展兼容性差

    这是一个系统性问题,不是某个扩展的问题。wxbit 平台:

    1. 修改了 Kawa 运行时:定制版 Kawa 可能有不同的类加载策略,导致标准 extension 的类加载路径被破坏
    2. 构建服务器差异:wxbit 的 BuildServer 是独立维护的,第三方 extension 的打包逻辑可能没有正确实现
    3. 版本不同步:wxbit 基于 MIT 源码分支开发,但版本迭代和 MIT 官方不完全同步。MIT 官方修复的 extension 兼容性问题,wxbit 可能没有同步修复
    4. 内置组件和第三方组件的双轨制:wxbit 自己的组件(高德地图、大模型组件等)走的是内置组件路径(直接编译进 runtime),而第三方 extension 走的是 extension 加载路径——这两条路径的实现质量不一致


    结论和建议

    这不是 CloudBase 拓展的问题,而是 wxbit 平台本身对第三方 extension 的支持存在缺陷。之前类似反馈应该也是同样的原因。

    给用户的建议:
    1. 在 fun123.cn 上使用 CloudBase 拓展是正确的选择,因为 fun123.cn 与 MIT 官方同步
    2. 如果必须在 wxbit 上使用类似功能,只能联系 wxbit 开发者反馈,要求他们修复第三方 extension 的类加载问题
    3. 从 wxbit 迁移到 fun123.cn 是长期最可靠的方案




    调研作者:App Inventor 2 中文网 ai2claw
    App Inventor 2 中文网 - MIT同步更新的中文本土化平台!v2.76 支持Android 15 & iOS 更新日志
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    © 2026 tsingfun.com, Inc.  沪ICP备2020034476号-1  沪公网安备31011702000040号

    GMT+8, 2026-05-22 05:42 , Processed in 0.019797 second(s), 31 queries .