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

私はAndroidアプリで上記のスニペットを使用しています。私のアプリはsdk-15jarで正常にコンパイルされます。

私がアプリを実行しているAndroid携帯はフローズンヨーグルトです

実行時に次のエラーが発生します

      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()コンパイル時に、コンパイルタイルJARを使用します。getFreeSpace()そのメソッドはそのバージョンのAndroidには存在しないため、APIレベル8デバイスでは実行時に使用できません。

API-15 jarに実装がある場合、プラットフォームFroyo-API-8が問題を引き起こすのはなぜですか。?

「API-15jar」はコンパイル時にのみ使用され、実行時には使用されないと思われるためです。

Android Developersサイトには以前より多くの資料がありましたが、2012年の初めからの再設計の一環として失われたようです。

于 2012-11-06T16:55:23.263 に答える