我看到这个问题在许多不同的背景下被问到很多。也许我们可以设定一些定位和修复策略?我自欺欺人,所以我所能贡献的都是恐怖故事和问题,对不起......
当一个类在编译时可见但在运行时不可见时,它会被抛出......这怎么可能发生?
就我而言,我正在开发一个应用程序,该应用程序在Eclipse中使用Google API,用于Android平台。我已经配置了Project Properties / Java Build Path / Libraries来包含gdata .jars,一切都很好。当我在模拟器中执行时,我得到一个强制关闭,logcat在一个简单的新ContactsService(“myApp”)上显示NoClassDefFoundError;我也尝试了一个新的CalendarService(“myApp”),结果相同。
是否可能或希望在编译时静态绑定以避免问题?
无论如何,附加库的动态绑定如何在移动环境中工作?要么必须绑定到我的.apk,要么我需要“安装”它? ......嗯。
非常感谢。
答案 0 :(得分:9)
这似乎是在课堂上引发的 在编译时可见但不在 运行时间......这怎么可能发生?
构建类路径可能包含未打包到APK中的JAR。
是否可能或希望 在编译时静态绑定到 避免这个问题?
这是可能的,可取的和必要的。
在Eclipse之外,您只需将libs/
中需要的JAR放入项目中,使用Ant进行编译,就可以了。
在Eclipse内部,我让学生成功使用的一种模式是将libs/
中需要的JAR放入项目中,将它们作为JAR添加到构建路径中(注意:不是外部JAR),以及它们作为APK的一部分打包。但请注意,我个人并不使用Eclipse,因此我的使用经验有限。
答案 1 :(得分:2)
对于那些有问题的人,我的应用程序出现了同样的错误。我要解决的是创建一个新项目并将我的资源和源文件夹以及我的清单文件复制到新项目中(我事先删除了新项目中创建的项目)并且瞧。
答案 2 :(得分:1)
当我得到这个时,问题实际上是在队列中更深层次; Dalvik转换器未能转换一些引用的库,但是Eclipse允许我启动该项目。
检查Android SDK控制台,看看是否有任何错误报告。
答案 3 :(得分:1)
在我的情况下,我使用自己的库(MyLib)在2个应用程序之间共享。当我向库中添加新类时,应用程序A已关闭。
当我打开App A进行操作时,Eclipse识别出新类,我能够引用它。但是在跑步时我得到了错误。
事实证明,App A中导入的库文件夹(名称类似于MyLib_src)并未反映对我的库项目(MyLib)所做的更改。
我没有找到这个版本的问题,所以我想把它添加到这个列表中。