Boot Android emulators slim: guest RAM, low-RAM mode, and the feature profile
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 38/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- android, typescript
- Lĩnh vực
- devtools, documentation, mobile-dev
Hướng nghiên cứu
Read docs/internal/adr/0006-opt-in-slim-android-emulators.md and compare the iOS path in src/drivers/android/index.ts, src/core/config.ts, src/daemon/main.ts, and the listed tests. Run the focused Android driver/config tests first, then verify the emulator flags, featureProfile, hashes, advisories, documentation, and pnpm check; the slow real-emulator lane must also pass when an Android SDK is available.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Part of #159.
Scope
After this PR an operator turns on android.slim in config and every Android device Simlock boots for a normal lease runs with the configured guest RAM and, unless turned off, as a low-RAM device. The lease reports featureProfile: "reduced". A --full lease gets a stock emulator on its own pool key, as on iOS. simlock doctor names an installed image that ignores the RAM size. No package is disabled yet; that is the next task.
{
"android": {
"slim": {
"enabled": false, // default
"ramMb": 1536, // guest RAM in MiB for a slim device
"lowRam": true // boot the guest as a low-RAM device
}
}
}
A changed key applies at a device's next boot and rebuilds that device's clean baseline once. Nothing here is settable from a lease request, MCP, or HTTP.
Technical spec
Modules touched
src/core/config.ts:android.slimblock besideandroid.emulator(#148) with the defaults above. Validators reject a non-booleanenabledorlowRamand aramMbthat is not a positive integer, naming the key. A gateway already warns about and ignores theandroidkey; only the docs list changes.src/contract/schemas.ts: the config block sosimlock configandconfig.getrender it.src/daemon/main.ts: threadconfig.android.slimintodiscoverAndroidDriverasslim, the wayconfig.ios.slimreaches the iOS driver.src/drivers/android/data.ts:AndroidDriverData.full?: true;isAndroidDriverDataaccepts data with or without it.src/drivers/android/index.ts:AndroidDriverOptions.slim(AndroidSlimOptions, optional; omitted equals disabled).reducesFeaturesisslim?.enabled === true.provisionstampsfull: trueinto driver data whenspec.fullis true, and nothing otherwise, so a normal spec's driver data stays byte-identical.- One function decides whether slim applies to a device: enabled and not
full. Every other site calls it (architecture rule 10). #startEmulatorappends-memory <ramMb>and, whenlowRam,-lowramafter theandroid.emulatorflags, on every boot of a device slim applies to, recovery included (ADR 0006 §2).#currentConfigHashgains the device's slim inputs (ramMb,lowRam) only when slim applies, and appends nothing otherwise, so a baseline captured before this change keeps its hash for slim off and for afulldevice (ADR 0006 §3).#configHashand#captureBaselinepass the device through.makeReadyreturnsfeatureProfileon every path, including the already-running path and arecoverboot:undefinedwhile slim is off,"full"for afulldevice,"reduced"otherwise (ADR 0006 §5).advisories()returns oneslim-image-ram-flooradvisory naming each installed image whose tag ends in_ps16kwhile slim is on andramMbis below 4096 (ADR 0006 §9). Read-only, same contract aslistCatalog.
docs/CONFIGURATION.md: the three keys in the table, their validation, the next-boot and baseline-rebuild rules, the gateway-ignored list, a slim section that no longer says iOS-only and says what to pair:capacity.config.ramBudget.androidBytesPerDeviceandandroid.emulator.gpu.docs/CLI.md:--full,featureProfile, and thedoctoradvisory text no longer say Android is ignored or absent.docs/HTTP-API.md: the same forfullandslim.docs/internal/KNOWN-PITFALLS.md: an Android slim section: a config change wipes each device once, low-RAM mode is app-visible, 16 KiB images gain nothing.e2e/slow-android-slim.test.ts: the real-emulator lane, gated likeslow-android-smoke.test.ts.
Contract and event changes
None beyond the config schema. No new operation, event, or lease-request field. lease.request must not gain slim.
Rules in play
docs/internal/adr/0006-opt-in-slim-android-emulators.md§1 to §5 and §9: the design this task builds.docs/internal/adr/0002-opt-in-slim-ios-simulators.md§6:fulland pool identity, reused unchanged.docs/internal/agent-rules/architecture.md: rule 2 (the core forwards the block unread), rule 10 (one "does slim apply" decision), rule 13 (the iOS-only claims in the docs become false).docs/internal/agent-rules/safety.md: rule 2 (a recovery boot keeps the flags and changes nothing else), rule 9 (config fails closed).docs/internal/agent-rules/testing.md.
Tests
- With
android.slimabsent, the emulator launch command is byte-for-byte what it was before this change andmakeReadyreports nofeatureProfile. - With slim enabled, a device's launch adds
-memory 1536 -lowramafter theandroid.emulatorflags andmakeReadyreportsfeatureProfile: "reduced". - With
lowRam: falsethe launch adds-memory 1536and not-lowram. - A
fullspec is stampedfull: trueinto driver data, its launch carries neither flag, andmakeReadyreportsfeatureProfile: "full". - A
recoverboot of a slim device carries the same launch flags as aprepareboot and runs no baseline logic. - The already-running path of
makeReadyreports the samefeatureProfileas a fresh boot. reducesFeaturesis true exactly whenandroid.slim.enabledis true.- Enabling slim, or changing
ramMborlowRam, changes the baseline hash of a non-full device and does not change it for afulldevice or with slim off. advisories()names each installed*_ps16kimage while slim is on andramMbis below 4096, and returns nothing while slim is off orramMbis 4096 or more.- A non-boolean
android.slim.enabled, a non-booleanandroid.slim.lowRam, or anandroid.slim.ramMbthat is not a positive integer is rejected at config load, naming the key. isAndroidDriverDataaccepts driver data with and withoutfull.simlock configrenders theandroid.slimblock with its defaults (e2e, fast lane).lease.requestcarrying aslimfield isBAD_REQUEST.- Slow lane, real emulator: a slim lease's guest reports
ro.config.low_ramastrueand aMemTotalnear 1536 MiB, its grant carriesfeatureProfile: "reduced", and a--fulllease of the same spec reports neither and carriesfeatureProfile: "full".
Done when
- Every test above passes and
pnpm checkis green. - With default config the emulator launch command is byte-for-byte what it was before.
simlock configshows the block.docs/CONFIGURATION.md,docs/CLI.md, anddocs/HTTP-API.mdsay what the Modules section lists, and no end-user doc says slim is iOS-only or that--fullis ignored on Android.- The slow lane passes on a machine with an Android SDK.
Out of scope
- Disabling packages,
android.slim.categories, thedevice.slimmedevent: the next task. - Guest settings of any kind.
- Any change to the capacity RAM budget.
- Headless, GPU, audio, boot animation: #148.
Depends on
- #148
Approval
- Approved for delivery
Written by an agent.
- Ngôn ngữ chính
- TypeScript
- Star
- 14
- Fork
- 0
- Merge trung bình
- 1 ngày 3 giờ
- Pull request đã merge (30 ngày)
- 49
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của callstackincubator/simlock
-
bug:ready
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
callstackincubator/simlock#79 · 6 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
task:draft
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
callstackincubator/simlock#164 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
feature:spec
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
callstackincubator/simlock#162 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
feature:spec
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
callstackincubator/simlock#161 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
feature:spec
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
callstackincubator/simlock#160 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của callstackincubator/simlock
Issue tương tự
-
documentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
inu-appcenter/memorIN-frontend#106 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
kind/bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 7 ngày
-
[Bug] @deck.gl/arcgis dist import resolves to unpublished @deck.gl/core source path (9.3.11, 9.4.0)Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
fix: CopyFilters ignores tabĐang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
CSCfi/sd-search-ui#145 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Add: Cbeebies pl SDĐang mởcheck:passed streams:add
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
Maintainer thường phản hồi trong vòng 1 ngày