In build.gradle
, ho sapori di prodotti configurare:Android, Gradle, sapori di prodotto e il manifesto
productFlavors
{
AlternateFlavour
{
applicationId "com.myapp.alternateflavour"
}
}
Poi nella sezione sourceSets, io uso diverse risorse, le attività e le directory di manifesto per quei sapori:
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
AlternateFlavour {
manifest.srcFile 'manifest-tmp/AlternateFlavour/AndroidManifest.xml'
java.srcDirs = ['src']
res.srcDirs = ['res-tmp/AlternateFlavour']
assets.srcDirs = ['assets-tmp/AlternateFlavour']
}
}
OK finora.
In questo manifesto in uso dal sapore, che è in parte generato automaticamente, ho:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp.myapp"
android:versionCode="1010001"
android:versionName="V1.1.0.1" >
ma nel manifesto originale nel progetto principale è la seguente:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp.myapp"
android:versionCode="1010000"
android:versionName="V1.1.0.DEBUG" >
Questo fa sì che Gradle a fallire:
Error:
Attribute [email protected] value=(1010001) from AndroidManifest.xml:4:5-28
is also present at AndroidManifest.xml:4:5-28 value=(1010000).
Attributes of <manifest> elements are not merged.
Perché è cercando di Merg e con il manifest originale, quando ho specificato dovrebbe cercare altrove?
E come posso fermarlo?
Mi aspetto che alcuni si chiederanno perché lo sto facendo in questo modo, o addirittura perché non sto usando la struttura del progetto di sapore suggerito. Bene, ho bisogno di un manifest normale da usare al di fuori di Gradle, ad es. per la distribuzione da Eclipse (una cosa alla volta, per favore!) e ho bisogno anche di versioni da iniettare dal processo di compilazione.
Quindi, prima di tutto, c'è un sacco di sapori qui - ho solo cercato di mantenere l'esempio dato semplice. Non posso (AFAIK) farla franca con la rimozione degli attributi dal manifest originale perché è quella usata dalla distribuzione IDE. Comunque potrei creare un terzo, senza gli attributi, e Gradle usarlo di default. Sembra eccessivo! –
@RobPridham: "quello utilizzato dalla distribuzione IDE": se si utilizza Android Studio, lo strumento Varianti di generazione controlla ciò che viene utilizzato dall'IDE. – CommonsWare
Infatti. Non ancora purtroppo - utilizzando ancora Eclipse e ADT per questo sviluppo, per una varietà di buone ragioni (anche se meno buone nel tempo). –