Android, <uses-feature> の未指定による Android マーケットでのフィルタリング
2011年01月28日
Android マーケットに登録していたアプリのいくつかが、少し前から表示されなくなってしまった。
原因をいろいろ調べてみると、AndroidManifest.xml ファイルに <uses-feature>
要素の記述をしなければいけなくなった模様。
(参考:Android Developers Blog: Market Housekeeping Alert)
<uses-feature>
要素には、対応するハードウェアやソフトウェアの機能を記述するらしく、Android マーケットはこの要素の内容を見てフィルタリングして、未対応のデバイスへのインストールを防いでいるらしい。
とはいっても、何の記述を追加すればよくわからなかったのだが、Android SDK に付属している aapt
というツールで調べることができるらしい。
Android SDK の platform-tools ディレクトリにある aapt
を使うと、必要な uses-feature
がリストアップされる。
$ aapt dump badging <path_to_exported_.apk>
実行例
$ <SDK>/platform-tools/aapt dump badging YourApp.apk package: name='package.name.yourapp' versionCode='1' versionName='1.0.0' application: label='yourApp' icon='res/drawable-mdpi/icon.png' launchable activity name='package.name.yourapp.YourApp'label='YourApp' icon='' uses-library:'com.google.android.maps' uses-permission:'android.permission.INTERNET' uses-permission:'android.permission.ACCESS_COARSE_LOCATION' uses-permission:'android.permission.ACCESS_FINE_LOCATION' uses-permission:'android.permission.ACCESS_LOCATION_EXTRA_COMMANDS' uses-permission:'android.permission.ACCESS_MOCK_LOCATION' sdkVersion:'4' uses-feature:'android.hardware.location' uses-feature:'android.hardware.location.gps' uses-feature:'android.hardware.location.network' uses-feature:'android.hardware.touchscreen' main other-activities search supports-screens: 'small' 'normal' 'large' supports-any-density: 'true' locales: '--_--' densities: '120' '160' '240'
そして、<uses-feature>
を指定するのだが、android:required
属性を指定しなかったり、属性値に true
を指定するとインストールに失敗する。
必須の機能でなければ 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" />
そして、ビルドしたアプリを Android マーケットにアップロードしたら、表示されるようになった。