2013-06-12 17 views
8

私はAndroidManifest.xmlにGingerbreadのアプリケーションを作成しています。minSdkVersion=10targetSdkVersion=17です。Androidでサポートされていない(上位レベルの)APIが呼び出されないようにするにはどうすればよいですか?

私は例えば、それを呼び出す前に、APIがサポートされている場合、私がチェックする必要があることを知っている:

private void removeRule(RelativeLayout.LayoutParams params, int rule) { 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { // API 17 
     params.removeRule(rule); 
    } else { 
     params.addRule(rule, 0); 
    } 
} 

しかし、時には、私は忘れる/または私はより高いレベルのAPIを呼び出して、時折てるかわかりません私のプログラムは、NoSuchMethodError例外でクラッシュします。

私は自分のアプリを公開する前に、常にAndroid SDK 2.3.3を使用するようにプロジェクトを設定し、不正なメソッド呼び出しをしていないことを確認します(例えば、エラーはすべてifのアンドロイドSDKバージョン)、SDKを4.2.2に戻します。

サポートされていないAPIがSDKを切り替えることなく呼び出されないようにするには、より良い方法がありますか?

(私はIntelliJのを使用していP.S.)

+2

正しい答えは、あなたの 'android:minSdkVersionよりも新しいものを使用するとわかるように、" Use Lint "(http://developer.android.com/tools/debugging/improving-w-lint.html)です。しかし、まだIntelliJの統合があるかどうかはわかりません。そうでない場合は、コマンドラインから実行する必要があります。 – CommonsWare

答えて

7

あなたはそれをチェックするためにAndroidのリントを実行する(必要がある)ことができます:

右プロジェクト(またはパッケージ、クラス)をクリックしてください>分析>コードを点検します。 > AndroidのLintの設定 - - Eclipseのプロパティで

enter image description here

+0

ありがとう!私はAndroid Lintについて知らなかった。しかし、私はちょうどそれを試した、それは間違ったAPI呼び出し(上記の例を使用して、if文のチェックを削除する)をキャッチしていないようだ。 : –

+0

コードから '@SuppressLint(" NewApi ")'を削除し、Lintエラーの箇所を確認してから、抑制を戻して必要な箇所にifステートメントを追加してください。 – LuckyMe

+0

Lintが "NewAPI"エラーをキャッチしていない - Eclipseのhttps://code.google.com/p/android/issues/detail?id=56427 –

2

> NewApiとErrorに重要度を変更します。

関連する問題