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

时间:2017-02-28 05:06:18

标签: android gradle android-gradle android-resources android-flavors

说我有以下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中使用此值

但是值的变化取决于我将该行放在哪个块中:

  • defaultConfig - > “com.example.base”(始终是基本ID,无用)
  • productFlavours.free - > “com.example.free”(对于调试版本,问题是不会更改到“com.example.free.dev”)
  • productFlavours - >错误,无法构建
  • buildTypes.debug - >错误,无法构建

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

1 个答案:

答案 0 :(得分:5)

productFlavors DSL中android之后添加此内容:

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>