如何在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文件:
- 在
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 } } }
- 修改
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
相关产品推荐
相关产品推荐

