mucchinのAndroid戦記

AndroidアプリのマニフェストXMLに記述するuses-featureについて

AndroidアプリのマニフェストXMLに記述するuses-featureって何の意味があるの?

このAndroidサイトの更新は久しぶりです。
実務がちょっと忙しくて、Androidプログラミングから遠ざかってました。
やっと時間が出来たので、Androidでカメラアプリを作ってみようかなと思って、ぼちぼち作り始めました。
そんな中、何故か妙に引っ掛かった「uses-feature」というマニフェストに記述するタグについて、今日は記事を書きたいと思います。


Androidでカメラ機能を使うには、マニフェストのXMLファイルに、以下のようなパーミッションの宣言が必要です。


<uses-permission android:name=”android.permission.CAMERA”>
</uses-permission>


しかし、色んなサイトを拝見させて頂くと、以下のような記述も必要だ、と書いているところが多かったです。


<uses-feature android:name=”android.hardware.camera” />
<uses-feature android:name=”android.hardware.camera.autofocus” />


スポンサーリンク




この「uses-feature」って何だ?
と、疑問に思われた方は他にいないでしょうか。

私はなぜかめちゃくちゃ気になりました。
パーミッションは別途与えているのに、なんでこんな記述が必要なのか。

明確な理由がわからないのに、このuses-featureの記述を入れるのが何故だかシャクだったので、まずはこのuses-featureを与えずに、カメラ機能を実装して起動させてみました。

すると、、、問題なく動作しました。
エミュレータでも、Xperiaでも。

うむむ、じゃぁこのuses-featureの記述は何の為のものだろう…。
ますます気になりました。

Androidのドキュメントに載っているだろうか?と思い、探してみました。
すると、、、それらしき記述がありました。

Android SDKのdocsフォルダの、以下のURLです。
※インストール先によって、頭の部分が違うかもしれません。
C:\android\android-sdk-windows\docs\guide\topics\manifest\uses-feature-element.html

部分的に抜粋ですが、要は、
このAndroidアプリが使っている機能はコレだよと、宣言するという意味合いだそうです。
例えば、カメラを非搭載のAndroid端末で、Android Marketで、この宣言を持ったAndroidアプリをダウンロードしようとした場合は、ダウンロードが許可されないそうです。

どのような挙動となるか細かいところまではわかりませんが、上記によりuses-featureは記述しておく方が、Androidアプリ開発者にとっても利用者にとってもいいと思います。

開発者にとっては、自分のAndroidアプリの品質を疑われないようになるというメリットがあるのではないでしょうか。

例えば、カメラのオートフォーカス機能を使ったAndroidアプリを、Androidマーケットにアップしていたとします。
そして、カメラ機能は付いているけど、オートフォーカス非搭載のカメラを搭載したAndroid端末ユーザが、そのアプリをダウンロードしたとします。
そして、そのユーザが、そのAndroidアプリを使って写真を撮影したら、どうなるでしょう。
きっとおそらく、エラーになるでしょうね。
すると、「なんだ、このカメラアプリは!写真撮れないじゃないか!!クソアプリだとコメントしてやろう。★も一つだ!」となるかもしれません。

しかし、uses-featureを記述しておくことで、このような不幸を避ける事が出来ます。
よって、uses-featureは、Android開発者、利用者共に有益な記述であろうと思います。


実際に、どのような挙動になるのか、本当にダウンロードされないようになるのかまでは検証したわけではないのですが、記述しておいて損は無いと思いました。
uses-featureは、必要に応じて記述するようにしましょう!