Я занимаюсь разработкой приложения для Android двух типов: бесплатное и платное. Каждый ярус имеет 2 варианта: легкий и тяжелый.
Вот реализация Gradle этого:
flavorDimensions "tier", "distro"
productFlavors {
free {
dimension "tier"
}
premium {
dimension "tier"
}
lightweight {
dimension "distro"
}
heavy {
dimension "distro"
}
}
Я пытаюсь добавить зависимость .jar
для уровня премиум только . Способ добавить это довольно тривиально:
premiumImplementation fileTree(dir: 'libs', include: ['*.jar']) // Works
Проблема в том, что у меня есть две версии этого .jar
. По одному на каждую упомянутую выше подрывную деятельность: lightweight
и heavy
.
Я пытался применить тривиальное решение к этому типу зависимости:
premiumLightweightImplementation fileTree(dir: 'libs', include: ['*lightweight.jar'])
premiumHeavyImplementation fileTree(dir: 'libs', include: ['*heavy.jar'])
Но я получаю ошибку gradle:
Не удалось найти метод premiumLightweightImplementation () для аргументов
[каталог 'libs']
Конечно, это относится и к premiumHeavyImplementation.
Я уверен, что есть способ сделать то, что я прошу.
Я нашел два варианта решения этой проблемы:
- Хватит вообще использовать измерения (Плохое решение, мне придется самому написать все комбинации вкусов).
Реализовать функцию, которая получает текущий вариант, который я пытаюсь собрать, и использовать его возвращаемое значение в пути к каталогу. Например:
комбинация def = getCurrentFlavorCombination ()
premiumImplementation fileTree (dir: "комбинация libs / $", включает: ['* .jar'])
Это уродливые и ненадежные способы выполнить это простое требование:
С премиум-уровнем должен быть связан .jar - версия этого .jar зависит от другого измерения - дистрибутива.
Я не прошу слишком многого, но не смог найти в документации Gradle хороший способ сделать это. Я только нашел способы скомпилировать библиотеку в jar-файлы, но моя уже входит в jar-файлы, я только хочу связать ее соответствующим образом. Может, вы, ребята, можете помочь мне здесь.
Большое спасибо!