首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试从Termux的android-kawa构建'HelloWorld‘项目时,`java.lang.NoClassDefFoundError: android/view/View`

尝试从Termux的android-kawa构建'HelloWorld‘项目时,`java.lang.NoClassDefFoundError: android/view/View`
EN

Stack Overflow用户
提问于 2021-09-25 22:16:53
回答 1查看 47关注 0票数 1

我一直在尝试使用Kawa Scheme来开发安卓项目。我在GitHub上找到了两个存储库:一个叫做'android-kawa',另一个叫做'KawaDroid‘。它们都有点过时(上一次更新是在2012年左右)。在“android-kawa”的案例中,我能够联系到作者,但他说他没有记住足够多的东西来帮助我。

在'android-kawa‘存储库中有一堆用于设置和使用该项目的脚本。其中一个脚本下载Kawa 1.13 tarball,应用一些补丁,然后尝试构建它。

但是,Termux不支持该构建,因此config.guess脚本无法识别系统。通过下载最新版本的config.guess and config.sub,可以轻松解决此问题。

另一个问题是JVM字节码的格式。当我使用最新的Java编译器时,生成的字节码包含(我相信) dx命令不支持的JVM8+指令。如果我在Termux中运行Java,这不是问题,因为它安装了常规的JVM,但是如果我想在我的APK中包含Kawa jar (这是我想要的东西),那么它就会成为一个障碍。

同样,这可以通过在javac中将Java版本强制为7来解决。(但随后,编译器补充说Java 1.7已被弃用。我猜这就是为什么buildAPKs项目使用ecj而不是javac)

此外,当我./configure Kawa时,我可以将路径传递给android.jar文件(./configure --with-android=...)。我的系统上有两个android.jar文件:

代码语言:javascript
复制
~ $ locate android.jar
/data/data/com.termux/files/usr/share/aapt/android.jar
/data/data/com.termux/files/usr/share/java/android.jar

我不知道它们是从哪里来的,也不知道它们之间有什么不同,但我更喜欢第二种。

因此,当我有可用的kawa.jar时-当我尝试使用以下命令编译它时

代码语言:javascript
复制
~/android-kawa $ java -cp $(dirname $(locate android.jar |tail -n 1)) -jar kawa/kawa-1.13.jar -C  KawaHello/src/kawa/android/hello.scm

我得到以下错误:

代码语言:javascript
复制
internal error while compiling KawaHello/src/kawa/android/hello.scm
java.lang.NoClassDefFoundError: android/view/View
        at gnu.kawa.android.defs.<clinit>(defs.scm)
        at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
        at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1155)
        at java.base/jdk.internal.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:42)
        at java.base/jdk.internal.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:185)
        at java.base/java.lang.reflect.Field.acquireFieldAccessor(Field.java:1132)
        at java.base/java.lang.reflect.Field.getFieldAccessor(Field.java:1113)
        at java.base/java.lang.reflect.Field.get(Field.java:425)
        at gnu.expr.ModuleInfo.setupModuleExp(ModuleInfo.java:195)
        at kawa.standard.require.importDefinitions(require.java:308)
        at kawa.standard.require.scanForDefinitions(require.java:219)
        at kawa.lang.Syntax.scanForm(Syntax.java:65)
        at kawa.lang.Translator.scanForm(Translator.java:1120)
        at gnu.kawa.lispexpr.LispLanguage.parse(LispLanguage.java:64)
        at gnu.expr.Compilation.process(Compilation.java:1908)
        at gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:305)
        at gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:290)
        at gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:290)
        at gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:290)
        at gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:290)
        at gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:290)
        at kawa.repl.compileFiles(repl.java:823)
        at kawa.repl.processArgs(repl.java:444)
        at kawa.repl.main(repl.java:869)
Caused by: java.lang.ClassNotFoundException: android.view.View
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)                                                            at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)         ... 24 more

显然,我尝试过不带-cp参数的方法(效果相同)。jar -tf android.jar返回的列表中存在android/view/View.class条目。

我如何进一步调查问题的根本原因,最重要的是,我如何解决它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-27 14:08:30

结果是我错误地调用了Java,并且它没有看到android.jar文件。它通过以下方式帮助调用编译器:

代码语言:javascript
复制
~/android-kawa $ java -cp $(locate android.jar |tail -n 1):kawa/kawa-1.13.jar kawa.repl -C KawaHello/src/kawa/android/hello.scm

(不同之处在于,对于用:分隔的jar文件,我只有一个-cp参数,并且我显式地给出了kawa.repl类名)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69330431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档