2010-12-06 5 views
4

Nous sommes en train de réviser notre manifeste d'application pour utiliser explicitement l'attribut uses-feature pour déclarer toutes ses dépendances sur les API matérielles et logicielles.android.hardware.telephony interrompt l'installation sur l'émulateur

Étant donné que nous nous attendons à ce que l'utilisateur dispose d'Internet mobile, nous avons défini android.hardware.telephony sur true, mais l'application ne peut plus être installée sur l'émulateur. Le message d'erreur est:

Failure [INSTALL_FAILED_MISSING_FEATURE] 

Il n'y a pas d'informations supplémentaires, pas même dans les journaux de l'appareil, mais je pourrais comprendre par tâtonnement que la fonction de téléphonie a été à l'origine.

Étant donné que l'émulateur prend en charge la fonctionnalité de téléphonie (vous pouvez même simuler l'envoi d'un appel), pourquoi cela casse-t-il? Et même s'il signale correctement qu'il ne prend pas en charge la téléphonie, ne devrait-il pas être évident que uses-feature était destiné à cibler les périphériques réels, pas l'émulateur?

Je suis en fait assez confus au sujet de cet attribut maintenant en général, puisque its documentation semble impliquer qu'il n'affecte que les règles de filtrage pour Android Market. Je ne peux pas voir où il mentionne que uses-feature a un impact direct sur l'installabilité d'une application, qui semble aller bien au-delà de la nature purement déclarative/informationnelle que l'attribut docs lui attribue.

Peut-être que ce n'est pas une bonne idée de l'utiliser après tout? Notre serveur de construction ne s'exécute plus, car l'installation sur l'émulateur échoue toujours ...

+0

Quel est exactement le message d'erreur que vous avez? –

+0

Désolé, ajouté le message d'erreur que nous voyons. – Matthias

+0

C'est bizarre, mais voulez-vous vraiment placer cette restriction? Un utilisateur peut avoir une bonne couverture wifi et ne pas opter pour une facture mensuelle mobile. –

Répondre

0

J'ai une application qui utilise la téléphonie et fonctionne très bien avec l'émulateur 2.2 et je suppose que vous avez déjà défini l'attribut requis sur false dans votre manifeste:

<uses-feature android:name="android.hardware.telephony" android:required="false"/> 

Si tel est le cas, je suppose qu'il ya une autre caractéristique ou la permission déclarée dans votre manifeste qui ne figure pas dans l'émulateur et de provoquer l'erreur. Chassez-le par essais et erreurs.

+0

Je ne comprends pas très bien - si l'application nécessite la téléphonie, cette fonctionnalité ne devrait-elle pas être définie sur 'true'? Le problème, comme je le vois, est que même si l'émulateur prend en charge la téléphonie, il signale à Android que ce n'est pas le cas. – Matthias

+0

requis par défaut à true. Si vous déclarez utiliser une fonctionnalité requise et que l'appareil ne la prend pas en charge, vous ne pourrez pas l'installer et/ou vous serez filtré sur le marché. J'ai dû gérer l'émulateur comme un cas particulier dans mes applications lorsque je traitais avec TelephonyManager. –

0

Fondamentalement, ce que vous avez besoin d'utiliser une Emulater plus récente avec plus de fonctionnalités pris en charge, ou bien vous pouvez faire ce qui suit:

1.SANS ou de le supprimer les lignes de votre fichier XML Manifest suivants

<!-- COMMENT ME --> 
<uses-feature android:name="android.hardware.telephony" /> 

OU

2.Ajoutez les éléments suivants:

<!-- UNCOMMENT ME and add android:required="false" --> 
<uses-feature android:name="android.hardware.telephony" android:required="false"/> 

Vous devriez être bon à faire si vous le faites correctement.

See Sample

Questions connexes