2011年11月12日土曜日

[Android] OSをバージョンアップするとアプリが動かなくなる理由

The reason for being unable to run applications on recent OS

古いOSで動いていたアプリケーションが新しいOSで動かなくなる理由を調べてみました。
最近になってAndroidリファレンスを見たら、過去によく使われたメソッドや定数がdeprecated(非推奨)にされていました。

たとえばServiceクラスのonStartは現在deprecatedにされ、API Level 5(Android2.0)以降に実装されたonStartCommandが追加されています。

1.6以前
2.0以降
onStart
動作する
非推奨
onStartCommand
実装されてない
動作する
Android1.6にも対応させるにはonStartを使いたいところです。
ところがAndroid2.2ではonStartメソッドが呼ばれないことがあるのです。
この挙動の違いが古いOSで動いていたアプリケーションが新しいOSで動かなくなる理由の一つです。

Serviceクラスの他、Intent・Context・Activity・SQLiteDatabase・MotionEventのように頻繁に使うクラスもdeprecatedが散見されます。
deprecatedのメソッドや定数を使ったアプリはOSのバージョンごとに動作が異なる可能性があります。
市販の書籍を参考にしている開発者は要注意です。書籍で紹介されている方法がdeprecatedの可能性があります。

VisualBasic5.0で作られたフリーウェアがWindows7で動いてる姿を見るとOSは互換性を維持することが当たり前に思えるのですが、Androidは違います。
度の端末でも動作するアプリケーションを作るには、アプリをメンテナンスし続ける必要がありそうです。

次回は1.6と2.xに両対応のアプリケーションのサンプルを公開する予定です。→公開しました

以上、参考になれば幸いです。

0 件のコメント:

コメントを投稿