通过 Kotlin DSL 从 local.properties 读取值

i30*_*mb1 5 android gradle kotlin gradle-kotlin-dsl

我想从如下local.properties文件中检索密钥:

sdk.dir=C\:\\Users\\i30mb1\\AppData\\Local\\Android\\Sdk
key="xxx"
Run Code Online (Sandbox Code Playgroud)

并将这个值保存在我的BuildConfig.javavia gradle Kotlin DSL 中。稍后可以从我的项目中访问此字段。

Mic*_*ł K 38

如果您无权访问gradleLocalProperties(仅适用于 Android 项目):

val prop = Properties().apply {
    load(FileInputStream(File(rootProject.rootDir, "local.properties")))
}
println("Property:" + prop.getProperty("propertyName"))
Run Code Online (Sandbox Code Playgroud)

不要忘记导入:

import java.io.File
import java.io.FileInputStream
import java.util.*
Run Code Online (Sandbox Code Playgroud)

  • 这是一个更好的解决方案,谢谢。接受的答案不仅特定于 Android 项目,而且还使用可能不受官方支持的内部包中的 API。 (2认同)
  • rootProject 未定义。如何检索 rootDir ? (2认同)

i30*_*mb1 12

好的。我找到了一种可能的解决方案:

  1. 在我的 build.gradle.kts 我创建了一个值来检索我的密钥
val key: String = gradleLocalProperties(rootDir).getProperty("key")
Run Code Online (Sandbox Code Playgroud)
  1. 在块 buildTypes 我写它
buildTypes {
 getByName("debug") {
    buildConfigField("String", "key", key)
   }
}
Run Code Online (Sandbox Code Playgroud)
  1. 现在在我的 Activity 中,我可以检索此值
 override fun onCreate() {
     super.onCreate()
     val key = BuildConfig.key
}
Run Code Online (Sandbox Code Playgroud)

我认为应该有另一个解决方案?(通过未记录的扩展)

  • 什么是“gradleLocalProperties”? (3认同)
  • 普通的 kotlin 项目有类似的功能吗? (3认同)
  • **未解决的参考:gradleLocalProperties** (2认同)