Tenho 2 sabores de compilação, digamos, flavour1 e flavour2 .
Gostaria que meu aplicativo fosse nomeado, digamos, " AppFlavor1 " ao construir para o sabor1 e " AppFlavor2 " ao construir para o sabor 2.
Não é o título das atividades que desejo alterar. Desejo alterar o nome do aplicativo conforme ele é exibido no menu do telefone e em outros lugares.
Desde build.gradle
I pode configurar vários parâmetros para os meus sabores, mas, ao que parece, não o rótulo aplicativo. E não posso alterar o rótulo do aplicativo programaticamente com base em alguma variável também.
Então, como as pessoas lidam com isso?
sourceSets
bloco? Está embaixo doandroid{...}
bloco?android
bloco de fato.Remover
app_name
destrings.xml
(caso contrário, o gradle reclamará de recursos duplicados). Em seguida, modifique o arquivo de compilação assim:Certifique-se também de que o
@string/app_name
valor seja atribuído aoandroid:label
atributo no manifesto.Isso é menos perturbador do que criar novos
strings.xml
em diferentes conjuntos construídos ou escrever scripts personalizados.fonte
@string/app_name
para suaactivity
gravadora de iniciador ? Lembre-se de que dolabel
iniciador principalactivity
é usado em vez deapplication
label
para o nome de exibição do aplicativo.Se você deseja manter a localização para o nome do aplicativo em diferentes sabores, pode obtê-lo da seguinte maneira:
1) Especifique
android:label
em<application>
disponível daAndroidManifest.xml
seguinte forma:2) Especifique o valor padrão para
appLabel
no nível do aplicativobuild.gradle
:manifestPlaceholders = [appLabel:"@string/defaultName"]
3) Substitua o valor dos sabores do produto da seguinte forma:
4) Adicione recursos de string para cada uma das Strings (defaultName, flavour1, flavour2) em seu
strings.xml
. Isso permitirá que você os localize.fonte
Você pode adicionar um arquivo de recurso de strings a cada variação e, em seguida, usar esses arquivos de recurso para alterar o nome do seu aplicativo. Por exemplo, em um dos meus aplicativos, tenho uma versão gratuita e paga. Para renomeá-los como "Lite" e "Pro", criei um
meta_data.xml
arquivo, acrescentei meuapp_name
valor a esse XML e o removistrings.xml
. Em seguida,app/src
crie uma pasta para cada sabor (veja abaixo a estrutura de exemplo). Dentro desses diretórios, adicioneres/values/<string resource file name>
. Agora, quando você compilar, este arquivo será copiado em sua compilação e seu aplicativo será renomeado.Estrutura do arquivo:
fonte
Outra opção que eu realmente uso é alterar o manifesto de cada aplicativo. Em vez de copiar a pasta de recursos, você pode criar um manifesto para cada tipo.
Você precisa ter um AndroidManifest principal em seu src main que será o principal. Então você pode definir um manifesto com apenas algumas opções para cada sabor, como (src / release / AndroidManifest.xml):
Para depuração, AndroidManifest (src / debug / AndroidManifest.xml):
O compilador fará uma mesclagem do manifesto e você pode ter um ícone para cada sabor.
fonte
Isso pode ser facilmente realizado em buildTypes
Apenas certifique-se de remover app_name de strings.xml
fonte
Em primeiro lugar, responda a esta pergunta: "O usuário pode instalar as duas versões do seu aplicativo no mesmo dispositivo?"
Eu uso um script Python que corrige a fonte. Ele contém algumas funções reutilizáveis e, é claro, o conhecimento do que precisa ser corrigido neste projeto específico. Portanto, o script é específico do aplicativo.
Há muitos patches, os dados para patches são mantidos em um dicionário Python (incluindo nomes de pacotes de aplicativos, eles são diferentes do nome do pacote Java), um dicionário por variação.
Quanto a l10n, as strings podem apontar para outras strings, por exemplo, no meu código eu tenho:
fonte
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" >
. Depois de limpar e reconstruir tudo (duas vezes, uma por sabor), você deve obter dois apk-s com nomes de pacotes Android diferentes e rótulos de iniciador diferentes. BTW, o Eclipse geralmente não detecta mudanças nos recursos, então você tem que pedir para limpar.Como faço para tornar string / app_name diferente por sabor?
Eu queria escrever uma atualização, mas percebi que é maior do que a resposta original, dizendo que uso um script Python que corrige o código-fonte.
O script Python tem um parâmetro, um nome de diretório. Esse diretório contém ativos por tipo, recursos como ícones de inicialização e o arquivo properties.txt com um dicionário Python.
O script Python carrega o dicionário desse arquivo e substitui o valor entre
<string name="app_name">
e</string>
pelo valor deproperties['appTitle']
.O código a seguir é fornecido no estado em que se encontra, etc.
para ler propriedades de um ou mais desses arquivos:
e a função fileReplace é:
As primeiras linhas do script são:
fonte
No arquivo AndroidManifest, na tag do aplicativo, você tem esta linha:
E aí você pode dizer como o rótulo do aplicativo aparecerá no menu de aplicativos do dispositivo
fonte