Ошибка вкуса продукта Android Gradle в дочерней библиотеке

Эта проблема должна решить мою другую проблему, когда мне нужно обновить поставщика содержимого дочерних библиотек: Использование типов сборки в библиотеках Gradle для запуска того же приложения, которое использует ContentProvider, на одном устройстве

У меня есть вариант продукта в корневом приложении, которое успешно меняет имя пакета, поэтому я могу развертывать разные версии приложения. Когда я пытаюсь добавить тот же вкус продукта в дочернюю библиотеку, сборка завершается сбоем, потому что корневое приложение не может загрузить класс Java, на который ссылается дочерняя библиотека, потому что теперь имя пакета изменилось? Я думал, что вкусы продуктов не влияют на структуру пакета классов Java?

Корневое приложение ATCApp.gradle

...
dependencies {
...
compile project(':libraries:FYC')
...
}

...
android
{
    ...
    productFlavors
    {
        prod {
           packageName "com.company.android"
        }

        qa {
           packageName "com.company.android.qa"
        }
    }
}

Дочерняя библиотека FYC.gradle

...
android
{
    ...
    productFlavors
    {
        prod {
           resValue "string", "authority", "com.company.android.fyc.models.listing.listingprovider"
        }

        qa {
           resValue "string", "authority", "com.company.android.qa.fyc.models.listing.listingprovider"
        }
    }
}

Добавление вышеуказанных вариантов продукта в дочернюю библиотеку FYC приводит к тому, что корневое приложение выдает ошибку:

/src/main/java/com/company/android/HomeBroadcastReceiver.java:7: пакет com.company.android.fyc.controllers не существует import com.company.android.fyc.controllers.FYCHomePagerActivity;

Спасибо за любую помощь!


person FinHead    schedule 11.07.2014    source источник


Ответы (1)


Я почти уверен, что вы не можете делать зависимости от ароматов (также называемых цепочками ароматов), поскольку Gradle не предлагает способа выразить такую ​​​​вещь. Ваш корневой проект может иметь различные зависимости в зависимости от варианта, но сами эти зависимости не могут быть явными вариантами. Результат подпроектов должен быть предсказуемым и последовательным.

person Jeff Brateman    schedule 11.07.2014
comment
Вау, это плохо, потому что тогда я не могу настроить поставщика контента в зависимости от вкуса продукта, и мне придется вручную менять поставщика контента всякий раз, когда мне нужна новая сборка QA. - person FinHead; 14.07.2014
comment
Я уверен, что вы можете извлечь специфическую логику в свой родительский проект и передать ее в проект своей библиотеки. - person Jeff Brateman; 14.07.2014
comment
Это восходит к решению моей первоначальной проблемы: contentprovider" title="использование типов сборки в библиотеках Gradle для запуска того же приложения, которое использует contentprovider"> stackoverflow.com/questions/24644274/. У меня есть ContentProvider в проекте библиотеки, но когда я запускаю QA-версию приложения, мне нужно изменить имя пакета провайдера. - person FinHead; 15.07.2014