You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI应用密钥存储位置及AndroidManifest引用方法咨询

MAUI中Google Maps API密钥的安全存储与AndroidManifest引用方案

1. MAUI应用中API密钥的存储位置

结合你不想忽略整个字符串资源文件的需求,推荐以下几种安全存储方案:

  • 开发环境用User Secrets:这是.NET生态专为开发阶段存储敏感信息设计的方案,完全不会提交到Git。右键MAUI项目 → 「管理用户机密」,在自动生成的secrets.json中添加密钥:
    {
      "GoogleMapsApiKey": "你的实际API密钥"
    }
    
  • 生产/构建环境用环境变量:在本地系统或CI/CD环境中配置GOOGLE_MAPS_API_KEY环境变量,避免硬编码密钥到代码文件。
  • 单独的敏感资源文件(Git忽略):在Android资源目录Platforms/Android/Resources/values下新建strings-secret.xml,仅存放敏感密钥:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="maps_api_key">你的实际API密钥</string>
    </resources>
    
    然后在.gitignore中添加Platforms/Android/Resources/values/strings-secret.xml,只忽略这个敏感文件,不影响其他正常的字符串资源提交。

2. 如何将密钥注入AndroidManifest

针对上述存储方案,对应以下几种注入方式:

方案一:User Secrets + 构建时替换占位符

  1. 修改AndroidManifest.xml,将原来的@strings/maps_api_key替换为构建占位符:
    <meta-data android:name="com.google.android.geo.API_KEY" android:value="$(_GoogleMapsApiKey)" />
    
  2. 在MAUI项目的.csproj文件中添加配置,读取User Secrets并传递给构建变量:
    <PropertyGroup>
        <_GoogleMapsApiKey>$(GoogleMapsApiKey)</_GoogleMapsApiKey>
    </PropertyGroup>
    <Target Name="SetGoogleMapsApiKey" BeforeTargets="ProcessAndroidManifest">
        <PropertyGroup>
            <_GoogleMapsApiKey>$(UserSecrets:GoogleMapsApiKey)</_GoogleMapsApiKey>
        </PropertyGroup>
    </Target>
    

方案二:环境变量 + 构建时替换

  1. 同样在AndroidManifest中使用占位符$(_GoogleMapsApiKey)。
  2. 在.csproj中配置读取环境变量:
    <PropertyGroup>
        <_GoogleMapsApiKey>$(GOOGLE_MAPS_API_KEY)</_GoogleMapsApiKey>
    </PropertyGroup>
    <Target Name="SetGoogleMapsApiKeyFromEnv" BeforeTargets="ProcessAndroidManifest">
        <PropertyGroup>
            <_GoogleMapsApiKey>$(GOOGLE_MAPS_API_KEY)</_GoogleMapsApiKey>
        </PropertyGroup>
    </Target>
    
    本地开发时在系统环境变量中设置GOOGLE_MAPS_API_KEY,CI/CD环境直接配置对应变量即可。

方案三:单独敏感资源文件 + 资源自动合并

如果使用了strings-secret.xml存储密钥,只需在.csproj中确保该文件被纳入Android资源构建:

<ItemGroup Condition="Exists('Platforms/Android/Resources/values/strings-secret.xml')">
    <AndroidResource Include="Platforms/Android/Resources/values/strings-secret.xml" />
</ItemGroup>

Android构建系统会自动合并所有values目录下的资源文件,因此原AndroidManifest中@strings/maps_api_key的引用依然有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:57:02