スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Android]複数API Levelへの対応

Androidで上位APIが使えるなら使い、使えないなら別な方法で対応する、というコードをどうやって書けばいいか検討してみた。

例えば、画像の拡大縮小を
・Ver2.0(API Level 5)以上でマルチタッチ対応なら、ピンチで行う。
・上記以外の場合は、ZoomControlのみで行う。
としたいとする。

Eclipseのプロジェクト作成時、API Levelは1つしか選べない(チェックボックスなのに)。
なので、上位のAPIを使いたい場合は、そのLevelに合わせる必要がある。
ただし、下位の端末でも該当するAPIを使っていなければそのアプリケーションは実行可能である。
(http://developer.android.com/intl/ja/guide/appendix/api-levels.html によると、"If the application were to be somehow installed on a platform with a lower API Level, then it would crash at run-time when it tried to access APIs that don't exist.")

"tried to access APIs"が何を意味するのか実験してみたところ、上位APIを呼び出す前直前ではなく「上位APIを呼び出すコードを含んだクラスをロードする時点」(※)でクラッシュ(java.lang.VerifyError)してしまった。

※…Class.forNameでの明示的ロード、インスタンス化、スタティックメソッド呼び出しなどのタイミング。

ただし、リフレクションでクラスの情報を読み取るのは問題ない。

ということで、
・上位APIにアクセスする部分を他のクラスに追い出し、
・リフレクションで上位APIの有無を確認し、
・存在すればそのクラスをインスタンス化orスタティックメソッドで呼び出し、実際の処理を行う
という手順を踏めばとりあえず実現できそう。

こんなトリッキーな方法よりましな手段がありそうだが、現時点ではみつけられず。

続きを読む

スポンサーサイト
プロフィール

fchiba

Author:fchiba
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。