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

Android项目Fastfile如何从非Git追踪文件读取密钥等敏感配置

实现方案

方案1:从local.properties读取(适配本地开发习惯)

首先确保local.properties已经加入项目根目录的.gitignore文件,避免被提交到Git仓库。
然后在Fastfile的开头加入读取local.properties的代码:

# 读取local.properties配置
require 'java-properties'
properties_file = "#{Dir.pwd}/local.properties"
if File.exist?(properties_file)
  local_props = JavaProperties.load(properties_file)
  # 将配置转为全局可访问的哈希,key统一转为字符串
  $local_config = local_props.transform_keys(&:to_s)
else
  UI.user_error!("未找到local.properties文件,请在项目根目录创建后再执行构建")
end

之后替换原有的硬编码部分即可:

  1. 构建lane的签名配置替换
lane :build_test_app do
  gradle(
    task: "assemble",
    build_type: "Release",
    flavor: "Dev",
    print_command: false,
    properties: {
      "android.injected.signing.store.file" => $local_config["signing.store.file"],
      "android.injected.signing.store.password" => $local_config["signing.store.password"],
      "android.injected.signing.key.alias" => $local_config["signing.key.alias"],
      "android.injected.signing.key.password" => $local_config["signing.key.password"],
    }
  )
end
  1. AppCenter上传配置替换
private_lane :upload_apk_to_appcenter do
  appcenter_upload(
    api_token: $local_config["appcenter.api_token"],             
    owner_name: "MyCompany",
    owner_type: "user",
    app_os: 'Android',
    app_platform: 'Java',
    app_name: "MyApp",
    file: lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH],
  )
end
  1. Slack配置替换
before_all do  
  ENV["SLACK_URL"] = $local_config["slack.webhook_url"]
end

最后在local.properties里添加对应的配置项:

# 签名配置
signing.store.file=/Users/user/Desktop/appjks
signing.store.password=asd123
signing.key.alias=asd123456
signing.key.password=asd1234
# AppCenter配置
appcenter.api_token=0123.....
# Slack配置
slack.webhook_url=https://hooks.slack.com/services/123asd.......

方案2:使用环境变量(最优通用方案,支持本地+CI/CD场景)

该方案是行业通用最佳实践,同时适配本地开发和CI构建环境,不需要额外编写读取文件的代码。

本地使用方式

  1. 在项目根目录创建.env文件,加入.gitignore避免提交。
  2. 在.env中添加所有敏感配置:
SIGNING_STORE_FILE=/Users/user/Desktop/appjks
SIGNING_STORE_PASSWORD=asd123
SIGNING_KEY_ALIAS=asd123456
SIGNING_KEY_PASSWORD=asd1234
APPCENTER_API_TOKEN=0123.....
SLACK_URL=https://hooks.slack.com/services/123asd.......
  1. Fastlane原生支持dotenv,会自动加载.env文件的配置,直接在Fastfile中通过ENV读取即可:
lane :build_test_app do
  gradle(
    task: "assemble",
    build_type: "Release",
    flavor: "Dev",
    print_command: false,
    properties: {
      "android.injected.signing.store.file" => ENV["SIGNING_STORE_FILE"],
      "android.injected.signing.store.password" => ENV["SIGNING_STORE_PASSWORD"],
      "android.injected.signing.key.alias" => ENV["SIGNING_KEY_ALIAS"],
      "android.injected.signing.key.password" => ENV["SIGNING_KEY_PASSWORD"],
    }
  )
end

private_lane :upload_apk_to_appcenter do
  appcenter_upload(
    api_token: ENV["APPCENTER_API_TOKEN"],             
    owner_name: "MyCompany",
    owner_type: "user",
    app_os: 'Android',
    app_platform: 'Java',
    app_name: "MyApp",
    file: lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH],
  )
end

before_all do  
  # SLACK_URL已经在.env里配置,不需要额外赋值
end

CI/CD环境使用方式

直接在CI平台(比如GitHub Actions、Jenkins、GitLab CI)的敏感变量配置页面对应添加上述环境变量即可,不需要上传.env或者local.properties文件,完全避免敏感信息泄露风险。

注意事项

  • 所有存储敏感信息的文件(local.properties、.env、签名jks文件)必须加入.gitignore,防止误提交到代码仓库
  • 团队协作时可以提交local.properties.example或者.env.example文件,仅保留配置key,去掉实际敏感值,方便新成员快速配置本地环境
  • 不要在代码打印、日志输出中暴露这些敏感配置的值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:15:02