Androidでアプリを作成する際、使用する機能によりuses-featureやuses-permissionを記述するが、記述の仕方によってサポート出来るデバイスを対象外としてしまっている場合がある。
アプリが必要とるす機能をuses-featureで記述し、使用許可を得る機能をuses-permissionで記述、機能を使用するが必須でない場合uses-permissionだけ記述しuses-featureを省略する書き方にしていないだろうか。
筆者がカメラ機能を使うアプリにおいて、最初は
1 2 3 4 | < uses-permission android:name="android.permission.CAMERA" /> < uses-feature android:name="android.hardware.camera.autofocus" /> < uses-feature android:name="android.hardware.camera" /> |
と記述していた。しかし、カメラは必須ではないアプリで、ユーザーからカメラが無い端末でも使える様にして欲しいとの要望があり、
1 | < uses-permission android:name="android.permission.CAMERA" /> |
に変更した。しかし、これではGoogle Playのリストに出てこなかった。正解は、
1 2 3 4 | < uses-permission android:name="android.permission.CAMERA" /> < uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> < uses-feature android:name="android.hardware.camera" android:required="false" /> |
である。uses-featureでカメラ機能を記述し、android:required=”false” を付けて必須ではないと明記する必要があった。
さらに、カメラはあれどフロントカメラしか搭載されていない端末も当初フィルタリングで除外されてしまっていた。
カメラ以外にも、広告のための位置情報、一部機能のためのBluetooth等も必須ではないがuses-permissionを記述していたが為にそれら機能を持たないデバイスでフィルタリングされてしまっていた。最終的に
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | < uses-permission android:name="android.permission.INTERNET" /> < uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> < uses-permission android:name="android.permission.VIBRATE"/> < uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> < uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> < uses-permission android:name="android.permission.BLUETOOTH"/> < uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> < uses-permission android:name="android.permission.CAMERA" /> < uses-feature android:name="android.hardware.bluetooth" android:required="false" /> < uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> < uses-feature android:name="android.hardware.camera" android:required="false" /> < uses-feature android:name="android.hardware.location" android:required="false" /> < uses-feature android:name="android.hardware.location.gps" android:required="false" /> < uses-feature android:name="android.hardware.location.network" android:required="false" /> < uses-feature android:name="android.hardware.touchscreen" android:required="false" /> |
と記述し、必須ではない機能は required=”false” と明記する事で、対象端末を1000以上追加する事が出来た。
サポートしているデバイスや、除外/未対応となっているデバイスはDeveloper ConsoleのAPKのサポートされる端末の台数や除外された端末の所から確認できる。
This post is also available in: 英語