<uses-feature> 最早是在 Android 1.6 SDK (API Level 4) 中出現的,他的用途是用來宣告 App 會使用到哪些軟硬體功能(比如 Camera、Bluetooth、OpenGL ES version...)。不過事實上系統本身並不會去檢查這些設定,但 Google Play 確會用這些設定去過濾要呈現哪些 App 給使用者。
比如說我宣告了下面這行,表示我會使用到 Camera 功能。這樣 Google Play 就不會將我的 App 顯示在沒有 Camera 的裝置上。
在看完落落長的 開發者文件 後才瞭解,嚴格來說,每個 App 都應該要清楚宣告哪些功能是必要或非必要。但因為種種原因,開發者可能忽略或未正確宣告。所以 Google Play 除了檢查 <uses-feature> 外,還會參考 <uses-permission> 的設定。當有設定 <uses-permission> 時, Google Play 會假定相關的功能是必要的,並加入過濾。
舉例來說,我的 App 會使用到 Camera,但不是必要的。而我只宣告了 Camera 的 <uses-permission>,卻忽略了 <uses-feature>。
該怎麼改善呢? 只要加上 Camera 的 <uses-feature>,並把 android:required 設成 false 即可。這樣 Google Play 就不會進行 Camera 的過濾。( <uses-feature> 的優先程度高於 <uses-permission> )
比如說我宣告了下面這行,表示我會使用到 Camera 功能。這樣 Google Play 就不會將我的 App 顯示在沒有 Camera 的裝置上。
<uses-feature android:name="android.hardware.camera" />不過後來在 Android 2.0 SDK (API Level 5) 中,<uses-feature> 多了一個屬性叫 android:required。當某功能在 App 中是必要時需設定為 true,若是非必要時則設成 false。咦?...若是不需要的話,我直接省略 <uses-feature> 不是更省事嗎?
在看完落落長的 開發者文件 後才瞭解,嚴格來說,每個 App 都應該要清楚宣告哪些功能是必要或非必要。但因為種種原因,開發者可能忽略或未正確宣告。所以 Google Play 除了檢查 <uses-feature> 外,還會參考 <uses-permission> 的設定。當有設定 <uses-permission> 時, Google Play 會假定相關的功能是必要的,並加入過濾。
舉例來說,我的 App 會使用到 Camera,但不是必要的。而我只宣告了 Camera 的 <uses-permission>,卻忽略了 <uses-feature>。
<uses-permission android:name="android.permission.CAMERA" />此時 Google Play 發現了這個 <uses-permission>,便會將 Camera 視為必要而進行過濾,沒有 Camera 的裝置就看不到我的 App 了,這樣跟我想要的結果不同。
該怎麼改善呢? 只要加上 Camera 的 <uses-feature>,並把 android:required 設成 false 即可。這樣 Google Play 就不會進行 Camera 的過濾。( <uses-feature> 的優先程度高於 <uses-permission> )
<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" android:required="false" />這麼一來,我的 App 既取得了 Camera 權限,而且在沒有 Camera 的裝置上也不會被過濾掉。
留言
張貼留言