У моего приложения есть несколько вариантов для систем биллинга приложений на нескольких рынках.
У меня есть одна библиотека, в которой используется общий базовый код для всех моих проектов. Поэтому я решил добавить эти платежные системы в эту библиотеку как разновидности продукта.
Вопрос в том, может ли библиотека Android содержать разные продукты?
Если да, то как я могу включить разные вкусы в соответствующий вкус приложения?
Я много искал и ничего не нашел об этом сценарии. Единственная близкая вещь, которую я нашел, это http://tools.android.com/tech-docs/new-build-system/user-guide :
dependencies {
flavor1Compile project(path: ':lib1', configuration: 'flavor1Release')
flavor2Compile project(path: ':lib1', configuration: 'flavor2Release')
}
Я изменил конфигурацию на разные вещи, но это не сработало!
Я использую android studio 0.8.2.
3.4.2
обновляю плагин Android до последней версии и градиент до последней версии5.5.1
, он все еще не выдерживает время компиляции, или сбой при связывании ресурсов в aapt, или не удается найти символ, который внутри библиотеки модульОтветы:
Наконец я узнал, как это сделать, я объясню это другим, столкнувшимся с такой же проблемой:
Ключевой частью является установка для publishNonDefault значения true в библиотеке build.gradle. Затем вы должны определить зависимости, как предложено в руководстве пользователя.
Весь проект будет таким:
Библиотека build.gradle:
проект build.gradle:
Теперь вы можете выбрать вариант приложения и панель «Варианты сборки», и библиотека будет выбрана соответствующим образом, а вся сборка и запуск будут выполняться на основе выбранного варианта.
Если у вас есть несколько модулей приложения на основе библиотеки, Android Studio будет жаловаться на конфликт выбора варианта. Ничего страшного, просто проигнорируйте его.
источник
Есть одна проблема с ответом Али . Мы теряем одно очень важное измерение в наших вариантах сборки. Если мы хотим иметь все параметры (в моем примере ниже 4 (2 x 2)), нам просто нужно добавить пользовательские конфигурации в файл build.gradle основного модуля, чтобы иметь возможность использовать все multi-разновидности multi-buildType в
Build Variants
. Мы также должны установить publishNonDefault в true в файле build.gradle библиотечного модуля .Пример решения:
Библиотека build.gradle
Приложение build.gradle
источник
Error:java.lang.RuntimeException: Error: more than one library with package name
произошелОбновление для Android Plugin 3.0.0 и выше
Согласно официальной документации Android - перенос конфигураций зависимостей для локальных модулей ,
Итак, в ответе Али измените
к
И плагин автоматически позаботится о конкретных вариантах конфигурации. Надеюсь, это поможет другим обновить плагин Android Studio до версии 3.0.0 и выше.
источник
Мой Android-плагин - 3.4.0, и я считаю, что сейчас он не нуждается в настройках. Все, что вам нужно, это убедиться, что в приложениях flavourDimensions и productFlavors содержится один продуктFlavor с одинаковыми настройками flavourDimensions и productFlavors в библиотеках.
В build.gradle mylibrary
build.gradle приложения:
После синхронизации вы можете переключить все параметры в окне вариантов сборки:
источник
Чтобы варианты работали с библиотекой AAR, вам необходимо определить defaultPublishConfig в файле build.gradle вашего модуля библиотеки Android.
Для получения дополнительной информации см .: Публикация библиотеки .
источник
На данный момент это невозможно, хотя, если я правильно помню, они хотят добавить эту функцию. (Изменить 2: ссылка , ссылка2 )
Изменить: на данный момент я использую
defaultPublishConfig
возможность объявить, какой вариант библиотеки опубликован:источник
Я знаю, что эта тема закрыта, но просто обновление с gradle 3.0, см. Это: https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#variant_aware и grep
matchingFallbacks
иmissingDimensionStrategy
. Теперь гораздо проще объявить зависимости между разновидностями модулей.... и в этом конкретном случае с gradle3.0, поскольку ароматы имеют одно и то же имя, gradle будет отображать их волшебным образом, никакой конфигурации не требуется.
источник
Я также столкнулся с проблемой компиляции модулей для различных вариантов.
Что я нашел:
Похоже, нам не нужно добавлять
publishNonDefault true
вbuild.gradle
файл lib , поскольку Gradle 3.0.1 .После декомпиляции класса
BaseExtension
обнаружил следующее:И вместо:
Мы должны использовать:
Только самое главное - добавить
configurations {...}
часть в файлbuild.gradle
.Итак, окончательный вариант приложения
build.gradle
файла :Также вы можете использовать варианты фильтра, чтобы ограничить варианты сборки.
Ps не забудьте включить в
settings.gradle
файл модули , например:источник