我想在现有应用中实现一个新的动态功能模块,但由于产品风味问题而不得不放弃。
示例代码可在此处找到。 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。新功能应为动态功能。此模块不应具有任何风味。这取决于app和lib。
三个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')
}
库模块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"
将dynamic_feature build.gradle转换为android.defaultConfig。这样,我可以建立一些风味,但不是全部:
答案 0 :(得分:1)
我找到了一个解决方案,但并不令人满意。所有构建风格都必须在动态功能模块中实现,这样才能真正构建所有构建风格。
missingDimensionStrategy
不起作用。
更多信息在这里:https://proandroiddev.com/advanced-android-flavors-part-4-a-new-version-fc2ad80c01bb