为什么NoSuchMethodError如果API-jar具有此方法和实现,则抛出异常

时间:2012-11-06 15:58:53

标签: android

File f = new File(fullPath);            
long freeSpace = f.getFreeSpace();

我在Android应用中使用上面的代码段。 使用sdk-15 jar,我的应用编译得很好。

运行应用程序的Android手机是Froyo

我在运行时遇到以下错误

      java.lang.NoSuchMethodError: java.io.File.getFreeSpace

我查找了getFreeSpace()的文档,它说自API-9以来。 据我所知,froyo符合API-8(以上,我猜?) 所以我知道(但不太明白)我不能在平台froyo上调用这个函数,但我可以在API-8以上的平台上调用它

所以我的问题/歧义是这个

鉴于应用程序编译完全正常,我会假设函数f.getFreeSpace()及其实现在我正在使用的API-15的jar中可用。 当我的应用程序使用API​​-15的jar文件编译时,为什么android会抛出运行时异常,它应该在jar中实现getFreeSpace()?如果API-15 jar中存在实现,为什么平台Froyo-API-8会导致问题。 ?

1 个答案:

答案 0 :(得分:2)

  

我会假设函数f.getFreeSpace()及其实现在我正在使用的API-15的jar中可用

“API-15的罐子”不是你想象的那样。

在编译时,您编译的JAR是不是 APK的一部分。它是一系列存根类和方法,足以允许编译继续进行。这些类和方法的真正实现在设备的固件中。

  

当我的应用程序使用API​​-15的jar文件编译时,为什么android会抛出运行时异常,它应该在jar中实现getFreeSpace()?

您在编译时使用compile-tile JAR getFreeSpace()。在API级别8设备上,您不会在运行时getFreeSpace(),因为该版本的Android中不存在该方法。

  

如果API-15 jar中存在实现,为什么平台Froyo-API-8会导致问题。 ?

因为您认为“API-15 jar”仅在编译时使用,而不是在运行时使用。

Android开发者网站上曾经有过更多这方面的内容,但从2012年早些时候起,它似乎已经失去了重新设计的一部分。