Implicit feature requirements

posted Feb 21, 2013, 4:17 AM by Nick Martens
Just a few days after announcing ARM Launcher on XDA, some people mentioned ARM Launcher could not be found on Google play for them. For example people using a Nexus 7 were experiencing this problem.

After digging through the Google documentation and searching the web I found my answer on stackoverflow. It seems that by requiring specific permissions, the play store assumes certain features are required. So having the CALL_PHONE and READ_SMS permissions implies that only devices having telephony features are supported by your app.

Luckily there is a simple workaround for this, marking the feature as optional will override the default required flag. To do this explicitly mark them as optional in you AndroidManifest.xml, as described in the Android documentation.

    <!-- needed because ACCESS_COURSE_LOCATION, implicitly defines this as required -->
    <uses-feature android:name="android.hardware.location" android:required="false"/>
    <uses-feature android:name="" android:required="false"/>

    <!-- Needed because CALL_PHONE, READ_SMS, WRITE_SMS and RECEIVE_SMS, 
        implicitly define this as required -->
    <uses-feature android:name="android.hardware.telephony" android:required="false"/>

So be careful when using permissions that may imply a hardware requirement as they may limit the availability of your app.