微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android Studio / Gradle中的productFlavor变量

我有一个Android应用程序,具有以下产品风格:

productFlavors {
    local {

    }

    development {


    }

    production {

    }
}

然后在我的build.grade的底部有以下内容

File crashlyticsProperties = new File("${project.projectDir.absolutePath}/fabric.properties")
android.applicationVariants.all { variant ->
    def variantSuffix = variant.name.capitalize()
    def generateResourcesTask = project.tasks.getByName("fabricGenerateResources${variantSuffix}")
    def generatePropertiesTask = task("fabricGenerateProperties${variantSuffix}") << {
        Properties properties = new Properties()
        properties.put("apiSecret", WHAT_GOES_HERE)
        properties.put("apiKey", WHAT_GOES_HERE)
        PropertiesUtils.injectPropertyInFile(crashlyticsProperties, properties, "")
    }
    generateResourcesTask.dependsOn generatePropertiesTask
}

我正在尝试为崩解剂设置api秘密/密钥,但我需要能够根据我正在构建的产品风格设置这些.

properties.put("apiSecret", WHAT_GOES_HERE)
properties.put("apiKey", WHAT_GOES_HERE)

如何设置/获取这些变量?

更新#1

我已将以下内容添加到build.gradle中

productFlavors {
    local {
        buildConfigField "String", "CRASHLYTICS_API_SECRET", "1234"
        buildConfigField "String", "CRASHLYTICS_API_KEY", "1234"
    }

    development {
        buildConfigField "String", "CRASHLYTICS_API_SECRET", "1234"
        buildConfigField "String", "CRASHLYTICS_API_KEY", "1234"
    }

    production {
        buildConfigField "String", "CRASHLYTICS_API_SECRET", "1234"
        buildConfigField "String", "CRASHLYTICS_API_KEY", "1234"
    }
}

然后在build.gradle文件底部我有

File crashlyticsProperties = new File("${project.projectDir.absolutePath}/fabric.properties")
android.applicationVariants.all { variant ->
    def variantSuffix = variant.name.capitalize()
    def generateResourcesTask = project.tasks.getByName("fabricGenerateResources${variantSuffix}")
    def generatePropertiesTask = task("fabricGenerateProperties${variantSuffix}") << {
        Properties properties = new Properties()
        println "...copying apiSecret for ${variant.name}"
        properties.put("apiSecret", BuildConfig.CRASHLYTICS_API_SECRET)
        println "...copying apiKey for ${variant.name}"
        properties.put("apiKey", BuildConfig.CRASHLYTICS_API_KEY)
        PropertiesUtils.injectPropertyInFile(crashlyticsProperties, properties, "")
    }
    generateResourcesTask.dependsOn generatePropertiesTask
}

然而,这不编译并给我:

Error:(334, 1) Execution Failed for task ‘:app:fabricGeneratePropertiesDevelopmentDebug’.
Could not find property ‘BuildConfig’ on task ‘:app:fabricGeneratePropertiesDevelopmentDebug’.

解决方法:

对于此错误

Error:(334, 1) Execution Failed for task ‘:app:fabricGeneratePropertiesDevelopmentDebug’. Could not find property ‘BuildConfig’ on task ‘:app:fabricGeneratePropertiesDevelopmentDebug’.

使用不同的结构,例如:

variant.mergedFlavor.buildConfigFields [ “CRASHLYTICS_API_SECRET”].值

当然,该解决方案期望定义这样的BuildConfig字段.
如果您希望字段不存在,请务必先检查是否存在.

编辑:

如果您想要问题中描述的解决方案:

File crashlyticsProperties = new File("${project.projectDir.absolutePath}/fabric.properties")
android.applicationVariants.all { variant ->
    def variantSuffix = variant.name.capitalize()
    def generateResourcesTask = project.tasks.getByName("fabricGenerateResources${variantSuffix}")
    def generatePropertiesTask = task("fabricGenerateProperties${variantSuffix}") << {
        Properties properties = new Properties()
        println "...copying apiSecret for ${variant.name}"
        properties.put("apiSecret", variant.mergedFlavor.buildConfigFields.get("CRASHLYTICS_API_SECRET").value)
        println "...copying apiKey for ${variant.name}"
        properties.put("apiKey", variant.mergedFlavor.buildConfigFields.get("CRASHLYTICS_API_KEY").value)
        PropertiesUtils.injectPropertyInFile(crashlyticsProperties, properties, "")
    }
    generateResourcesTask.dependsOn generatePropertiesTask
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐