4

我想在现有应用程序中实现一个新的动态功能模块,但由于产品风味问题不得不放弃。

示例代码可以在这里找到。https://github.com/henningBunk/dynamic_feature_problem

我有三个模块:

  1. 应用程序。应用程序的主要模块。它有两种产品口味:

store:amazongoogle
pay_status:freepro

产生四种组合 :amazonFreeamazonProgoogleFreegooglePro

它取决于lib并列dynamic_feature为动态功能。

  1. 库。一个库模块,app并且dynamic_feature依赖于这个模块。lib只有pay_status味道。所以当我建立例如。应用程序作为googleFree风味,lib 将构建它的free风味。

  2. 动态特征。新功能应为动态功能。这个模块不应该有任何味道。这取决于应用程序和库。

三个 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"

将dynamic_feature build.gradle 放入android.defaultConfig。这样我可以建立一些口味,但不是全部:

在此处输入图像描述

4

1 回答 1

2

我找到了解决方案,但并不令人满意。所有构建风格都必须在动态功能模块中实现,因此所有构建风格都可以实际构建。

missingDimensionStrategy不起作用。

更多信息在这里:https ://proandroiddev.com/advanced-android-flavors-part-4-a-new-version-fc2ad80c01bb

于 2019-09-27T21:22:19.583 回答