Aller au contenu

Comment réutiliser du code d'un autre projet


Chronogps

Recommended Posts

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

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

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

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

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

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...