我正在尝试将gradle文件切换到Kotlin DSL。我的项目正在打电话 API。
在build.gradle(app)
中,我有一个函数可以检索存储在另一个数据库中的api密钥
文件keys.properties
。
(针对example)出现问题后,我重新编写了函数以获取
键。我在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从文件中检索密钥?
答案 0 :(得分:0)
我解决了我的问题(似乎是这样。检查修改!)。我得到了以下功能:
// 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"]!!
}
此功能与其所有硬编码的东西都远远不够,但它允许构建我的项目。
答案 1 :(得分:0)
替代
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties
val apiKey = gradleLocalProperties(rootDir).getProperty("key.properties")
..
buildConfigField("String", "API_KEY", "\"$apiKey\"")