Я хотел внедрить новый модуль динамических функций в существующее приложение, но мне пришлось отказаться от него из-за проблем со вкусом продукта.
Пример кода можно найти здесь. https://github.com/henningBunk/dynamic_feature_problem
У меня есть три модуля:
- приложение. Основной модуль приложения. Имеет два вкуса продукта:
store
: amazon
и google
pay_status
: free
и pro
В результате получается четыре комбинации:
amazonFree
, amazonPro
, googleFree
и googlePro
Это зависит от lib
и перечисляет dynamic_feature
в качестве динамического элемента.
Lib. Модуль библиотеки app
и dynamic_feature
зависят от этого модуля. lib
имеет только аромат pay_status
. Поэтому, когда я строю, например. приложение как аромат googleFree
, lib создаст его free
аромат.
dynamic_feature. Новая функция, которая должна быть динамичной. Этот модуль не должен иметь никаких вкусов. Это зависит от приложения и библиотеки.
Три файла Gradle, уменьшенные до разновидностей продукта и зависимостей, выглядят так:
Модуль приложения build.gradle:
apply plugin: 'com.android.application'
android {
dynamicFeatures = [":faq"]
flavorDimensions "store", "pay_status"
productFlavors {
google { dimension "store" }
amazon { dimension "store" }
free { dimension "pay_status" }
pro { dimension "pay_status" }
}
}
dependencies {
implementation project(':lib')
}
Lib модуль build.gradle:
apply plugin: 'com.android.library'
android {
flavorDimensions "pay_status"
productFlavors {
free { dimension "pay_status" }
pro { dimension "pay_status" }
}
}
dependencies {
}
Модуль динамических функций build.gradle:
apply plugin: 'com.android.dynamic-feature'
android {}
dependencies {
implementation project(':app')
implementation project(':lib')
}
Это приводит к ошибке:
ERROR: Unable to resolve dependency for ':dynamic_feature@debug/compileClasspath': Could not resolve project :app.
Show Details
Affected Modules: dynamic_feature
Итак, я прочитал, что для модуля dynamic_feature
может потребоваться стратегия отсутствующего измерения. Добавление
missingDimensionStrategy "store", "google"
missingDimensionStrategy "pay_status", "free"
в build.gradle dynamic_feature в android.defaultConfig. Таким образом, я могу создать некоторые ароматы, но не все:
