Android targetSdkVersionについての説明
AndroidManifest.xmlの最初に書く
<uses-sdk android:targetSdkVersion="4" android:minSdkVersion="4" />
というバージョンの宣言についてです。
minSdkVersionはアプリが動作する最低限のAPIレベルなんだろうなー、というのはすぐわかると思いますが、targetSdkVersionはなんなんだろう?というのをちゃんとしておきたいと思います。
targetSdkVersionはつまり、アプリがそのバージョンのためにデザインされて、テストもしてあるよ、というバージョンです。
その前後のバージョンでも動きます。
が、動作が違うようになります。
targetSdkVersionを高く設定していると、たとえば今これを書いている時点で(2014年8月4日)のAPIレベル19(Android 4.4 KITKAT)にすると、デフォルトの画面や動作がAndroid 4.4 KITKATのものになる、ということです。
例を上げますと、弊社でリリースしている「タクシー検索たくる タクシードライバーさん専用アプリ」で、
<uses-sdk android:minSdkVersion="9" />
だけ宣言していた時のスクリーンショットが下記で
;
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="19" />
上記のように宣言すると、同じ画面がこうなります。
;
字が白くなったり、画面名称の表示部分がアイコンつきに変わったりしていますね。
つまり、動作している端末Android 4.4のデフォルトの画面で表示してくれているわけです。
しかし、これってやってほしい場合とそうでない場合がありますよね。
targetSdkVersionを宣言していないと
<uses-sdk> tag should specify a target API level (the highest verified version; when running on later versions, compatibility behaviors may be enabled) with android:targetSdkVersion="?"
というエラーが出ます。
targetSdkVersionを最新のもので宣言していないと
Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the android.os.Build.VERSION_CODES javadoc for details.
というエラーが出ます。
なので、このエラーメッセージにそそのかされて、最新バージョンを書いていたりすると、デザイン面やプログラムの動作面で思わぬ悪影響が出てしまったりします。
気をつけましょう!
ちなみに、
「Android OSのバージョンはわかるけど、APIレベルって何?この数字?」
という方は、下記のAndroid Developpersのサイトを見てみてください。
http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels
さらに、ちなみになのですが、文字がデフォルトで白になってしまったり、アクションバーのデザインが変更になってしまうのは、テーマの変更で
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.Light" >
などとやれば治ります。
しかし、これは今度デフォルトが白背景、黒文字になるので、そうでない画面はまたアクティビティごとにテーマを変更したりしないといけません。
ちなみに、黒背景白文字は下記のような感じです。
<activity android:name=".SettingActivity" android:label="@string/setting" android:theme="@android:style/Theme.Black" >