Nexus7(2012)で開発した当のアプリが、Google Playで”このアイテムはお使いの端末に対応していません”(This item is not compatible with your device)と表示されて焦りました。
結論から言うと、カメラ回りのuses-permissionとuses-featureが原因でした。
このアプリはカメラを使うことのあるアプリだったので、
<uses-permission android:name=”android.permission.CAMERA” />
をAndroidManifest.xmlに宣言してあります。これがなければ、そもそもカメラを使えません。
しかし、このuses-permissionがあると、暗黙的に
<uses-feature android:name=”android.hardware.camera” android:required=”true” />
が宣言されているものとみなされてしまうそうです。
つまりカメラ機能が「必須」と判断され、それが使えない端末はGoogle Playで”このアイテムはお使いの端末に対応していません”(This item is not compatible with your device)と表示されてしまうのです。
Nexus7は一応フロントカメラが付いているのですが、何故か「カメラなし」と判定されるようで、この結果になってしまいます。
「カメラ機能を使う場合があるけれど、なければなくて良し、必須ではない」という場合、
<uses-feature android:name=”android.hardware.camera” android:required=”false” />
を併せて明示的に宣言しなければなりません。
その他、uses-permissionを宣言することでuses-featureが暗黙的に宣言されてしまうケースがあるようなので、「使う場合もあるけれど必須ではない」機能を追加する場合、required=”false”でuses-featureを追加しておいた方が良いでしょう。
For example, if an application requests the CAMERA permission but does not declare a
element for android.hardware.camera, Google Play considers that the application requires a camera and should not be shown to users whose devices do not offer a camera. If you don’t want Google Play to filter based on a specific implied feature, you can disable that behavior. To do so, declare the feature explicitly in a
element and include an android:required=”false” attribute. For example, to disable filtering derived from the CAMERA permission, you would declare the feature as shown below. <uses-feature android:name=”android.hardware.camera” android:required=”false” />
以下が参考になります。
uses-permissionの落とし穴、サポートデバイスを増やすmanifestの記述 | Program Resource
Android –