我正在尝试将我的 gradle 文件切换到 Kotlin DSL。我的项目正在打电话 到 API。
在 build.gradle(app)
中,我有一个函数来检索存储在另一个中的 api key
文件 keys.properties
。
出现一些问题后(对于 example)我重写了函数以获得
key 。我在build.gradle.kts
中写了如下函数:
import import java.io.File
fun readFileLineByLineUsingForEachLine2(fileName: String): HashMap<String, String>{
val items = HashMap<String, String>()
File(fileName).forEachLine {
items[it.split("=")[0]] = it.split("=")[1]
}
return items
}
然后我设置一个变量来保存特定键的值:
buildConfigField(String!, "API_KEY", returnMapOfKeys()["API_KEY"])
修复了一些错误后,我遇到了以下错误:
app/build.gradle.kts:49:36: Expecting ')'
buildConfigField
上一行的哪一点。
有人知道这个错误在哪里吗?
或者有人知道如何使用 Kotlin DSL 从文件中检索 key 吗?
最佳答案
我解决了我的问题(看起来是这样..检查修改!!)。我最终得到了以下功能:
// Retrieve key for api
fun getApiKey(): String {
val items = HashMap<String, String>()
val f = File("keys.properties")
f.forEachLine {
items[it.split("=")[0]] = it.split("=")[1]
}
return items["API_KEY"]!!
}
然后我调用 buildConfigField
如下:
buildConfigField("String", "API_KEY", getApiKey())
这部分没有错误了。
编辑
一旦我修复了 build.gradle.kts
中的所有错误,我的项目构建返回找不到文件 keys.properties
:我有修复我的函数 getApiKey
。最后,我可以使用以下实现来构建和运行我的项目:
// Return value of api key stored in `app/keys.properties`
fun getApiKey(): String {
val items = HashMap<String, String>()
val fl = rootProject.file("app/keys.properties")
(fl.exists())?.let {
fl.forEachLine {
items[it.split("=")[0]] = it.split("=")[1]
}
}
return items["API_KEY"]!!
}
这个函数对于它所有的硬编码的东西来说还远远不够好,但它允许构建我的项目。
关于android - kotlin DSL 从其他文件中检索 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59052655/