You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Termux编译android-kawa项目报错java.lang.NoClassDefFoundError: android/view/View

问题根本原因
  • java命令存在固定参数优先级规则:当-jar和-cp/-classpath同时使用时,-cp指定的类路径会被完全忽略,JVM只会读取kawa-1.13.jar包内META-INF/MANIFEST.MF文件中声明的Class-Path加载类,所以你传入的android.jar路径完全没有生效,自然找不到android.view.View类。这也是你去掉-cp参数后报错完全一致的原因。
  • 你编写的-cp参数值本身存在错误:$(dirname $(locate android.jar |tail -n 1))得到的是android.jar所在的目录,而类路径规则中,写入目录只会加载目录下的独立class文件,不会自动加载目录内的jar包,就算-cp生效,这个写法也无法加载到android.jar中的类。
  • 补充说明两个android.jar的差异:/data/data/com.termux/files/usr/share/aapt/android.jar是aapt工具自带的最小化版本,仅包含资源编译需要的类签名,功能不完整;/data/data/com.termux/files/usr/share/java/android.jar是完整的编译用版本,你优先使用第二个的选择是正确的。
解决方案

立即修复当前编译报错

把-jar参数移除,将kawa的jar包也加入类路径,同时显式指定kawa的主类kawa.repl,并将完整的android.jar路径写入类路径,正确命令如下:

java -cp "$(locate android.jar | tail -n 1):kawa/kawa-1.13.jar" kawa.repl -C KawaHello/src/kawa/android/hello.scm

注:Termux环境类路径分隔符为冒号,如果是Windows环境需要替换为分号

后续优化建议

  • 字节码兼容问题:你目前强制指定javac编译版本为1.7的方案可正常使用,弃用警告不影响实际功能;如果不想看到警告,可以替换为ecj编译器完成Java代码编译,ecj对旧版本字节码的支持更友好,不会输出多余的弃用提示。
  • 工具链升级:可以将dx工具替换为d8,Termux官方源已提供d8安装包,d8支持JVM 8+的字节码转dex,你就不需要再强制指定Java 7编译,直接使用新版javac编译即可,可彻底解决字节码版本兼容问题。
  • Kawa版本升级:可以尝试使用新版Kawa,旧的1.13版本是2012年发布的,新版已经原生优化了Android场景的编译适配,你可以将android-kawa仓库中的补丁迁移到新版Kawa上,构建流程的稳定性会更高。

内容的提问来源于stack exchange,提问作者Maciek Godek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:12:01