配置
Android 服务的 local.properties 键、BuildConfig 字段和优雅降级机制。
这是 Android 版的环境变量页面。模板不会用 .env、Docker 或服务器运行时来配置
应用。它会在 Gradle 构建阶段读取 git-ignored 的 local.properties,并在 APK
中生成 BuildConfig 字段。
Android 配置链路
local.properties (git-ignored)
Android Studio 会在这里写入 sdk.dir。你也在同一个文件中添加本地服务 key。
不要提交这个文件。
Gradle 读取每个 key
app/build.gradle.kts 使用 java.util.Properties 加载文件。缺失的字符串会变成
"";POSTHOG_DISABLED 和 POSTHOG_DEBUG 这类布尔值只有在值等于 true
(忽略大小写)时才会变成 true。
生成 BuildConfig 字段
应用读取 BuildConfig.SUPABASE_URL、BuildConfig.REVENUECAT_ANDROID_KEY、
BuildConfig.GOOGLE_WEB_CLIENT_ID 等字段。LINKING_DOMAIN 还会作为 App Links
host 注入 manifest。
控制器自行门禁服务逻辑
RevenueCat、Google 登录、PostHog、Sentry、更新提示、法律链接和其他可选集成都会检查 自己的 key;缺失时会 no-op 或隐藏相关入口。
local.properties 中的值是客户端构建值。使用这些值构建时,它们会随 APK
一起发布。REVENUECAT_WEBHOOK_AUTH 和 Firebase Admin 凭据等服务端密钥必须放在
Supabase Edge Function secrets 中,永远不要放进 local.properties。
起步 local.properties
# Android SDK path; Android Studio 通常会自动写入。
sdk.dir=/path/to/Android/sdk
# Supabase
SUPABASE_URL=https://your-project-ref.supabase.co
SUPABASE_PUBLISHABLE_KEY=your_publishable_key
# Google Sign-In; OAuth web client ID.
GOOGLE_WEB_CLIENT_ID=your_google_oauth_web_client_id
# RevenueCat
REVENUECAT_ANDROID_KEY=your_public_revenuecat_android_key模板 README 的示例块目前漏掉了 GOOGLE_WEB_CLIENT_ID,但代码已经完整接好:
GoogleSignInController 会读取它,登录/注册界面会在它为空时隐藏
"Continue with Google"。
Key 参考
Supabase
Prop
Type
依赖 Supabase 的界面包括 auth、todos、profiles、uploads、device tokens、test push
以及 subscriptions 权益读模型。
RevenueCat
Prop
Type
Pro 权益 id 不是 local.properties key,而是代码常量
PurchasesController.PRO_ENTITLEMENT_ID = "pro"。在 RevenueCat 中配置 Google Play
产品 pro_monthly、pro_yearly 和 pro_lifetime,并全部绑定到同一个 pro
权益。
Google 登录
Prop
Type
这里使用 OAuth web client ID,因为 Android Credential Manager 返回的是 Supabase 服务端要验证的 Google ID token。
可观测性
Prop
Type
更新门禁
Prop
Type
Play In-App Updates 属于 Play-only。本地 debug 构建可以测试版本比较和回退 URL, 但真实更新流程需要通过 Play 分发的构建。
链接和法律
Prop
Type
发布签名
Prop
Type
当 RELEASE_STORE_FILE 为空或文件不存在时,release 构建会保持未签名,而不是让
debug 和 CI 流程失败。详见
Play Store 发布。
Firebase 配置文件
FCM 使用第二个配置文件:
app/google-services.json只有当这个文件存在时,app/build.gradle.kts 才会应用
com.google.gms.google-services,所以项目在没有 Firebase 配置时也能构建。
请从 Firebase Console 为你的 Android 应用下载该文件,并不要提交到 git。
README 提到 app/google-services.json.example 可作为结构参考;当前模板树中没有这个
示例文件,因此请以 Firebase 下载的 JSON 为准。
服务端密钥
特权值应保存在 Supabase Edge secrets 中:
Prop
Type
这些值绝不应该进入 APK。它们通过 supabase secrets set 设置,并由
Supabase 设置 中描述的 Edge Functions 使用。
