如何在 build.gradle 中使用最终解析的 applicationId

How to use final resolved applicationId in build.gradle

假设我有以下 build.gradle

android{
    defaultConfig{
        applicationId "com.example.base"
    }
    buildTypes{
        release{
            minifyEnabled true
        }
        debug{
            applicationIdSuffix ".dev"
            minifyEnabled false
        }
    }
    productFlavors{
        free{
            applicationId "com.example.free"
        }
        paid{
            applicationId "com.example.paid"
        }
    }
}

我想将生成的应用程序 ID 添加到 strings.xml,如下所示:

resValue "string", "app_package", applicationId

所以我可以在偏好 xml

中定义的意图 targetPackage 中使用这个值

但是值会根据我将该行放在哪个块中而变化:

通过使用 applicationIdSuffix,我需要 gradle 解析最终 ID 才能使用它。我该怎么做?

productFlavors within android DSL 之后添加:

applicationVariants.all { variant ->
    variant.resValue  "string", "app_package", variant.applicationId
}

freeDebug 构建中将添加到 app/intermediates/res/merged/free/debug/values/values.xml:

<string name="app_package" translatable="false">com.example.free.dev</string>

paidDebug中:

<string name="app_package" translatable="false">com.example.paid.dev</string>