Comment puis-je supporter mon application Android pour plusieurs magasins Android?

J'ai récemment commencé à vendre mon application Android sur Google Android Market et j'ai mis en œuvre leur programme de licences d'application pour empêcher toute utilisation non autorisée de ma demande. Je prévois maintenant de le libérer pour l'Amazon App Store d'Android, et je veux connaître la meilleure façon de maintenir deux versions de ma application: une qui implémente les Licences d'Android et une autre qui ne l'est pas.

Bien que ma solution actuelle fonctionne, ce n'est pas optimal, et j'essaie de trouver des façons dont d'autres personnes ont réagi. À l'heure actuelle, j'ai implémenté deux écrans pour l'application, SplashGoogle.java et SplashAmazon.java. J'ai deux fichiers Manifest correspondants, GoogleManifest.xml et AmazonManifest.xml. Chaque manifeste définit un éclaboussement différent comme l'intention du lanceur.

  • ListView ne se met pas à jour tant que le clavier n'est pas caché
  • Liste toutes les activités d'un APK à partir du shell
  • Connexion d'erreur refusée
  • Démarrez l'émulateur ICS sans bouton Menu
  • La meilleure façon de supprimer l'activité et ses références dans Android Studio
  • La dépendance Android est ignorée pour la version
  • Lorsque je souhaite publier une version de mon application, je renomme l'un de ces fichiers de manifeste sur AndroidManifest.xml, j'expose l'application, puis fais la même chose pour l'autre Manifeste. C'est ma solution parce que c'est le meilleur que je pourrais proposer, et je ne connais pas d'autres moyens d'y parvenir. Cela fonctionne parce que la seule différence entre les versions Amazon et Google Market de ma demande, sont les classes de splash correspondantes, qui vérifient les licences et l'autre qui ne le fait pas.

    Sur la route, je souhaiterais peut-être mettre en œuvre des modifications supplémentaires (ou consolider uniquement un écran de démarrage) et je recherche un moyen plus permanent de gérer des modifications subtiles dans la même application.

    J'imagine que des problèmes similaires sont abordés lorsque les développeurs créent des versions payantes, gratuites ou ad-supported des applications payantes.

    Notes complémentaires:

    1. Pour la version qui utilise Google Licensing Android, je demande l'autorisation CHECK_LICENSE dans le fichier AndroidManifet.xml, alors que dans la version Amazon, cela n'est pas nécessaire.

    Je ne sais pas si cela devrait être considéré comme un wiki de la communauté, mais si oui, merci de le marquer en tant que tel, par opposition à la conclusion de la question. Je crois que cela serait utile pour beaucoup de développeurs là-bas.

  • Puis-je utiliser AdMob dans les applications Android publiées sur Amazon Appstore?
  • Comment configurer proguard pour amazon iap?
  • Questions sur la préparation d'un apk pour l'App Store d'Amazon
  • Comment prendre en charge les liens Amazon et Android Market (Google Play) dans le même APK
  • Est-ce que je reçois l'intention INSTALL_REFERRER de amazon app store?
  • Android équivaut au programme d'affiliation iTunes, streaming de musique api et profit share
  • 3 Solutions collect form web for “Comment puis-je supporter mon application Android pour plusieurs magasins Android?”

    Je commencerais par refactoriser votre base de code existante dans un projet de bibliothèque Android. C'est assez facile à faire. Assurez-vous de lire ceci. La documentation est assez clairsemée mais j'ai réussi à travailler avec elle. Veillez à suivre exactement la section "Déclaration des composants de la bibliothèque dans le fichier manifeste".

    Donc, pour refactoriser dans une bibliothèque, vous marquez essentiellement le projet existant en tant que projet de bibliothèque. Il vous suffit de cocher une case dans les paramètres des projets (voir le lien).

    Maintenant, allez à la bibliothèque et nous voulons changer le nom du package à quelque chose de différent. Ainsi, par exemple, si votre package de version publié est com.mywebsite.myappname.android_market, je renverrai cela à com.mywebsite.myappname.common_code

    Vous pouvez cliquer avec le bouton droit de la souris sur le projet et sélectionner Outils Android -> Renommer le package de l'application. Cette moitié a fonctionné pour moi. J'ai également dû renvoyer manuellement toutes les références dans le code à ma classe R. Vous pouvez simplement utiliser une substitution de recherche globale pour renommer à partir de com.mywebsite.myappname.android_market.R à com.mywebsite.myappname.common_code.R

    Maintenant, votre bibliothèque est prête

    Il est maintenant temps de faire le projet réel que vous construirez.

    Créez un nouveau projet and name avec le nom du package pour Android Market tel que com.mywebsite.myappname.android_market. Suivez les instructions sur le lien pour ajouter votre nouvelle bibliothèque commune en tant que bibliothèque utilisée par ce paquetage.

    Une limitation avec Android Library Projects est que le manifeste de la bibliothèque ne sera PAS fusionné dans le manifeste de votre projet de niveau supérieur. Vous devez le coller à la main. Aussi (voir le lien), vous devez vous assurer que tout dans votre manifeste utilise des noms de paquets entièrement qualifiés. Donc, si vous aviez des noms d'activité tels que Android: nom = ". SplashScreenActivity", modifiez-le sur Android: nom = "com.mywebsite.myappname.common_code.SplashScreenActivity"

    De même, vous devez fusionner tout à la main, y compris les autorisations, les intentions, les activités, etc.

    Maintenant, créez simplement le projet le plus haut et vous êtes bien. Créez une enveloppe pour chaque variante que vous souhaitez construire.

    Vous pourriez également avoir ces nouveaux projets de niveau supérieur implémenter tout ce qui est différent entre vos différentes versions. Ainsi, votre wrapper Android Market pourrait implémenter un écran de démarrage, et votre version Amazon est un écran de démarrage différent. Ou vous pouvez simplement utiliser un énoncé dans votre projet commun pour le conduire, gardez les deux écrans d'écoute là-bas.

    Une autre caractéristique intéressante est que les ressources dans le projet supérieur remplacent les ressources de la bibliothèque si elles sont fournies. Donc, si vous voulez, par exemple, sur votre splash, vous disposez d'un logo de la version Amazon et d'un logo Android Market qui change en fonction de la version, utilisez le même nom d'image que dans les espaces communs et mettez une copie différente dans les deux versions.

    Bien que n'étant pas directement lié à votre question, j'ai rencontré un barrage routier similaire pour créer des versions gratuites et payantes de ma demande. Android vous permet d'exporter n'importe quelle application en tant que bibliothèque. Vous pouvez trouver cette option dans les propriétés du projet dans Eclipse. Ainsi, en exportant votre application entière en tant que bibliothèque, vous pouvez l'intégrer à d'autres applications. Une fois que votre bibliothèque a été exportée, vous pouvez créer une application Amazon et Google utilisant la bibliothèque comme base. Cela vous empêchera d'avoir à renommer les fichiers XML pour obtenir chaque application dans un état utilisable.

    Les bibliothèques sont sympa parce que vous pouvez également associer des ressources avec elles. Vous pouvez même ajouter des ressources contenant le même nom dans les applications clientes et celles-ci écrasent la version de la bibliothèque. Donc, vous pourriez avoir différents éclaboussures en fonction du marché dans lequel votre application est disponible. Le seul endroit où les bibliothèques sont restées faibles pour moi incluait des actifs. Malheureusement, les actifs non traités ne seront pas inclus dans une application client à partir d'une bibliothèque.

    J'aimerais utiliser le contrôle de la version comme git et avoir trois branches. Une branche n'aurait pas de manifeste, cette branche principale aurait tout le code commun que vous pourriez mettre à jour une fois. Les deux autres branches seraient Amazon, Google et tout ce qui se pose. Ces branches disposeraient d'un code spécifique à l'application, du manifeste, des écrans éclaboussés, etc. Lorsque vous avez travaillé dans votre branche principale et que vous souhaitez envoyer des mises à jour, vous pouvez créer une branche temporelle hors du noyau appelée googleRelease (ou quelque chose) et fusionner votre succursale google.

    Il s'agit d'un exemple relativement générique, git est puissant et vous pouvez l'aborder de différentes façons.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.