You need to enable JavaScript to run this app. 如何在AndroidManifest中正确访问env存储的API密钥?
优惠活动
大模型
产品
解决方案
定价
更多

如何在AndroidManifest中正确访问env存储的API密钥?

问题根源
  • 写$process.env.REACT_NATIVE_PLACES_API_KEY报找不到process的错,本质是把Node.js环境的语法硬套到了Gradle脚本上。build.gradle是运行在JVM上的Groovy脚本,内置对象里根本没有process这个变量,脚本评估阶段自然会抛错。
  • 改成$System.env.REACT_NATIVE_PLACES_API_KEY之后构建不报错但地图不渲染,是因为这个语法读取的是操作系统层面的全局环境变量,和你存在项目根目录下.env文件里的内容完全没有关联。如果你从来没在系统环境变量里手动配置过这个密钥,表达式读到的值就是null,最终替换到Manifest里的API_KEY就是空值,没有有效密钥的情况下Google Maps当然无法正常加载。硬编码能正常工作,就是因为绕过了变量读取环节,直接把有效密钥传给了Manifest。
正确实现方式

不需要额外引入第三方插件,直接在app模块的build.gradle里加几行代码就能手动解析本地.env文件:

  1. 在android {}代码块的上方,添加.env文件解析逻辑:
// 定位项目根目录下的.env文件
def envFile = rootProject.file(".env")
def localEnv = [:]
if (envFile.exists()) {
    envFile.readLines().each { line ->
        def trimmedLine = line.trim()
        // 跳过空行和注释行
        if (trimmedLine.isEmpty() || trimmedLine.startsWith("#")) return
        // 拆分键值对,自动去掉值前后包裹的引号
        if (trimmedLine.contains("=")) {
            def keyValue = trimmedLine.split("=", 2)
            def key = keyValue[0].trim()
            def value = keyValue[1].trim().replaceAll(/^["']|["']$/, "")
            localEnv[key] = value
        }
    }
}
  1. 修改defaultConfig中的占位符配置,从解析好的本地字典里取对应值:
defaultConfig {
    manifestPlaceholders = [
        API_KEY: localEnv["REACT_NATIVE_PLACES_API_KEY"] ?: ""
    ]
}
有效性验证

构建完成后,去app/build/intermediates/merged_manifest/对应构建变体的目录下,打开合并生成的AndroidManifest.xml文件,检查com.google.android.geo.API_KEY节点对应的value值,确认和.env文件里存储的密钥完全一致,没有空值或null的情况,地图就能正常加载了。

内容的提问来源于stack exchange,提问作者Reda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 00:45:03