Chronogps Posté(e) 23 octobre 2011 Share Posté(e) 23 octobre 2011 Soit la problématique suivante : J'ai une application qui utilise marginalement les fonctions de téléphonies pour adresser des SMS. Cette fonction n'est pas essentielle dans l'application mais son implémentation fait que l'application n'est plus disponible sur le market de tablettes dépourvues de connexion 3G/Téléphonie ce qui est dommage... Apparemment je n'ai pas d'autre choix que de créer une nouvelle application épurée des fonctions en question : Ai-je une autre solution ? Si je dois recréer une autre application j'aimerais évidemment réutiliser le code existant (sans le dupliquer pour des raisons évidentes de maintenance) J'ai trouvé comment on ajoutait un fichier façon lien vers un fichier d'un autre projet (link to file in the system file) mais niveau compilation ça coince au niveau du package En effet dans le source original j'ai : package com.applicationorigine; il faudrait que ce soit : package com.applicationderivee; Comment gérer cette problémentatique ? Comment conditionner cela un peu à la façon C++ ? #ifdef APPLICATIONORIGINE package com.applicationorigine; #else package com.applicationderivee; #endif Ca coinçait aussi sur les resources mais j'ai trouvé comment le résoudre en incluant le projet initial dans les propriétés (Java Build Path) Merci pour vos lumières... Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 24 octobre 2011 Share Posté(e) 24 octobre 2011 Je ne pense pas que tu sois obligé de créer une nouvelle application pour gérer le cas des tablettes sans téléphonie. Il existe une possibilité, dans le AndroidManifest.xml, de spécifier qu'une fonctionnalité utilisée par ton appli est optionnelle (<uses-feature>) . Par contre, cela veut dire qu'il te faudra modifier ton application pour qu'elle s'adapte dynamiquement à la présence des API en question ou pas (par introspection) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Chronogps Posté(e) 24 octobre 2011 Auteur Share Posté(e) 24 octobre 2011 Bien vu ! Cette subtilité m'avait échappé... Il faut ajouter : android:required="false" Et ensuite utiliser hasSystemFeature() Super, je vais pouvoir avancer ! Un grand merci ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Chronogps Posté(e) 26 octobre 2011 Auteur Share Posté(e) 26 octobre 2011 Bon je viens de republier mon application avec les permissions suivantes : <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.DEVICE_POWER"></uses-permission> <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <uses-permission android:name="android.permission.SEND_SMS" android:required="false"></uses-permission> <uses-permission android:name="android.permission.RECEIVE_SMS" android:required="false"></uses-permission> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-sdk android:minSdkVersion="7"/> Mon application n'est toujours pas visible depuis le market via mon IconiaTab... L'application fonctionne parfaitement bien dessus, j'ai aménagé le code pour ne pas accéder aux fonctions SMS... Dans la console du market j'ai ceci : Autorisations : android.permission.ACCESS_COARSE_LOCATION, android.permission.ACCESS_FINE_LOCATION, android.permission.DEVICE_POWER, android.permission.WAKE_LOCK, android.permission.INTERNET, android.permission.READ_CONTACTS, android.permission.WRITE_EXTERNAL_STORAGE, android.permission.READ_PHONE_STATE, android.permission.SEND_SMS, android.permission.RECEIVE_SMS, android.permission.BLUETOOTH_ADMIN, android.permission.BLUETOOTH Fonctionnalités : android.hardware.location.network, android.hardware.bluetooth, android.hardware.telephony, android.hardware.location, android.hardware.location.gps, android.hardware.touchscreen Une idée de l'origine du problème ? le android.hardware.telephony ? D'où vient-il ? C'est à l'origine du filtrage ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Chronogps Posté(e) 26 octobre 2011 Auteur Share Posté(e) 26 octobre 2011 Bon j'ai trouvé. Il semble qu'il faille indiquer explicitement les uses-features (en plus des uses-permissions) comme suit : <uses-feature android:name="android.hardware.location.network" android:required="false" /> <uses-feature android:name="android.hardware.bluetooth" android:required="false" /> <uses-feature android:name="android.hardware.telephony" android:required="false" /> <uses-feature android:name="android.hardware.location.gps" android:required="true" /> <uses-feature android:name="android.hardware.touchscreen" android:required="true" /> Avec cet ajout le filtrage est ok, mon application apparait sur le market d'une tablette sans GSM. Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 27 octobre 2011 Share Posté(e) 27 octobre 2011 Le problème venait sans doute de la permission READ_PHONE_STATE, pour laquelle tu n'avais pas positionné l'attribut required à false, ce qui impliquait que la fonctionnalité sous-jacente ("android.hardware.telephony") restait obligatoire Lien vers le commentaire Partager sur d’autres sites More sharing options...
Chronogps Posté(e) 27 octobre 2011 Auteur Share Posté(e) 27 octobre 2011 Il faut que je regarde quelles fonctions demandent cette permission. J'ai aussi pensé a cette explication, j'ai lancé l'application en la supprimant et j'ai un plantage. Par conséquent elle est nécessaire. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Alocaly Posté(e) 30 octobre 2011 Share Posté(e) 30 octobre 2011 Sinon, pour ta question originale ( et meme si tu as trouvé un autre moyen, plus adapté, pour résoudre ton probleme ), avoir du code commun entre deux applis, le mieux est sans doute d'utiliser des Android libraries. J'étais un peu dans la meme situation que toi, et au départ comme j'avais la flemme de faire un troisieme projet pour ma librairie, j'utilisais un des exe comme librairie pour l'autre. ( il fallait juste que je modifie les settings quand je changeais l'utilisation que je voulais en faire ( exe ou librairie ) ). Emmanuel / Alocaly Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.