In build.gradle
, ich habe Produkt Aromen ein:Android, Gradle, Produkt Aromen und das Manifest
productFlavors
{
AlternateFlavour
{
applicationId "com.myapp.alternateflavour"
}
}
Dann im sourceSets Abschnitt, verwende ich andere Ressource, Vermögen und manifestieren Verzeichnisse für diese Aromen:
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 so weit.
In diesem manifest durch das Aroma verwendet werden, die automatisch erzeugten teil ist, habe ich:
<?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" >
:
<?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" >
aber in der ursprünglichen manifest in dem Stammprojekt wie folgt ist Dies bewirkt, dass Gradle zum scheitern verurteilt:
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.
Warum es versucht, MERG e mit dem ursprünglichen Manifest überhaupt, wenn ich es spezifiziert habe, sollte es woanders suchen?
Und wie kann ich das stoppen?
Ich erwarte, dass einige fragen werden, warum ich es auf diese Weise überhaupt mache, oder tatsächlich, warum ich nicht die vorgeschlagene Geschmacksprojektstruktur verwende. Nun, ich brauche ein normales Manifest außerhalb von Gradle, z. Für die Bereitstellung von Eclipse (bitte eins nach dem anderen) und ich brauche auch Versionen, die vom Build-Prozess injiziert werden.
Also zuerst, es gibt viele Geschmacksrichtungen hier - ich habe nur versucht, das gegebene Beispiel einfach zu halten. Ich kann nicht (AFAIK) mit dem Entfernen der Attribute aus dem ursprünglichen Manifest davonkommen, da dies der von der IDE-Bereitstellung verwendete ist. Allerdings könnte ich möglicherweise eine dritte ohne die Attribute erstellen und Gradle standardmäßig verwenden. Scheint übertrieben! –
@RobPridham: "Das ist das von der IDE-Bereitstellung verwendete Format" - Wenn Sie Android Studio verwenden, steuert das Tool zum Erstellen von Varianten, was von der IDE verwendet wird. – CommonsWare
In der Tat. Leider noch nicht - immer noch mit Eclipse und ADT für diese Entwicklung, für eine Vielzahl von guten (wenn auch weniger gut über Zeit) Gründen. –