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

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

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

Библиотека:

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

Проект:

...

dependencies {
    compile project(':mylibrary')
}

3 ответа

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

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

По умолчанию библиотека публикует только свой вариант выпуска. Этот вариант будет использоваться всеми проектами, ссылающимися на библиотеку, независимо от того, какой вариант они создают сами. Это временное ограничение из-за ограничений 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. Вам следует либо опубликовать один вариант в хранилище, либо включить публикацию всех конфигураций для межпроектных зависимостей.

Отсюда: http://tools.android.com/tech-docs/new-build-system/user-guide

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

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

model {
    android {

    }

    android.productFlavors {
        create("flavor") {

        }
    }
}

Все немного сложнее. Я тестировал на 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 apk, по одному для каждого аромата. Я использовал "./gradlew build" из cmd и получил их. обратите внимание, что для вашей библиотеки вы также получите AAR для каждого аромата

Другие вопросы по тегам