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会导致问题。 ?
答案 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年早些时候起,它似乎已经失去了重新设计的一部分。