Xwalk运行报NoClassDefFoundError: Ljunit/framework/Assert错误如何解决
问题根因
你当前添加的所有依赖都使用了testImplementation作用域,该配置仅会将依赖引入到测试代码的编译和运行环境中,不会打包到App正式运行(含debug调试运行)的安装包内,因此运行时依然找不到junit.framework.Assert类。
解决方案
可以根据你的需求选择以下任意一种方案:
- 方案1:调整junit依赖的作用域
把junit的依赖从testImplementation改为implementation,这样junit类会被打包到安装包内,直接解决类找不到的问题,推荐使用稳定的junit4版本:
如果你开启了R8/Proguard混淆,需要补充如下混淆规则避免类被移除:implementation 'junit:junit:4.13.2'-keep class junit.framework.** { *; } - 方案2:替换Crosswalk(XWalk)为正式发布版本
这个报错本质是你使用的Crosswalk内核版本为测试构建版本,代码中残留了junit断言调用。换用官方正式release版本的Crosswalk依赖,即可从根源避免运行时调用junit相关类,不需要额外引入junit包。 - 方案3:自定义空实现的Assert类
如果不想将整个junit包打入安装包,可以在自己的项目代码中创建对应包名的Assert类,补全Crosswalk调用到的方法即可:package junit.framework; public class Assert { public static void assertNotNull(Object obj) { // 可以根据需求做空实现,或者添加自定义校验逻辑 if (obj == null) { throw new RuntimeException("Assertion failed: object is null"); } } // 按报错提示补全所有被调用的Assert方法即可 }
内容的提问来源于stack exchange,提问作者c-an
相关产品推荐
相关产品推荐

