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

我在 android 应用程序中使用上面的代码片段。我的应用程序编译良好,使用 sdk-15 jar。

我运行应用程序的安卓手机是 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 文件编译并且它应该在 jar 中实现 getFreeSpace() 时,为什么 android 会抛出运行时异常?如果 API-15 jar 中有实现,为什么平台 Froyo - API-8 会导致问题。?

4

1 回答 1

2

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

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

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

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

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

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

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

Android 开发者网站上曾经有更多关于此的材料,但它似乎已作为 2012 年初重新设计的一部分而丢失。

于 2012-11-06T16:55:23.263 回答