Estou usando um projeto gradle com muitas dependências de bibliotecas diferentes e usando a nova fusão de manifestos. Na minha <application />
tag, eu o configurei assim:
<application tools:replace="android:icon, android:label, android:theme, android:name"
android:name="com.example.myapp.MyApplcation"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/application_name"
android:logo="@drawable/logo_ab"
android:theme="@style/AppTheme"
>
....
</application>
No entanto, estou recebendo o erro:
/android/MyApp/app/src/main/AndroidManifest.xml:29:9 Error:
Attribute application@icon value=(@drawable/ic_launcher) from AndroidManifest.xml:29:9
is also present at {Library Name} value=(@drawable/app_icon)
Suggestion: add 'tools:replace="android:icon"' to <application> element at AndroidManifest.xml:26:5 to override
/android/MyApp/app/src/main/AndroidManifest.xml:30:9 Error:
Attribute application@label value=(@string/application_name) from AndroidManifest.xml:30:9
is also present at {Library Name} value=(@string/app_name)
Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:26:5 to override
/android/MyApp/app/src/main/AndroidManifest.xml:27:9 Error:
Attribute application@name value=(com.example.myapp.MyApplication) from AndroidManifest.xml:27:9
is also present at {Another Library}
Suggestion: add 'tools:replace="android:name"' to <application> element at AndroidManifest.xml:26:5 to override
/android/MyApp/app/src/main/AndroidManifest.xml:32:9 Error:
Attribute application@theme value=(@style/AppTheme) from AndroidManifest.xml:32:9
is also present at {Library Name} value=(@style/AppTheme)
Suggestion: add 'tools:replace="android:theme"' to <application> element at AndroidManifest.xml:26:5 to override
android
android-gradle-plugin
agrosner
fonte
fonte
<application>
tag repetida no projeto. Pls garantir que há apenas um<application>
.Respostas:
Declare o cabeçalho do manifesto assim
Em seguida, você pode adicionar à sua tag de aplicativo o seguinte atributo:
Por exemplo, preciso substituir o ícone e o rótulo. Boa sorte!
fonte
tools:node="replace"
:<meta-data tools:node="replace" android:name="QUERY_LOG" android:value="true" />
etc.tools:replace
à minha tag de aplicativo que deve substituí-lo e não a fonte que deve ser substituída. Portanto, meus manifestos de aplicativos substituem o que está definido na minha biblioteca. Você diz "o que deve ser substituído" em vez de "o que pode ser substituído". Espero que isso limpe as perguntas.tools:replace="android:versionCode, android:versionName"
deve estar dentro<manifest >
.Corrigi o mesmo problema. Solução para mim:
xmlns:tools="http://schemas.android.com/tools"
linha na tag manifesttools:replace=..
na tag manifestandroid:label=...
na tag manifestExemplo:
fonte
<manifest>
diretamente ao invés de abaixo<application>
foi a única coisa que corrigiu meu problema.Tente reordenar suas dependências no arquivo gradle. Eu tive que mover a biblioteca ofensiva da parte inferior da lista para o topo, e então funcionou.
fonte
Acabei de experimentar o mesmo comportamento
tools:replace=...
descrito pelo OP.Descobriu-se que a causa principal por
tools:replace
ser ignorada pela fusão do manifesto é um bug descrito aqui . Basicamente, significa que, se você possui uma biblioteca em seu projeto que contém um manifesto com um<application ...>
nó que contém umtools:ignore=...
atributo, pode acontecer que otools:replace=...
atributo no manifesto do seu módulo principal seja ignorado.O ponto complicado aqui é que isso pode acontecer, mas não precisa. No meu caso, eu tinha duas bibliotecas, a biblioteca A com o
tools:ignore=...
atributo, a biblioteca B com os atributos a serem substituídos nos respectivos manifestos e otools:replace=...
atributo no manifesto do módulo principal. Se o manifesto de B foi mesclado no manifesto principal antes do manifesto de A, tudo funcionou conforme o esperado. Na ordem de mesclagem oposta, o erro apareceu.A ordem em que essas fusões acontecem parece ser um pouco aleatória. No meu caso, alterar a ordem na seção de dependências
build.gradle
não teve efeito, mas alterar o nome do sabor fez isso.Portanto, a única solução confiável parece ser descompactar o problema que está causando a biblioteca, remover a
tools:ignore=...
tag (o que não deve ser problema, pois é apenas uma dica para o fiapo) e empacotar a biblioteca novamente.E vote na correção do bug, da causa.
fonte
<manifest>
nó a partir do<application>
nó e funcionou.Solução de trabalho final para mim (destacadas as vantagens no código de exemplo):
xmlns:tools
linha na tag manifesttools:replace
a tag do aplicativoExemplo:
fonte
A peça que faltava para mim era esta:
por exemplo:
fonte
Você pode substituir os da tag do aplicativo Manifest:
e funcionará para você.
fonte
tools:replace="android:label"
a aplicação, mas ele não funcionaCORRIGIDO COM ERRO EXATO, basta adicionar estas ferramentas: replace = "android: icon, android: theme"
na tag do aplicativo no manifesto, funciona muito bem,
fonte
Você pode substituir aqueles em sua
application
tag de manifesto :e funcionará para você.
Explicação
O uso de uma dependência / biblioteca em seu
gradle
arquivo com esses rótulos na tag de aplicativo do manifesto pode produzir esse problema e substituí-los na suaManifest
é a solução.fonte
O seguinte hack funciona:
xmlns:tools="http://schemas.android.com/tools"
linha na tag manifesttools:replace="android:icon,android:theme,android:allowBackup,label"
a tag do aplicativofonte
Meu problema é projeto de múltiplos módulos com módulo base, módulo de aplicativo e módulo de recurso. Cada módulo possui o AndroidManifest próprio e eu implementei a variante de compilação para depuração e principal. Portanto, devemos garantir que "android: name" seja declarado apenas no Manifest de depuração e apenas no main, e não o configure em nenhum dos módulos Manifest no filho. Ex: Manifesto principal:
Manifesto na depuração:
Não defina "android: name" em outros arquivos de manifesto como este:
Basta definir no módulo de recursos como este e ele será mesclado
fonte
Eu estava recebendo um erro semelhante em um projeto que estava importando:
Corrigido após alterar a linha abaixo na tag do aplicativo:
para
fonte
Eu também passei por esse problema e mudei isso:
para
fonte
fonte