

























@@ -9,6 +9,12 @@ default_platform(:android)
99DEFAULT_PLAY_PACKAGE_NAME = "ai.openclaw.app"
1010DEFAULT_PLAY_TRACK = "internal"
1111DEFAULT_PLAY_RELEASE_STATUS = "completed"
12+ANDROID_RELEASE_SIGNING_GRADLE_PROPERTIES = [
13+"OPENCLAW_ANDROID_STORE_FILE",
14+"OPENCLAW_ANDROID_STORE_PASSWORD",
15+"OPENCLAW_ANDROID_KEY_ALIAS",
16+"OPENCLAW_ANDROID_KEY_PASSWORD"
17+].freeze
12181319def load_env_file(path)
1420return unless File.exist?(path)
@@ -36,6 +42,14 @@ def repo_root
3642File.expand_path("../..", android_root)
3743end
384445+def android_release_signing_script
46+File.join(repo_root, "scripts", "android-release-signing.mjs")
47+end
48+49+def android_release_signing_materialized_properties_path
50+File.join(android_root, "build", "release-signing", "gradle.properties")
51+end
52+3953def shell_join(args)
4054args.shelljoin
4155end
@@ -183,6 +197,45 @@ def capture_android_screenshots!
183197sh(shell_join(["bash", File.join(repo_root, "scripts", "android-screenshots.sh")]))
184198end
185199200+def read_android_release_signing_properties!(path)
201+UI.user_error!("Missing materialized Android release signing properties at #{path}.") unless File.exist?(path)
202+203+properties = {}
204+File.foreach(path) do |line|
205+stripped = line.strip
206+next if stripped.empty? || stripped.start_with?("#")
207+208+key, value = stripped.split("=", 2)
209+next if key.nil? || key.empty? || value.nil?
210+211+properties[key] = value.strip
212+end
213+214+missing = ANDROID_RELEASE_SIGNING_GRADLE_PROPERTIES.reject { |key| env_present?(properties[key]) }
215+UI.user_error!("Materialized Android release signing properties are missing: #{missing.join(', ')}.") unless missing.empty?
216+217+properties
218+end
219+220+def export_android_release_signing_properties!(path)
221+read_android_release_signing_properties!(path).each do |key, value|
222+ENV["ORG_GRADLE_PROJECT_#{key}"] = value
223+end
224+end
225+226+def sync_android_release_signing!
227+sh(shell_join(["node", android_release_signing_script, "--mode", "sync-pull"]))
228+export_android_release_signing_properties!(android_release_signing_materialized_properties_path)
229+end
230+231+def prepare_android_release_signing!
232+if env_present?(ENV["MATCH_PASSWORD"])
233+sync_android_release_signing!
234+elsif File.exist?(android_release_signing_materialized_properties_path)
235+export_android_release_signing_properties!(android_release_signing_materialized_properties_path)
236+end
237+end
238+186239def validate_android_release_signing!
187240Dir.chdir(android_root) do
188241sh(shell_join(["./gradlew", ":app:bundlePlayRelease", "--dry-run"]))
@@ -201,6 +254,7 @@ end
201254202255def validate_android_release_preflight!(version_metadata)
203256validate_play_auth!
257+prepare_android_release_signing!
204258validate_android_release_signing!
205259validate_android_release_notes!
206260print_android_release_plan!(version_metadata)
@@ -258,6 +312,30 @@ platform :android do
258312UI.success("Google Play API credentials are valid.")
259313end
260314315+desc "Print the Android release signing plan"
316+lane :signing_plan do
317+sh(shell_join(["node", android_release_signing_script, "--mode", "plan"]))
318+end
319+320+desc "Pull encrypted Android release signing assets and validate Gradle release signing"
321+lane :signing_check do
322+sync_android_release_signing!
323+validate_android_release_signing!
324+UI.success("Android release signing assets are available locally.")
325+end
326+327+desc "Pull encrypted Android release signing assets from the shared signing repo"
328+lane :signing_sync_pull do
329+sync_android_release_signing!
330+UI.success("Pulled Android release signing assets.")
331+end
332+333+desc "Create or refresh encrypted Android release signing assets in the shared signing repo"
334+lane :signing_sync_push do
335+sh(shell_join(["node", android_release_signing_script, "--mode", "sync-push"]))
336+UI.success("Pushed Android release signing assets.")
337+end
338+261339desc "Validate Android Play release auth, signing, versioning, and release notes"
262340lane :release_preflight do
263341sync_android_versioning!
@@ -278,6 +356,7 @@ platform :android do
278356desc "Build signed Android release artifacts locally without uploading"
279357lane :play_store_archive do
280358sync_android_versioning!
359+prepare_android_release_signing!
281360build_release_artifacts!
282361end
283362此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。