惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - Franky
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
Jina AI
Jina AI
博客园 - 聂微东
S
SegmentFault 最新的问题
量子位
宝玉的分享
宝玉的分享
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
fix(ci): use available Android SDK platform · openclaw/op...
vincentkoc · 2026-06-23 · via Recent Commits to openclaw:main

File tree

      • src/main/java/ai/openclaw/app/gateway

Original file line numberDiff line numberDiff line change

@@ -2233,7 +2233,7 @@ jobs:

22332233

uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5

22342234

with:

22352235

path: ~/.android-sdk

2236-

key: ${{ runner.os }}-android-sdk-v1-cmdline-14742923-platform-37.0-build-tools-36.0.0

2236+

key: ${{ runner.os }}-android-sdk-v1-cmdline-14742923-platform-36-build-tools-36.0.0

22372237

restore-keys: |

22382238

${{ runner.os }}-android-sdk-v1-

22392239

@@ -2263,7 +2263,7 @@ jobs:

22632263

yes | sdkmanager --sdk_root="${ANDROID_SDK_ROOT}" --licenses >/dev/null

22642264

sdkmanager --sdk_root="${ANDROID_SDK_ROOT}" --install \

22652265

"platform-tools" \

2266-

"platforms;android-37.0" \

2266+

"platforms;android-36" \

22672267

"build-tools;36.0.0"

22682268
22692269

- name: Run Android ${{ matrix.task }}

Original file line numberDiff line numberDiff line change

@@ -59,7 +59,7 @@ plugins {

5959
6060

android {

6161

namespace = "ai.openclaw.app"

62-

compileSdk = 37

62+

compileSdk = 36

6363
6464

// Release signing is local-only; keep the keystore path and passwords out of the repo.

6565

signingConfigs {

Original file line numberDiff line numberDiff line change

@@ -49,18 +49,8 @@ import java.util.concurrent.Executors

4949

import kotlin.coroutines.resume

5050

import kotlin.coroutines.resumeWithException

5151
52-

private fun createDnsResolver(context: Context): DnsResolver =

53-

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CINNAMON_BUN) {

54-

createContextDnsResolver(context)

55-

} else {

56-

createLegacyDnsResolver()

57-

}

58-
59-

@RequiresApi(Build.VERSION_CODES.CINNAMON_BUN)

60-

private fun createContextDnsResolver(context: Context): DnsResolver = DnsResolver(context, null)

61-
6252

@Suppress("DEPRECATION")

63-

private fun createLegacyDnsResolver(): DnsResolver = DnsResolver.getInstance()

53+

private fun createDnsResolver(): DnsResolver = DnsResolver.getInstance()

6454
6555

/**

6656

* Watches local DNS-SD and optional wide-area DNS-SD for reachable OpenClaw gateways.

@@ -71,7 +61,7 @@ class GatewayDiscovery(

7161

) {

7262

private val nsd = context.getSystemService(NsdManager::class.java)

7363

private val connectivity = context.getSystemService(ConnectivityManager::class.java)

74-

private val dns = createDnsResolver(context)

64+

private val dns = createDnsResolver()

7565

private val serviceType = "_openclaw-gw._tcp."

7666

private val wideAreaDomain = System.getenv("OPENCLAW_WIDE_AREA_DOMAIN")

7767

private val logTag = "OpenClaw/GatewayDiscovery"

Original file line numberDiff line numberDiff line change

@@ -5,7 +5,7 @@ plugins {

55
66

android {

77

namespace = "ai.openclaw.app.benchmark"

8-

compileSdk = 37

8+

compileSdk = 36

99
1010

defaultConfig {

1111

minSdk = 31

Original file line numberDiff line numberDiff line change

@@ -4,7 +4,7 @@ androidx-activity = "1.13.0"

44

androidx-benchmark = "1.4.1"

55

androidx-camera = "1.6.0"

66

androidx-compose-bom = "2026.05.01"

7-

androidx-core = "1.19.0"

7+

androidx-core = "1.18.0"

88

androidx-exifinterface = "1.4.2"

99

androidx-lifecycle = "2.10.0"

1010

androidx-security = "1.1.0"

Original file line numberDiff line numberDiff line change

@@ -23,6 +23,14 @@ function readCriticalQualityWorkflow() {

2323

return readFileSync(".github/workflows/codeql-critical-quality.yml", "utf8");

2424

}

2525
26+

function readAndroidCompileSdk(path: string): number {

27+

const match = readFileSync(path, "utf8").match(/^\s*compileSdk\s*=\s*(\d+)\s*$/mu);

28+

if (!match) {

29+

throw new Error(`Missing compileSdk in ${path}`);

30+

}

31+

return Number(match[1]);

32+

}

33+
2634

function findYamlFiles(directory: string): string[] {

2735

return readdirSync(directory, { withFileTypes: true }).flatMap((entry) => {

2836

const path = `${directory}/${entry.name}`;

@@ -134,6 +142,22 @@ describe("ci workflow guards", () => {

134142

expect(workflow.jobs.android.strategy["max-parallel"]).toBe(2);

135143

});

136144
145+

it("installs the Android SDK platform used by Gradle", () => {

146+

const workflow = readCiWorkflow();

147+

const appCompileSdk = readAndroidCompileSdk("apps/android/app/build.gradle.kts");

148+

const benchmarkCompileSdk = readAndroidCompileSdk("apps/android/benchmark/build.gradle.kts");

149+

const cacheStep = workflow.jobs.android.steps.find((step) => step.name === "Cache Android SDK");

150+

const installStep = workflow.jobs.android.steps.find(

151+

(step) => step.name === "Install Android SDK packages",

152+

);

153+

const packageId = `platforms;android-${appCompileSdk}`;

154+
155+

expect(appCompileSdk).toBe(benchmarkCompileSdk);

156+

expect(cacheStep.with.key).toContain(`platform-${appCompileSdk}-`);

157+

expect(installStep.run).toContain(`"${packageId}"`);

158+

expect(installStep.run).not.toContain(`${packageId}.0`);

159+

});

160+
137161

it("debounces canonical main pushes before Blacksmith admission", () => {

138162

const workflow = readCiWorkflow();

139163

const source = readFileSync(".github/workflows/ci.yml", "utf8");