Android用の条件付きコンパイルはありますか?
API 5 (!!??) で登場したという事実にもかかわらず、ExifInterfaceには Android 2.3 (API 10) で有用な属性がほとんどないという理由だけで、Android 3 (API 11) 用のプロジェクトを作成する必要がありました。アプリを ICS ユーザーに限定したくありません。
ありがとう!
Android用の条件付きコンパイルはありますか?
API 5 (!!??) で登場したという事実にもかかわらず、ExifInterfaceには Android 2.3 (API 10) で有用な属性がほとんどないという理由だけで、Android 3 (API 11) 用のプロジェクトを作成する必要がありました。アプリを ICS ユーザーに限定したくありません。
ありがとう!
デバイスの現在の API バージョンを動的に確認し、それに応じてさまざまなことを行うことができます。
if(Build.VERSION.SDK_INT < 14) {
// Crappy stuff for old devices
}
else {
// Do awesome stuff on ICS
}
ただし、すべての API で使用できないクラスをインスタンス化する必要がある場合は、実行可能なクラスまたは別のラッパー クラスでインスタンス化する必要があることに注意してください。
if(Build.VERSION.SDK_INT < 14) {
// Crappy stuff for old devices
}
else {
// Do awesome stuff on ICS
new Runnable() {
new AmazingClassAvailableOnICS();
(...)
}.run();
}
import android.annotation.TargetApi;
次に、注釈を使用します。
@TargetApi(11)
public void methodUsesAPI11()
{
...
このトリックを使用すると、非常に単純なことを行うことができます。これにより、API レベル 11 呼び出し (クラス、メソッドなど) を含みandroid:minSdkVersion="8"
、マニフェストに設定されたままのコードをコンパイルできます。それ以上、他には何もありません。
後は君しだい。methodUsesAPI11()
アプリのクラッシュを防ぎ、古いプラットフォームで他のアクションを実行するには、呼び出す前にプラットフォームのバージョンを確認するか、例外を処理する必要があります。
Build.VERSION.SDK_INT を確認するか、注釈を使用するだけで十分ですが、ブックマークしたこのリンクがあなたのケースに関連している可能性があります: http://android-developers.blogspot.com/2010/07/how-to-have-your -cupcake-and-eat-it-it-too.html?m=1
そこに記述されている内容を使用して、互換性がない可能性があるが決してロードされないクラスを持つことができます。これは条件付きコンパイルではありませんが、必要なものかもしれませんが、もう少し複雑です。