Android/Termux support broken in v1.0.48+ (runtime.node requires glibc)
- Ngôn ngữ chính
- Shell
- Star
- 11.2k
- Fork
- 1.9k
- Merge trung bình
- 14 giờ 16 phút
- Pull request đã merge (30 ngày)
- 6
Mô tả
## Summary
Copilot CLI v1.0.48 introduced a native Rust addon (`runtime.node`) that is compiled against glibc, making it impossible to run on Android/Termux where Node.js uses Bionic libc.
## Environment
- **Platform**: Android (Termux)
- **`process.platform`**: `"android"`
- **`process.arch`**: `"arm64"`
- **Node.js**: v24.x (Termux package)
- **Last working version**: 1.0.45
## Issues by version
### v1.0.45 (workable with patches)
Three fixable issues:
1. **ripgrep**: Looks for `ripgrep/bin/android-arm64/rg` — fixed by copying from `linux-arm64/rg` (statically linked, runs fine)
2. **pty.node**: Looks for `prebuilds/android-arm64/pty.node` — fixed by building `node-pty` from source on Termux
3. **Platform switch**: The native module loader in `app.js`/`index.js`/`sdk/index.js` doesn't handle `case "android"` — fixed by patching the JS
### v1.0.48+ (BROKEN — no workaround)
A new `runtime.node` Rust addon was introduced that handles token counting (tiktoken), MCP config parsing, shell analysis, hooks, and session filesystem. It is linked against glibc:
```
NEEDED: libgcc_s.so.1, libpthread.so.0, libm.so.6, libdl.so.2, libc.so.6
```
This **cannot** run on Android because:
- Android uses Bionic libc, not glibc
- The glibc TLS (Thread-Local Storage) model is incompatible with Android's linker
- You cannot mix glibc and Bionic libraries in the same process
- The binary is closed-source Rust, so we cannot rebuild it
## Request
1. **Ship an Android-compatible `runtime.node`** — Rust supports the `aarch64-linux-android` target natively. Cross-compiling with `cargo build --target aarch64-linux-android` would produce a Bionic-compatible binary.
2. **Add `android-arm64` to the platform matrix** — The optional dependencies (`@github/copilot-linux-arm64`, etc.) should include an `@github/copilot-android-arm64` variant.
3. **Handle `"android"` in the platform switch** — The JS code in `app.js`, `index.js`, and `sdk/index.js` should map `process.platform === "android"` to the appropriate prebuild path.
## Workaround
We are pinned to v1.0.45. Users who accidentally upgrade are stuck.
## Additional context
Termux is a widely-used terminal emulator for Android that provides a Linux-like environment. Node.js runs natively on it. Before v1.0.48, Copilot CLI worked with minor patches. The introduction of the glibc-only native addon broke this entirely.
Hướng dẫn đóng góp
Hướng nghiên cứu
Inspect app.js, index.js, and sdk/index.js, along with the optional-dependency platform matrix, to trace how native modules are selected. Verify how runtime.node and the android-arm64 package would be provided for Termux, then confirm Android platform mapping and runtime loading without breaking existing targets.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- android, node.js, rust
- Lĩnh vực
- build-system, cli, mobile
- Loại issue
- Lỗi
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100