无法访问Expression类求助:Java类文件版本不兼容报错
解决Android计算器中MathParser.org-mXparser类版本不兼容问题
问题原因
你遇到的错误核心是版本不匹配:MathParser.org-mXparser.jar是用Java 18(类版本62.0)编译的,而你的Android开发环境使用的是Java 11(类版本55.0),Java虚拟机无法加载高版本编译的类文件。
解决方案
方案1:替换为兼容Java 11的mXparser版本
mXparser在v4.4.0及之前的版本是基于Java 8/11编译的,完全适配你的当前环境:
- 删除
app/libs/MathParser.org-mXparser.jar文件 - 可以直接通过Gradle依赖引入兼容版本,打开模块级
build.gradle,在dependencies块添加:
implementation 'org.mariuszgromada.math:MathParser.org-mXparser:4.4.0'
- 点击Sync Now同步项目后重新编译
方案2:升级项目Java版本到18
如果想保留当前的mXparser版本,需要把项目的Java编译环境升级到18:
- 确保项目根目录的
build.gradle中gradle插件版本支持Java 18(比如7.4及以上):
plugins { id 'com.android.application' version '7.4.2' apply false id 'com.android.library' version '7.4.2' apply false }
- 修改模块级
build.gradle的编译配置:
android { compileSdk 33 // 需使用支持Java 18的SDK版本 compileOptions { sourceCompatibility JavaVersion.VERSION_18 targetCompatibility JavaVersion.VERSION_18 } // 若项目使用Kotlin,需同步修改jvmTarget kotlinOptions { jvmTarget = '18' } }
- 同步项目后重新编译
额外代码修正
你代码中的字符串替换逻辑存在问题,String是不可变类型,replaceAll不会修改原字符串,需要重新赋值:
String userexp = operation.getText().toString(); userexp = userexp.replaceAll("÷", "/"); userexp = userexp.replaceAll("×", "*");
内容的提问来源于stack exchange,提问作者Lorenzo Medici
相关产品推荐
相关产品推荐

