Добавить productFlavor в экспериментальную библиотеку плагинов Android gradle

У меня есть проект, в котором используется экспериментальный плагин gradle, т.е. 0.2.0. Когда у меня нет productFlavor, я могу полностью интегрировать библиотечный модуль в Android Studio, и все работает отлично. Но когда библиотека имеет productFlavor, основной проект не находит классы библиотеки.

Этот fix не работает с экспериментальным плагином gradle. Кто-нибудь знает, как сделать вкус с новым плагином?

Библиотека:

android.productFlavor {
    create ('flavor') {
        ...
    }
}

Проект:

...

dependencies {
    compile project(':mylibrary')
}

Ответ 1

Это может помочь?

Публикация библиотеки

По умолчанию библиотека публикует только свой вариант выпуска. Этот вариант будет использоваться всеми проектами, ссылающимися на библиотеку, независимо от того, какой вариант они создают сами. Это временное ограничение из-за ограничений Gradle, над которыми мы работаем.

Вы можете контролировать, какой вариант будет опубликован с

android { defaultPublishConfig "debug" }

Обратите внимание, что это имя конфигурации публикации ссылается на полное имя варианта. Выпуск и отладка применимы только в том случае, если нет вариантов. Если вы хотите изменить опубликованный вариант по умолчанию при использовании ароматов, вы должны написать:

android {defaultPublishConfig "flavor1Debug" }

Также можно публиковать все варианты библиотеки. Мы планируем разрешить это, используя обычную зависимость проекта от проекта (как показано выше), но сейчас это невозможно из-за ограничений в Gradle (мы также работаем над их исправлением). Публикация всех вариантов не включена по умолчанию. Чтобы включить их:

android {publishNonDefault true } 

Важно понимать, что публикация нескольких вариантов означает публикацию нескольких файлов AAR вместо одного AAR, содержащего несколько вариантов. Каждая упаковка содержит один вариант. Публикация варианта означает сделать этот файл доступным в качестве выходного артефакта проекта Gradle. Затем его можно использовать либо при публикации в репозитории maven, либо когда другой проект создает зависимость от проекта библиотеки.

У Gradle есть понятие "артефакт по умолчанию". Это тот, который используется при написании:

compile project(':libraries:lib2')

Чтобы создать зависимость от другого опубликованного артефакта, вам нужно указать, какой из них использовать:

dependencies {
    flavor1Compile project(path: ':lib1', configuration: 'flavor1Release')
    flavor2Compile project(path: ':lib1', configuration: 'flavor2Release') 
}

Важно: обратите внимание, что опубликованная конфигурация является полным вариантом, включая тип сборки, и на нее следует ссылаться как таковая. Важное замечание: При включении публикации не по умолчанию плагин Maven для публикации будет публиковать эти дополнительные варианты как дополнительные пакеты (с классификатором). Это означает, что это не совсем совместимо с публикацией в репозитории maven. Вам следует либо опубликовать один вариант в хранилище, либо включить публикацию всех конфигураций для межпроектных зависимостей.

Отсюда

Ответ 2

Синтаксис неверен.

С экспериментальным плагином (0.2.1) ароматы определяются вне блока android, а правый синтаксис android.productFlavors

model {
    android {

    }

    android.productFlavors {
        create("flavor") {

        }
    }
}

Ответ 3

Все немного сложнее. Я тестировал на gradle экспериментальном 0.8.0

в нужной библиотеке:

model{
    android {
    ...
    publishNonDefault true

     productFlavors {
                create("flavor1") {
                }
                create("flavor2") {
                }
            }
    }
}

в нужном приложении:

model {
    android {
    ...
    publishNonDefault true

     productFlavors {
                create("flavor1") {
                }
                create("flavor2") {
                }
            }
    }
}
//after the model is closed !!
configurations {
    flavor1DebugCompile
    flavor1ReleaseCompile

    flavor2DebugCompile
    flavor2ReleaseCompile
}

dependencies {
...
 flavor1DebugCompile project(path: ':mylibrary', configuration: 'flavor1Debug')

flavor1ReleaseCompile project(path: ':mylibrary', configuration: 'flavor1Release')

 flavor2DebugCompile project(path: ':mylibrary', configuration: 'flavor2Debug')

flavor2ReleaseCompile project(path: ':mylibrary', configuration: 'flavor2Release')

  }

надеюсь, если вы запустите полную сборку, вы получите 2 апки, по одному на каждый вкус. Я использовал "./gradlew build" из cmd и получил их. обратите внимание, что для вашей библиотеки вы получите AAR для каждого вкуса.