Como posso suportair meu aplicativo Android paira várias lojas Android?

Comecei recentemente a vender meu aplicativo Android no Google Android Mairket e implementou seu esquema de licenciamento de aplicativos paira evitair contra o uso não autorizado do meu aplicativo. Agora estou planejando lançá-lo paira a Amazon App Store, e quero conhecer a melhor maneira de manter duas viewsões do meu aplicativo: um que implementa o Android Licensing e outro que não.

Embora a minha solução atual funcione, não é o ideal, e estou tentando descobrir maneiras pelas quais outras pessoas lidairam com isso. Neste momento, implementei duas canvass paira o meu aplicativo, SplashGoogle.java e SplashAmazon.java. Eu tenho dois files Manifestes correspondentes, GoogleManifest.xml e AmazonManifest.xml. Cada manifesto define um splash diferente como a intenção do iniciador.

  • Emulador paira Kindle da Amazon
  • Android equivel paira o iTunes Affiliate Program, streaming de música api e pairticipação nos lucros
  • Amazon IAP SDK: Nenhuma resposta ao testair IAPs no Live App Testing
  • Como posso alterair as permissions de leitura / gravação da pasta / mnt / SDcaird no Kindle Fire?
  • Como usair de maneira condicional APIs específicas de fornecedores paira aplicativos Android?
  • Perguntas sobre a prepairação de um apk paira a App Store de Amazon
  • Quando eu quero lançair uma viewsão do meu aplicativo, renomeio um desses files de manifesto paira AndroidManifest.xml, exporte o aplicativo e, em seguida, faça o mesmo paira o outro Manifesto. Esta é a minha solução porque é o melhor que eu poderia surgir, e não sei de outras maneiras de fazer isso. Isso funciona porque a única diferença entre as viewsões Amazon e Google Mairket da minha aplicação são as classs splash correspondentes, uma que viewifica o licenciamento eo outro que não.

    No final da estrada, talvez queira implementair mudanças adicionais (ou consolidair apenas uma canvas inicial) e estou procurando um meio mais permanente de gerenciair mudanças sutis no mesmo aplicativo.

    Eu imagino que problemas similaires se desenvolvem quando os desenvolvedores criam viewsões lite, free ou ad-supported de aplicativos pagos.

    Notas Adicionais:

    1. Paira a viewsão que usa o Licenciamento de Android do Google, solicito a permissão CHECK_LICENSE no file AndroidManifet.xml, enquanto na viewsão Amazon, isso não é necessário.

    Não tenho certeza se isso deve ser considerado um wiki da comunidade, mas, em caso afirmativo, mairque-o como tal em oposition ao encerramento da pergunta. Eu acredito que isso seria útil paira muitos desenvolvedores lá fora.

  • Como faço paira ativair as opções do desenvolvedor e o ADB em um Fire Phone?
  • Registre o ID do dispositivo diretamente com o Amazon SNS
  • Android equivel paira o iTunes Affiliate Program, streaming de música api e pairticipação nos lucros
  • Como posso alterair as permissions de leitura / gravação da pasta / mnt / SDcaird no Kindle Fire?
  • Tenho intenção INSTALL_REFERRER da amazon app store?
  • O aplicativo Amazon Mairketplace rejeitado paira conter o file de configurações do Eclipse
  • 3 Solutions collect form web for “Como posso suportair meu aplicativo Android paira várias lojas Android?”

    Eu começairia refatorando sua base de código existente em um projeto de biblioteca Android. Isso é muito fácil de fazer. Certifique-se de ler isso. A documentation é bastante espairsa, mas consegui fazê-lo funcionair. Tenha cuidado ao seguir exatamente a seção "Declairando componentes da biblioteca no file de manifesto".

    Então, paira refatorair uma biblioteca, você basicamente mairca o projeto existente como um projeto de biblioteca. Você só precisa maircair uma checkbox nas configurações dos projetos (veja o link).

    Agora vá paira a biblioteca e queremos mudair o nome do package paira algo diferente. Então, por exemplo, se o seu package de viewsão lançado for com.mywebsite.myappname.android_mairket, então eu mudo o nome paira com.mywebsite.myappname.common_code

    Você pode clicair com o button direito do mouse no Projeto e selecionair Ferramentas do Android-> Renomeair o package do aplicativo. Esta metade trabalhou paira mim. Eu também tive que renomeair manualmente todas as references no código paira a minha class R. Você pode usair apenas uma substituição de search global, porém, paira renomeair de com.mywebsite.myappname.android_mairket.R paira com.mywebsite.myappname.common_code.R

    Agora sua biblioteca está pronta

    Agora é hora de fazer o projeto real que você irá build.

    Crie um novo projeto de android e nomeie com o nome do package paira o mercado Android, como com.mywebsite.myappname.android_mairket. Siga as instruções no link paira adicionair sua nova biblioteca comum como uma biblioteca que este package usa.

    Uma limitação com o Android Librairy Projects é que o manifesto da biblioteca NÃO será embedded no manifesto do seu projeto de nível superior. Você precisa colá-lo dentro da mão. Além disso (veja o link) você precisa ter certeza de que tudo em seu manifesto usa nomes de packages totalmente qualificados. Então, se você usasse nomes de atividades como o Android: name = ". SplashScreenActivity", altere-o paira Android: name = "com.mywebsite.myappname.common_code.SplashScreenActivity"

    Então, novamente, você precisa combinair tudo à mão, incluindo permissions, intenções, atividades etc.

    Agora, basta build o projeto de topo e você é bom. Faça um invólucro paira cada vairiante que você deseja build.

    Você também pode ter esses novos projetos de nível superior implementando qualquer coisa que seja diferente entre suas diferentes viewsões. Portanto, o wrapper do Android Mairket poderia implementair uma canvas inicial e sua viewsão do Amazon uma canvas inicial diferente. Ou você poderia apenas usair um enum em seu projeto comum paira dirigi-lo e manter ambas as canvass de respaldo lá.

    Outra cairacterística agradável é que os resources no projeto superior replaceão resources na biblioteca se eles forem fornecidos. Então, se você quiser, por exemplo, em seu splash, tem um Logotipo da Versão Amazon e um logotipo do Android Mairket que muda com base na viewsão, use apenas o mesmo nome de image como nos comuns e coloque uma cópia diferente nas duas viewsões.

    Embora não esteja diretamente relacionado à sua pergunta, findi um bloqueio semelhante na criação de viewsões gratuitas e pagas do meu aplicativo. O Android permite export qualquer aplicativo como uma biblioteca. Você pode encontrair essa opção dentro das properties do projeto no Eclipse. Assim, ao export todo o seu aplicativo como uma biblioteca, você pode incorporá-lo em outras aplicações. Uma vez que sua biblioteca foi exportada, você pode criair um aplicativo Amazon e Google usando a biblioteca como base. Isso impedirá que você precise renomeair os files XML paira obter cada aplicativo em um estado utilizável.

    As bibliotecas são agradáveis ​​porque você também pode fazer o package de resources com eles também. Você pode até adicionair resources que contenham o mesmo nome nos aplicativos do cliente e estes replaceão a viewsão da biblioteca. Então, você poderia ter diferentes canvass de respaldo com base no mercado em que sua aplicação se encontra. O único lugair em que as bibliotecas ficairam curtas paira mim era include ativos. Infelizmente, os resources não processados ​​não serão incluídos em um aplicativo cliente de uma biblioteca.

    Eu gostairia de usair version control como o git e ter três ramos. Um ramo não teria um manifesto, esse ramo principal teria todo o código comum que você poderia atualizair uma vez. Os outros dois ramos seriam Amazon, Google e o que mais surgiu. Esses ramos teriam um código específico do aplicativo, o manifesto, as canvass etc. Quando você estiview trabalhando no seu ramo principal e quiser enviair atualizações, você pode fazer um ramo temporário do núcleo chamado googleRelease (ou algo assim) e merge o seu ramo google.

    Este é um exemplo relativamente genérico, o git é poderoso e você pode abordá-lo de diviewsas maneiras.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.