通过 Kotlin DSL 从 local.properties 读取值

Read value from local.properties via Kotlin DSL

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

sdk.dir=C\:\Users\i30mb1\AppData\Local\Android\Sdk
key="xxx"

并通过 gradle Kotlin DSL 将此值保存在我的 BuildConfig.java 中。稍后可以从我的项目中访问该字段。

好的。我找到了解决方案。

对于 Android 个项目:

  1. 在我的 build.gradle.kts 中,我创建了一个检索我的密钥的值:
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties

val key: String = gradleLocalProperties(rootDir).getProperty("key")
  1. 然后在 buildTypes 块中,我写了它:
buildTypes {
 getByName("debug") {
    buildConfigField("String", "key", key)
   }
}
  1. 在我的 Activity 中,现在我可以检索这个值:
override fun onCreate() {
    super.onCreate()
    val key = BuildConfig.key
}

对于 Kotlin 项目:

  1. 我们可以创建一个扩展来帮助我们检索所需的密钥:
fun Project.getLocalProperty(key: String, file: String = "local.properties"): Any {
    val properties = java.util.Properties()
    val localProperties = File(file)
    if (localProperties.isFile) {
        java.io.InputStreamReader(java.io.FileInputStream(localProperties), Charsets.UTF_8).use { reader ->
            properties.load(reader)
        }
    } else error("File from not found")

    return properties.getProperty(key)
}
  1. 并在我们需要时使用此扩展程序
task("printKey") {
   doLast {
       val key = getLocalProperty("key")
       println(key)
   }
}

如果您无权访问 gradleLocalProperties(只有 android 个项目可以访问):

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

不要忘记导入:

import java.io.File
import java.io.FileInputStream
import java.util.*

将你的 属性 放入 local.properties

并在 build.gradle(app).kts 文件中这样引用它: gradleLocalProperties(rootDir).getProperty("YOUR_PROP_NAME")