我有一个Android应用程序,具有以下产品风格:
productFlavors {
local {
}
development {
}
production {
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的底部有以下内容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
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试设置api secret/keyfor,crashlytics但我需要能够设置这些取决于我正在构建的产品风格.
properties.put("apiSecret", WHAT_GOES_HERE)
properties.put("apiKey", WHAT_GOES_HERE)
Run Code Online (Sandbox Code Playgroud)
如何设置/获取这些变量?
我已将以下内容添加到我的 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"
}
}
Run Code Online (Sandbox Code Playgroud)
然后在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
}
Run Code Online (Sandbox Code Playgroud)
然而,这不编译并给我:
错误:(334,1)任务':app:fabricGeneratePropertiesDevelopmentDebug'的执行失败.无法在任务':app:fabricGeneratePropertiesDevelopmentDebug'上找到属性'BuildConfig'.
对于这个错误:
错误:(334, 1) 任务“:app:fabricGeneratePropertiesDevelopmentDebug”执行失败。在任务“:app:fabricGeneratePropertiesDevelopmentDebug”上找不到属性“BuildConfig”。
使用不同的结构,例如:
variant.mergedFlavor.buildConfigFields["CRASHLYTICS_API_SECRET"].value
当然,该解决方案期望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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1001 次 |
| 最近记录: |