Como posso gerenciar melhor as Strings de filtro do Android Intent em vários projetos?

8

No meu projeto IntentExamples, eu tenho esse filtro, correspondente a um serviço.

<intent-filter>
                <action android:name="biz.rpcodes.apps.intentexamples.START_SERVICE" />
</intent-filter>

Em outro projeto, UseExampleService, tenho algo como:

Intent i = new Intent("biz.rpcodes.apps.intentexamples.START_SERVICE");
                startService(i);

... guiado por esta resposta: https://stackoverflow.com/a/16439551/5181778

Minha pergunta é: Como posso gerenciar melhor essas seqüências de filtros de intenção em vários projetos? A melhor solução que tenho agora é criar uma classe que estou copiando e colando do projeto Service nos outros projetos, ou seja:

class ExampleServiceIntents {
public static final String ExampleServiceIntents.START_SERVICE = 
    "biz.rpcodes.apps.intentexamples.START_SERVICE";
...

Embora eu possa importar as classes de Serviço, new Intent(this, ExampleService.class)gostaria de manter as classes de Serviço em seu próprio projeto.

Rick Page
fonte
Por que você deseja manter o serviço em um projeto separado? Isso apenas introduz a possibilidade de o aplicativo com o Servicenão estar instalado. E você sempre pode criar uma biblioteca que contenha essas constantes e depois usá-la em cada projeto.
Xaver Kapeller #
Atualmente, tenho bibliotecas e acho difícil no Android Studio importá-las. Normalmente, o Android Studio quebra algo e me resta copiar arquivos um por um. (Questões / problemas separados) Além disso, esses aplicativos são internos, posso controlar os requisitos, isso não é para o Google Play Store etc. Além disso, os três aplicativos não precisam dos três aplicativos que executam o mesmo código; de certa forma, é melhor colocar solicitações na fila em um processo para o nosso design. (Um monte de explicar)
Rick Página
Como é complicado importá-los? Você vai quebrar muito mais copiando as classes por si só e depois copiando os módulos de trabalho completos. E por que você não está usando um servidor maven como o SonarQube ou o Artifactory para hospedar suas bibliotecas internas? A importação da biblioteca seria como importar qualquer outro projeto maven - adicionando uma linha no build.gradle.
Xaver Kapeller
"quebrar muito mais" Sim, totalmente. Mas a única maneira que consegui usar os módulos foi importando-os; nesse caso, o Android Studio copia todos os arquivos. "... servidor maven" Obrigado pela sugestão, vou analisar isso.
Rick Página

Respostas:

1

Bibliotecas compartilhadas do Android ou links simbólicos dependentes do sistema operacional.

Opção 1: Biblioteca Android compartilhada

Uma biblioteca Android formal importada para cada projeto.

Prós : Digite segurança. Plataforma cruzada e funciona com controle de origem. Verificação completa de sintaxe e suporte ao editor.

Contras : Ainda é um pouco chato importar projetos como bibliotecas pelos editores atuais (Android Studio ou Eclipse com ADT), pois eles não oferecem interfaces muito boas para fazer isso. Se você precisar executar essa tarefa com frequência, mas não com tanta frequência, se lembrar de todas as etapas de cada vez, talvez isso não valha a pena. Mas se é uma ou duas vezes, para começar, você não precisa fazer isso novamente, não é tão ruim.

Opção 2 Links Simbólicos

Vincule simbolicamente um arquivo de origem comum em cada projeto. Os dois projetos verão o arquivo e as alterações, para que possam permanecer sincronizados.

Prós : muito mais simples de implementar.

Contras : Links simbólicos não funcionam tão bem com ferramentas de controle de origem. Não é multiplataforma (para desenvolvimento), pois os links simbólicos são muito diferentes de um sistema operacional para outro. Não é claro para um novo desenvolvedor que entra no projeto que as mudanças em um são automaticamente compartilhadas com o outro.


Portanto, como a opção de links simbólicos tem mais contras do que profissionais, geralmente recomendo a solução de biblioteca compartilhada para a maioria dos projetos. Mas, se seu projeto em particular não precisar dos recursos da coluna contras do link simbólico, provavelmente será mais fácil. Depende.

PS: existe uma terceira opção terrível de ter um terceiro aplicativo Android completo que oferece um provedor de dados Android que oferece os valores das strings. Mas, nesse ponto, você precisa se comunicar com esse aplicativo com cadeias especiais que também precisam ser compartilhadas; portanto, você está apenas adicionando uma etapa de abstração, mas não resolveu o problema.

Mufasa
fonte
Idéia interessante sobre o provedor. Mas, um passo atrás, eu concordo. Obrigado por reconhecer que os editores atuais "não oferecem interfaces muito boas para fazer" biblioteca compartilhada do Android e pelos prós e contras.
Rick Página