Meu aplicativo tem vários sabores para diversos mercados de sistemas de faturamento no aplicativo.
Tenho uma única biblioteca que compartilha o código base de todos os meus projetos. Portanto, decidi adicionar esses sistemas de pagamento a esta biblioteca como variações de produtos.
A questão é: a biblioteca do Android pode ter variações de produtos?
Em caso afirmativo, como posso incluir diferentes sabores nos respectivos sabores do aplicativo?
Procurei muito e não consegui encontrar nada sobre esse cenário. A única coisa próxima que encontrei foi em http://tools.android.com/tech-docs/new-build-system/user-guide :
dependencies {
flavor1Compile project(path: ':lib1', configuration: 'flavor1Release')
flavor2Compile project(path: ':lib1', configuration: 'flavor2Release')
}
Mudei a configuração para coisas diferentes mas não funcionou!
Estou usando o Android Studio 0.8.2.
3.4.2
versão e o gradle para a última5.5.1
, ainda falhou com o tempo de compilação, ou a vinculação de recursos falhou no aapt, ou não consigo encontrar o símbolo dentro da biblioteca móduloRespostas:
Finalmente descobri como fazer isso, vou explicar aqui para outras pessoas que enfrentam o mesmo problema:
A parte principal é definir publishNonDefault como true na biblioteca build.gradle. Em seguida, você deve definir dependências conforme sugerido pelo guia do usuário.
Todo o projeto seria assim:
Biblioteca build.gradle:
projeto build.gradle:
Agora você pode selecionar a variação do aplicativo e o painel Build Variants e a biblioteca será selecionada de acordo e toda a construção e execução serão feitas com base na variação selecionada.
Se você tiver vários módulos de aplicativos baseados na biblioteca, o Android Studio reclamará sobre o conflito de seleção de variantes. Tudo bem, apenas ignore.
fonte
Há um problema com a resposta de Ali . Estamos perdendo uma dimensão muito importante em nossas variantes de construção. Se quisermos ter todas as opções (no meu exemplo abaixo de 4 (2 x 2)), só temos que adicionar configurações personalizadas no arquivo build.gradle do módulo principal para poder usar todos os multi-flavour multi-buildType no
Build Variants
. Também temos que definir publishNonDefault true no arquivo build.gradle do módulo de biblioteca .Solução de exemplo:
Lib build.gradle
App build.gradle
fonte
Error:java.lang.RuntimeException: Error: more than one library with package name
, occouredAtualização para Android Plugin 3.0.0 e superior
De acordo com a documentação oficial do Android - Migrar configurações de dependência para módulos locais ,
Então, na resposta de Ali, mude
para
E o plugin cuidará das configurações específicas das variantes automaticamente. Espero que ajude outras pessoas que estão atualizando o plug-in do Android Studio para 3.0.0 e superior.
fonte
Meu plug-in do Android é 3.4.0 e acho que ele não precisa de configurações agora. Tudo o que você precisa é garantir que flavourDimensions e productFlavors no aplicativo contenham um productFlavor do mesmo flavourDimensions e productFlavors nas bibliotecas.Para amostra:
No build.gradle da minha biblioteca
build.gradle do aplicativo:
Após a sincronização, você pode alternar todas as opções na janela Build Variants:
fonte
Para fazer os sabores funcionarem em uma biblioteca AAR, você precisa definir defaultPublishConfig no arquivo build.gradle de seu módulo de biblioteca Android.
Para obter mais informações, consulte: Publicação da biblioteca .
fonte
No momento não é possível, embora se bem me lembro seja um recurso que eles querem adicionar. (Editar 2: link , link2 )
Editar: no momento, estou usando a
defaultPublishConfig
opção de declarar qual variante da biblioteca foi publicada:fonte
Eu sei que este assunto foi encerrado, mas apenas uma atualização com o gradle 3.0, veja isto: https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#variant_aware e grep
matchingFallbacks
emissingDimensionStrategy
. Agora é muito mais simples declarar as dependências entre os tipos de módulo.... e neste caso preciso com gradle3.0, como os sabores compartilham o mesmo nome, o gradle os mapeia magicamente, não há configuração necessária.
fonte
Também tive um problema ao compilar módulos para várias opções.
O que eu encontrei:
Parece que não precisamos adicionar
publishNonDefault true
aobuild.gradle
arquivo lib , desde o Gradle 3.0.1 .Depois de descompilar uma classe,
BaseExtension
descobri o seguinte:E em vez de:
Devemos usar:
O importante é adicionar uma
configurations {...}
parte aobuild.gradle
.Portanto, a variante final do
build.gradle
arquivo do aplicativo é:Além disso, você pode usar as variantes de filtro para restringir as variantes de compilação.
PS não se esqueça de incluir módulos no
settings.gradle
arquivo, como:fonte