Skip to content
프로젝트

aidanpark/openclaw-android has 1,800 GitHub stars and 227 forks. GitHot measured +2 stars in 24 hours and +4 in 7 days. Last checked 2026-11-07 18:04 UTC. Last push 2026-10-14.

이 수치를 측정하는 방법

Run OpenClaw on Android with a single command — no proot, no Linux

측정된 스타 증가

in 24h
+2
in 7 days
+4
in 15 days
업데이트 지연
in 1 month
업데이트 지연

서로 겹치는 기간의 순증가량이며 일별 합계가 아닙니다. 측정값이 없으면 비워 둡니다. 스타는 관심도를 나타내며 품질을 보장하지 않습니다.

README.ko.md

Original

OpenClaw on Android

English | 中文 | 日本語

OpenClaw on Android

Android 7.0+ Termux No proot License MIT GitHub Stars

나야, OpenClaw. 근데 이제 Android-Termux 를 곁들인...

리눅스 설치 없이

일반적으로 Android에서 OpenClaw를 실행하려면 proot-distro로 Linux를 설치해야 하고, 700MB~1GB의 저장공간이 필요합니다. OpenClaw on Android는 glibc 동적 링커(ld.so)만 설치하여, 전체 Linux 배포판 없이 OpenClaw를 실행할 수 있게 합니다.

기존 방식: Termux에서 proot-distro를 통해 전체 Linux 배포판을 설치합니다.

┌───────────────────────────────────────────────────┐
│ Linux Kernel                                      │
│ ┌───────────────────────────────────────────────┐ │
│ │ Android · Bionic libc · Termux                │ │
│ │ ┌───────────────────────────────────────────┐ │ │
│ │ │ proot-distro · Debian/Ubuntu              │ │ │
│ │ │ ┌───────────────────────────────────────┐ │ │ │
│ │ │ │ GNU glibc                             │ │ │ │
│ │ │ │ Node.js → OpenClaw                    │ │ │ │
│ │ │ └───────────────────────────────────────┘ │ │ │
│ │ └───────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────┘

이 프로젝트: proot-distro 없이, glibc 동적 링커만 설치합니다.

┌───────────────────────────────────────────────────┐
│ Linux Kernel                                      │
│ ┌───────────────────────────────────────────────┐ │
│ │ Android · Bionic libc · Termux                │ │
│ │ ┌───────────────────────────────────────────┐ │ │
│ │ │ glibc ld.so (linker only)                 │ │ │
│ │ │ ld.so → Node.js → OpenClaw                │ │ │
│ │ └───────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────┘
기존 방식 (proot-distro) 이 프로젝트
저장공간 오버헤드 1-2GB (Linux + 패키지) ~200MB
설치 시간 20-30분 3-10분
성능 느림 (proot 레이어) 네이티브 속도
설정 과정 디스트로 설치, Linux 설정, Node.js 설치, 경로 수정... 명령어 하나 실행

Claw icon Claw 앱

독립 실행형 Android 앱도 제공됩니다. 터미널 에뮬레이터와 WebView 기반 UI를 하나의 APK에 담았으며, Termux 없이 사용할 수 있습니다.

  • 원탭 설치: 앱 안에서 부트스트랩, Node.js, OpenClaw 자동 설치
  • 앱에서 처음 설치(v0.4.5 이상): 앱이 최초 설치를 직접 실행하고 진행 상황을 7단계로 표시하며, 어느 단계에서든 취소할 수 있습니다. 끝나지 않은 설치(취소했거나, 앱이 닫혔거나, Android 가 중단한 경우)는 「설치를 이어서 진행합니다」 화면에서 멈춘 지점부터 이어서 설치합니다. 「기본 환경 다시 설치」는 앱 데이터를 지우지 않고 손상된 기본 환경을 복구합니다(홈 폴더는 유지됩니다). 설치가 끝나면 버튼 하나가 터미널에 openclaw onboard 를 입력하며, Enter 를 눌러 온보딩을 시작합니다
  • 내장 대시보드: 게이트웨이 제어, 런타임 정보, 도구 관리
  • 도구 설치: 설정 → 추가 도구(Settings → Additional Tools) 화면에서 tmux, ttyd, dufs, Android Tools, Playwright, Claude Code, Gemini CLI, Codex CLI를 설치 스크립트(post-setup.sh --tools-only)로 설치합니다. tmux, ttyd, dufs, Android Tools는 서명된 Termux 패키지 목록으로 검증합니다. 설치에 실패했거나 --version 확인이 실패한 도구는 「동작하지 않음」과 다시 설치 버튼으로 표시합니다. code-server, OpenCode, SSH 서버, Chromium은 아직 앱에서 설치할 수 없으며, code-server는 앱 터미널에서 oa --install 로 설치할 수 있습니다
  • 설치·갱신: 설정 → 설치·갱신(Settings → Install & Update) 화면에서 앱이 oa --update 를 실행하고 진행 상황과 결과를 표시합니다. 취소는 초기 단계(3단계, 핵심 파일 교체 이전)에서만 가능합니다. 이 화면에는 OpenClaw 와 Node.js 버전, 앱에서 마지막으로 실행한 업데이트의 결과, 게이트웨이 상태와 「게이트웨이 중지」 버튼도 표시됩니다(앱 터미널에서 시작한 게이트웨이만 해당)
  • Termux와 독립 실행 — 앱 설치가 기존 Termux + oa 환경에 영향을 주지 않음
  • 앱과 기존 Termux 설치는 서로 독립이지만, 두 쪽 모두 OpenClaw 게이트웨이를 같은 기본 포트(18789)로 시작합니다. 한 번에 한 쪽에서만 게이트웨이를 실행하세요

Releases 페이지에서 APK를 다운로드하세요.

요구사항

  • Android 7.0 이상 (Android 10 이상 권장)
  • 약 2GB(2000MB) 이상의 여유 저장공간 (새 설치 전, 그리고 고정 버전이 바뀌는 업데이트 전에 확인합니다)
  • Wi-Fi 또는 모바일 데이터 연결

동작 원리

설치 스크립트는 Termux와 일반 Linux 환경의 차이를 자동으로 해결합니다. 사용자가 직접 할 일은 없으며, 설치 명령어 하나로 아래 내용이 모두 처리됩니다:

  1. glibc 환경 — glibc 동적 링커(pacman의 glibc-runner)를 설치하여 표준 Linux 바이너리가 수정 없이 실행되도록 설정. 설치 전에 Termux 서명 키로 패키지 목록을 검증합니다
  2. Node.js (glibc) — 공식 Node.js linux-arm64 바이너리를 다운로드하고 ld.so 로더 스크립트로 래핑 (patchelf는 Android에서 segfault를 유발하므로 미사용)
  3. 경로 변환 — 일반 Linux 경로(/tmp, /bin/sh, /usr/bin/env)를 Termux 경로로 자동 변환
  4. 임시 폴더 설정 — Android에서 접근 가능한 임시 폴더로 자동 설정
  5. 서비스 관리자 우회 — systemd 없이도 정상 동작하도록 설정
  6. OpenCode 통합 — 선택 시, proot + ld.so 결합 방식으로 Bun 독립 실행 바이너리인 OpenCode 설치

처음부터 설치하기 (초기화된 폰 기준)

  1. 폰 준비
  2. Termux 설치
  3. Termux 초기 설정
  4. OpenClaw 설치 — 명령어 하나
  5. OpenClaw 설정 시작
  6. OpenClaw(게이트웨이) 실행

1단계: 폰 준비

개발자 옵션, 화면 켜짐 유지, 충전 제한, 배터리 최적화 설정을 진행합니다. 프로세스 라이브 상태 유지 가이드를 참고하세요.

2단계: Termux 설치

중요: Google Play Store의 Termux는 업데이트가 중단되어 정상 동작하지 않습니다. 반드시 F-Droid에서 설치하세요.

  1. 폰 브라우저에서 F-Droid 공식 사이트에 접속
  2. Termux 검색 후 Download APK를 눌러 다운로드 및 설치
    • "출처를 알 수 없는 앱" 설치 허용 팝업이 뜨면 허용

3단계: Termux 초기 설정

Termux 앱을 열고 아래 명령어를 붙여넣으세요. 다음 단계에 필요한 curl을 설치합니다.

pkg upgrade -y && pkg install -y curl

처음 실행하면 저장소 미러를 선택하라는 메시지가 나올 수 있습니다. 아무거나 선택해도 되지만, 지역적으로 가까운 미러를 고르면 더 빠릅니다.

업그레이드 중 설정 파일에 대한 질문((Y/I/N/O/D/Z) [default=N] ?)이 나오면 Enter 를 눌러 기본값으로 진행하세요.

업그레이드를 건너뛰지 마세요. 새로 설치한 Termux 에서 curl 만 설치하면 curl 이 깨질 수 있습니다(CANNOT LINK EXECUTABLE "curl"). 이미 그렇게 됐다면 문제 해결을 보세요.

4단계: OpenClaw 설치

팁: SSH로 편하게 입력하기 이 단계부터는 폰 화면 대신 컴퓨터 키보드로 명령어를 입력할 수 있습니다. Termux SSH 접속 가이드를 참고하세요.

Termux에 아래 명령어를 붙여넣으세요.

curl -sL https://myopenclawhub.com/install | bash && source ~/.bashrc

명령어 하나로 모든 설치가 자동으로 진행됩니다. 3~10분 정도 소요되며 (네트워크 속도와 기기 성능에 따라 다름), Wi-Fi 환경을 권장합니다.

설치가 완료되면 OpenClaw 버전이 출력되고, openclaw onboard로 설정을 시작하라는 안내가 나타납니다.

5단계: OpenClaw 설정 시작

설치 완료 메시지의 안내에 따라 아래 명령어를 실행합니다.

openclaw onboard

화면의 안내에 따라 초기 설정을 진행합니다.

openclaw onboard

6단계: OpenClaw(게이트웨이) 실행

설정이 끝나면 게이트웨이를 실행합니다:

중요: openclaw gateway는 SSH가 아닌, 폰의 Termux 앱에서 직접 실행하세요. SSH로 실행하면 SSH 연결이 끊어질 때 게이트웨이도 함께 종료됩니다.

게이트웨이는 실행 중 터미널을 점유하므로, 별도 탭에서 실행하세요. 하단 메뉴바의 **햄버거 아이콘(☰)**을 탭하거나, 화면 왼쪽 가장자리에서 오른쪽으로 스와이프하면 (하단 메뉴바 위 영역) 사이드 메뉴가 나타납니다. NEW SESSION을 눌러 새 탭을 추가하세요.

Termux 사이드 메뉴

새 탭에서 실행합니다:

openclaw gateway
openclaw gateway 실행 화면

게이트웨이를 중지하려면 Ctrl+C를 누르세요. Ctrl+Z는 프로세스를 종료하지 않고 일시 중지만 시키므로, 반드시 Ctrl+C를 사용하세요.

프로세스 라이브 상태 유지

Android는 백그라운드 프로세스를 종료하거나 화면이 꺼지면 스로틀링할 수 있습니다. 프로세스 라이브 상태 유지 가이드에서 모든 권장 설정(개발자 옵션, 화면 켜짐 유지, 충전 제한, 배터리 최적화, Phantom Process Killer)을 확인하세요.

PC에서 대시보드 접속

SSH 접속 및 대시보드 터널 설정은 Termux SSH 접속 가이드를 참고하세요.

대시보드 주소는 http://127.0.0.1:18789/ 입니다. 토큰을 요구하거나 "unauthorized"가 나오면 토큰을 출력해서 함께 여세요:

node -p "require(process.env.HOME + '/.openclaw/openclaw.json').gateway.auth.token"

출력된 토큰을 대시보드의 인증 입력란에 붙여 넣거나 http://127.0.0.1:18789/#token=<토큰> 주소로 여세요. 토큰은 공개하지 마세요. 자세한 내용: 대시보드가 토큰을 요구함.

여러 디바이스 관리

같은 네트워크에서 여러 기기에 OpenClaw를 운영한다면, Dashboard Connect 도구로 PC에서 편리하게 관리할 수 있습니다.

  • 각 기기의 연결 정보(IP, 토큰, 포트)를 닉네임과 함께 저장
  • SSH 터널 명령어와 대시보드 URL을 자동 생성
  • 데이터는 로컬에만 저장 — 연결 정보(IP, 토큰, 포트)는 브라우저의 localStorage에만 저장되며 어떤 서버로도 전송되지 않습니다.

CLI 명령어

설치 후 oa 명령어로 설치를 관리할 수 있습니다:

옵션 설명
oa --update OpenClaw 및 Android 패치 업데이트
oa --install 선택적 도구 설치 (tmux, code-server, AI CLI 등)
oa --uninstall OpenClaw on Android 제거
oa --backup OpenClaw 데이터 전체 백업 생성
oa --restore 백업에서 복구 (--force-no-safety: 안전 백업을 저장하지 못해도 진행)
oa --status 설치 상태 및 모든 설치된 컴포넌트 정보 표시 (하드링크 패치 상태 포함)
oa --version 버전 표시
oa --help 사용 가능한 옵션 표시

업데이트

oa --update && source ~/.bashrc

이 명령어 하나로 설치된 모든 컴포넌트를 한번에 업데이트합니다:

  • OpenClaw — 고정(pinned)된 검증 버전으로 유지되는 코어 패키지 (현재 2026.10.2 — 항상 최신 릴리스는 아님)
  • code-server — 브라우저 IDE
  • OpenCode — AI 코딩 어시스턴트
  • AI CLI 도구 — Claude Code, Gemini CLI, Codex CLI (Termux)
  • Android 패치 — 이 프로젝트의 호환성 패치

이미 최신인 컴포넌트는 스킵됩니다. 설치하지 않은 컴포넌트는 건드리지 않고 — 기기에 이미 설치된 것만 업데이트합니다. 여러 번 실행해도 안전합니다.

업데이트 중에 게이트웨이가 실행 중이었다면, 업데이트 뒤 다시 시작하세요(멈춘 뒤 openclaw gateway 를 다시 실행하거나 앱을 다시 시작) — 그래야 업데이트된 런타임을 사용합니다.

한 번에 하나의 설치·업데이트·도구 설치만 실행합니다(새 설치, oa --update, Claw 앱의 도구 설치는 잠금 하나를 공유합니다). 다른 실행이 진행 중이면 oa --update 는 [FAIL] Another update, setup or tools run is in progress. Try again when it has finished. 를 출력하고 설치 상태를 바꾸지 않은 채 종료 코드 2 로 끝납니다(문제 해결 참고).

고정 버전이 바뀌는 업데이트(예: Script v1.2.0 에서 Node.js 24.21.0 과 OpenClaw 2026.9 로 바뀌는 경우)에서 oa --update 는 다음 안전장치를 추가로 적용합니다:

  • 여유 공간 2000MB 가 필요합니다. 부족하면 아무것도 바꾸기 전에 멈추고 필요한 양과 남은 양을 알려 줍니다.
  • OpenClaw 게이트웨이가 실행 중이면 아무것도 바꾸지 않고 멈춥니다. 게이트웨이를 멈추고(Ctrl+C) oa --update 를 다시 실행하세요. Claw 앱에서는 설정 → 설치·갱신 → 「게이트웨이 중지」로 앱 터미널에서 시작한 게이트웨이를 멈출 수 있으며, 앱의 「업데이트」 버튼도 그런 게이트웨이를 먼저 멈춘 뒤 진행합니다. 앱이 업데이트를 위해 게이트웨이를 멈췄다면 업데이트가 끝난 뒤 대시보드에서 다시 시작하세요.
  • 먼저 ~/.openclaw-android/backup/pre-update/ 에 데이터 백업을 만듭니다(최신 3개만 보관). 이 백업을 만드는 동안 Node.js 가 응답하지 않으면 Node.js 와 OpenClaw 를 바꾸기 전에 업데이트가 멈춥니다. 다시 실행하거나, OA_SKIP_PRE_UPDATE_BACKUP=1 을 설정해 백업 없이 업데이트할 수 있습니다(이 경우 데이터는 자동으로 이전되지 않습니다).
  • 설치 뒤 OpenClaw 설정과 데이터 상태를 확인합니다. 데이터 이전이 필요하고 이번 실행에서 백업을 만들었을 때만 openclaw doctor --fix 를 한 번 자동으로 실행합니다(최대 2분). 실패하면 백업 위치와 수동 방법(게이트웨이를 멈추고 openclaw doctor --fix 실행)을 안내하고 실패로 끝납니다.

자동 이전을 끄려면 OA_SKIP_AUTO_DOCTOR=1, 자동 백업을 건너뛰려면 OA_SKIP_PRE_UPDATE_BACKUP=1 을 설정하세요.

oa --update 는 Node.js 나 OpenClaw 를 더 낮은 버전으로 내리지 않습니다(예: 배포 직후 옛 파일이 내려온 경우). 의도적으로 내리려면 OA_ALLOW_OPENCLAW_DOWNGRADE=1 과 OA_ALLOW_NODE_DOWNGRADE=1 을 둘 다 설정해야 합니다. oa --restore 는 데이터만 되돌리고 프로그램은 되돌리지 않습니다.

참고: openclaw update(및 openclaw --update)는 의도적으로 차단되어 있습니다 — 이 프로젝트가 검증한 버전에 OpenClaw을 고정하는 가드가 설치되어 있기 때문입니다. 게이트웨이의 "update available" 알림은 꺼져 있습니다(update.checkOnStart=false). 직접 다시 켠 경우 update available … Run: openclaw update 같은 메시지가 출력될 수 있지만 해당 명령어는 차단되므로 대신 oa --update를 사용하세요. openclaw update status(읽기 전용)는 계속 동작합니다. OpenClaw 2026.10.2 은 대시보드의 Update 버튼, 에이전트의 gateway 도구, openclaw gateway call update.run 으로 자체 업데이트를 시작할 수 있습니다. 이 경로는 openclaw 명령 가드를 거치지 않으므로 Node.js 래퍼가 OpenClaw 의 자체 업데이트도 차단합니다([BLOCKED]). OpenClaw 의 메시지가 openclaw update --yes 나 openclaw update repair 를 권하는 경우가 있으나 이 명령도 차단되어 있으므로 oa --update 를 사용하세요.

oa 명령어가 없는 경우 (이전 설치 사용자), curl로 실행:

curl -sL https://myopenclawhub.com/update | bash && source ~/.bashrc

백업 및 복구

OpenClaw의 내장 백업 명령어(openclaw backup create)는 Android의 앱 전용 저장소에서 막히는 하드링크에 의존합니다. OpenClaw on Android 가 적용하는 하드링크 패치로 복사로 대체할 수 있습니다(아래의 하드링크 패치 문단 참고). oa --backup 명령어는 OpenClaw 데이터 폴더(~/.openclaw) 전체를 tar로 묶고, SQLite 데이터베이스는 일관된 스냅샷으로 담습니다. 이어서 OpenClaw 가 받아들이면 openclaw backup verify로, 그렇지 않으면 gzip과 tar 검사로 아카이브를 확인합니다(OpenClaw 2026.9 이후는 절대 경로 plugin-skills 링크가 든 아카이브를 거부합니다. 스크립트 v1.3.4 부터 만든 백업에는 그 링크가 빠지며, 이전 백업의 복원은 정상입니다). Node.js 가 제한 시간(빠른 호출 OA_NODE_PROBE_TIMEOUT 30초, 데이터베이스 스냅샷 한 건당 OA_NODE_WORK_TIMEOUT 300초) 안에 응답하지 않으면, 불완전할 수 있는 사본을 저장하지 않고 종료 코드 75 로 중단하며 아카이브를 만들지 않습니다.

백업 생성:

oa --backup

백업은 ~/.openclaw-android/backup/ 폴더에 타임스탬프가 포함된 파일명(예: 2026-03-14T00-00-00.000Z-openclaw-backup.tar.gz)으로 저장됩니다. oa --backup ~/my-backups/와 같이 사용자 지정 경로를 지정할 수도 있습니다. 백업에는 설정, 상태, 대화 기록, 워크스페이스, 에이전트 데이터가 포함됩니다(로그, 임시 파일, 플러그인 의존성 폴더, 생성된 plugin-skills 링크는 제외).

백업 파일은 비공개로 보관하세요. 백업에는 API 키와 로그인 자격 증명이 들어 있습니다. 파일은 본인만 읽을 수 있게 만들어지지만(/sdcard 같은 공유 저장소에서는 적용되지 않을 수 있음), 공개된 곳에 공유하거나 올리지 마세요.

Claw 앱: oa --backup이 backup.sh not found라고 나오면(이 기능이 들어오기 전에 설치한 앱) oa --update를 한 번 실행하세요.

고정 버전이 바뀌는 업데이트 전에는 oa --update 가 ~/.openclaw-android/backup/pre-update/ 에 백업을 자동으로 만듭니다(최신 3개 보관). 업데이트를 참고하세요.

백업에서 복구:

oa --restore

이 명령어를 실행하면 기본 백업 폴더에 있는 사용 가능한 백업 목록이 표시되며, pre-update/ 백업도 포함됩니다. 복구하려는 백업의 번호를 선택하면 됩니다. 도구가 백업 매니페스트에서 플랫폼을 자동으로 감지하여 이 기기의 ~/.openclaw/ 경로로 복구합니다(다른 기기에서 만든 백업도 복구할 수 있습니다). 먼저 OpenClaw 게이트웨이를 중지하세요. 게이트웨이가 실행 중이면 복구를 거부합니다. 덮어쓰기 전에 현재 데이터를 ~/.openclaw-android/backup/pre-restore/에 안전 백업으로 저장합니다. 백업 이후에 만든 파일은 그대로 남습니다. 실행 전 확인 절차가 진행됩니다. 백업에 기록된 OpenClaw 버전이 설치된 버전보다 새로우면 경고하고 확인을 받습니다(기본값은 No). 더 옛 버전의 백업이면 복구 뒤 openclaw doctor --fix 를 실행하라고 안내합니다. oa --restore 는 데이터만 되돌리고 프로그램은 되돌리지 않습니다. 안전 백업을 저장하지 못하면(예: 저장 공간 부족) 아무것도 바꾸지 않고 복구를 중단합니다. 공간을 확보한 뒤 다시 시도하거나, 안전 백업 없이 복구하려면 oa --restore --force-no-safety를 실행하세요.

다른 환경에서 옮겨 온 데이터. Claw 앱과 Termux 사이, 디버그 앱과 릴리스 앱 사이를 옮기거나 다른 기기의 백업을 복구하면, OpenClaw 데이터 안에 다른 앱의 홈 경로(/data/data/<다른 패키지>/files/home/...)가 남을 수 있습니다. Android 는 다른 앱의 폴더에 접근하면 권한 오류(EACCES)를 내며, OpenClaw 2026.9 의 데이터 이전은 이 경로에서 멈춥니다. oa --update(설정 확인 직전)와 모든 oa --restore(같은 환경 복구 포함)는 이제 OpenClaw 상태 데이터베이스의 에이전트 데이터베이스 등록 행과 오래된 lease 행, 그리고 openclaw.json 의 에이전트 workspace·agentDir 값에서 이런 경로를 고칩니다. 고치기 전에 ~/.openclaw/state/openclaw.sqlite.oa-before-repair-<날짜시각> 과 ~/.openclaw/openclaw.json.oa-before-repair-<날짜시각> 이라는 사본을 남깁니다(최신 3개 보관). 자동으로 고칠 수 없는 값이 있으면 경고가 나오며, 그 경우 openclaw.json 의 해당 경로를 현재 홈($HOME) 아래로 직접 고치세요. 문제 해결 문서를 참고하세요.

문제 해결

자세한 트러블슈팅 가이드는 문제 해결 문서를 참고하세요.

성능

openclaw status 같은 명령어는 PC보다 느리게 느껴질 수 있습니다. 이는 명령어를 실행할 때마다 많은 파일을 읽어야 하는데, 폰의 저장장치가 PC보다 느리고 Android의 보안 처리가 추가되기 때문입니다.

단, 게이트웨이가 실행된 이후에는 차이가 없습니다. 프로세스가 메모리에 상주하므로 파일을 다시 읽지 않고, AI 응답은 외부 서버에서 처리되므로 PC와 동일한 속도입니다.

로컬 LLM 실행

OpenClaw 의 로컬 LLM 지원은 node-llama-cpp 를 사용했습니다. 고정된 OpenClaw 버전은 더 이상 node-llama-cpp 를 의존성으로 두지 않으며(문서는 관리형 llama-server 를 설명합니다), 이 버전으로 폰에서 로컬 추론을 시험하지 않았습니다 — 아래 내용은 검증된 구성이 아니라 일반적인 제약입니다.

다만 현실적인 제약이 있습니다:

제약 상세
RAM GGUF 모델은 최소 2-4GB 여유 메모리 필요 (7B 모델, Q4 양자화 기준). 폰 RAM은 Android와 다른 앱이 공유
저장공간 모델 파일 크기 4GB~70GB+. 폰 저장공간이 빠르게 소진됨
속도 ARM CPU에서 추론은 매우 느림. Android에서는 llama.cpp GPU 오프로딩을 지원하지 않음
용도 OpenClaw는 주로 클라우드 LLM API(OpenAI, Gemini 등)로 라우팅하며, PC와 동일한 속도로 응답. 로컬 추론은 보조 기능

실험 목적이라면 TinyLlama 1.1B (Q4, ~670MB) 같은 소형 모델은 폰에서 실행할 수 있습니다. 실제 사용에는 클라우드 LLM 제공자를 권장합니다.

왜 --ignore-scripts인가? 설치 스크립트는 npm install -g [email protected] --ignore-scripts(고정된 버전)를 사용합니다. 네이티브 의존성의 install 스크립트(node-gyp 빌드, 프리빌트 바이너리 내려받기)는 Termux 에서 대부분 실패하고, 한 건만 실패해도 설치 전체가 멈추기 때문입니다. OpenClaw 의 핵심 부분은 이 스크립트 없이 작동하므로 스크립트를 건너뛰고, 필요한 것만 명시적으로 복구합니다.

개발자용 기술 문서

설치 컴포넌트

설치 스크립트는 여러 패키지 매니저를 통해 인프라, 플랫폼 패키지, 선택적 도구를 설치합니다. 핵심 인프라와 플랫폼 의존성은 자동으로 설치되고, 선택적 도구는 설치 중 개별적으로 선택할 수 있습니다.

핵심 인프라 (항상 설치)

컴포넌트 역할 설치 방식
git 버전 관리, npm git 의존성 pkg install

에이전트 플랫폼 런타임 의존성

플랫폼의 config.env 플래그로 제어됩니다. OpenClaw의 경우 모두 설치됩니다:

컴포넌트 역할 설치 방식
pacman glibc 패키지 관리자 pkg install
glibc-runner glibc 동적 링커 — 표준 Linux 바이너리를 Android에서 실행 pacman -Sy
Node.js 24.21.0 (linux-arm64) OpenClaw용 JavaScript 런타임, sha256로 검증되는 고정 버전 nodejs.org에서 직접 다운로드
python 네이티브 C/C++ 애드온 빌드 스크립트 (node-gyp) pkg install
make 네이티브 모듈 Makefile 실행 pkg install
cmake CMake 기반 네이티브 모듈 빌드 pkg install
clang 네이티브 모듈용 C/C++ 컴파일러 pkg install
binutils 네이티브 빌드용 바이너리 유틸리티 (llvm-ar) pkg install

OpenClaw 플랫폼

컴포넌트 역할 설치 방식
OpenClaw AI 에이전트 플랫폼 (핵심), 검증된 버전으로 고정 (2026.10.2) npm install -g
clawdhub OpenClaw 스킬 매니저 npm install -g
PyYAML .skill 패키징용 YAML 파서 pip install

선택적 도구 (설치 중 선택)

각 도구는 개별 Y/n 프롬프트로 제공됩니다. 원하는 도구만 선택하여 설치할 수 있습니다. 선택적 도구 설치가 실패해도 경고만 표시하고 건너뛸 뿐, 나머지 설치 과정을 중단하지 않습니다.

컴포넌트 역할 설치 방식
tmux 백그라운드 세션용 터미널 멀티플렉서 pkg install
ttyd 웹 터미널 — 브라우저에서 Termux 접속 pkg install
dufs HTTP/WebDAV 파일 서버 pkg install
android-tools Phantom Process Killer 비활성화용 ADB pkg install
code-server 브라우저 기반 VS Code IDE, 4.117.0으로 고정 (이 환경에서 동작을 확인한 버전) GitHub에서 직접 다운로드
OpenCode AI 코딩 어시스턴트 (TUI). Bun과 proot을 의존성으로 자동 설치 bun install -g
Chromium OpenClaw 브라우저 자동화 (~400MB) 전용 설치 스크립트
Playwright 브라우저 자동화 라이브러리 (Chromium 필요). PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH 자동 설정 전용 설치 스크립트
Claude Code (Anthropic) AI CLI 도구 — 네이티브 바이너리는 번들된 glibc 로더를 통해 실행되며, npm install -g 로 업데이트된 뒤에는 npm 래퍼가 그 런처를 복원함 (Claw 앱에서 확인) npm install -g
Gemini CLI (Google) AI CLI 도구 npm install -g
Codex CLI (OpenAI Codex의 Termux 포크) AI CLI 도구 npm install -g

프로젝트 구조

openclaw-android/
├── bootstrap.sh                # curl | bash 원라이너 설치 (다운로더)
├── install.sh                  # 플랫폼 인식 설치 스크립트 (진입점)
├── oa.sh                       # 통합 CLI (설치 시 $PREFIX/bin/oa로 설치)
├── post-setup.sh               # Claw 앱 부트스트랩 후 설치 (OTA 배포)
├── update.sh                   # Thin wrapper (update-core.sh 다운로드 후 실행)
├── update-core.sh              # 기존 설치 환경 경량 업데이터
├── uninstall.sh                # 깔끔한 제거 (오케스트레이터)
├── patches/
│   ├── glibc-compat.js        # Node.js 런타임 패치 (os.cpus, networkInterfaces)
│   ├── argon2-stub.js          # argon2 네이티브 모듈용 JS 스텅 (code-server)
│   ├── termux-compat.h         # Bionic 네이티브 빌드용 C 헤더 (sharp)
│   ├── spawn.h                 # POSIX spawn 스텅 헤더
│   ├── systemctl               # Termux용 systemd 스텅
│   ├── apply-patches.sh        # 레거시 패치 오케스트레이터 (v1.0.2 호환)
│   └── patch-paths.sh          # 레거시 경로 수정 (v1.0.2 호환)
├── scripts/
│   ├── lib.sh                  # 공유 함수 라이브러리 (색상, 플랫폼 감지, 프롬프트)
│   ├── check-env.sh            # 사전 환경 점검
│   ├── install-infra-deps.sh   # 핵심 인프라 패키지 (L1)
│   ├── install-glibc.sh        # glibc-runner 설치 (L2 조건부)
│   ├── install-nodejs.sh       # Node.js glibc 래퍼 설치 (L2 조건부)
│   ├── install-build-tools.sh  # 네이티브 모듈용 빌드 도구 (L2 조건부)
│   ├── backup.sh               # OpenClaw 데이터 백업/복구 (oa --backup/--restore)
│   ├── build-sharp.sh          # sharp 네이티브 모듈 빌드 (이미지 처리)
│   ├── install-chromium.sh     # 브라우저 자동화용 Chromium 설치
│   ├── install-playwright.sh   # Playwright 브라우저 자동화 라이브러리 설치
│   ├── install-code-server.sh  # code-server 설치/업데이트 (브라우저 IDE)
│   ├── install-opencode.sh     # OpenCode 설치
│   ├── setup-env.sh            # 환경변수 설정
│   └── setup-paths.sh          # 디렉토리 및 심볼릭 링크 생성
├── platforms/
│   ├── openclaw/               # OpenClaw 플랫폼 플러그인
│   │   ├── config.env          # 플랫폼 메타데이터 및 의존성 선언
│   │   ├── env.sh              # 플랫폼별 환경변수
│   │   ├── install.sh          # 플랫폼 패키지 설치 (npm, 패치, clawdhub)
│   │   ├── update.sh           # 플랫폼 패키지 업데이트
│   │   ├── openclaw-shim.sh    # `openclaw update` 버전 고정 가드 생성
│   │   ├── uninstall.sh        # 플랫폼 패키지 제거
│   │   ├── limits.sh           # node/npm 호출의 시간 제한 (update · verify · status)
│   │   ├── status.sh           # 플랫폼 상태 표시
│   │   ├── verify.sh           # 플랫폼 검증 체크
│   │   └── patches/            # 플랫폼 전용 패치
│   │       ├── openclaw-apply-patches.sh
│   │       ├── openclaw-patch-paths.sh
│   │       ├── openclaw-patch-hardlink.sh  # Android 하드링크/reflink 대체 처리 (OpenClaw 용)
│   │       └── openclaw-build-sharp.sh
├── tests/
│   └── verify-install.sh       # 설치 후 검증 (오케스트레이터 + 플랫폼)
└── docs/
    ├── disable-phantom-process-killer.md    # 프로세스 라이브 상태 유지 가이드 (영문)
    ├── disable-phantom-process-killer.ko.md # 프로세스 라이브 상태 유지 가이드 (한국어)
    ├── termux-ssh-guide.md     # Termux SSH 접속 가이드 (영문)
    ├── termux-ssh-guide.ko.md  # Termux SSH 접속 가이드 (한국어)
    ├── troubleshooting.md      # 트러블슈팅 가이드 (영문)
    ├── troubleshooting.ko.md   # 트러블슈팅 가이드 (한국어)
    └── images/                 # 스크린샷 및 이미지

아키텍처

이 프로젝트는 플랫폼 플러그인 아키텍처를 사용하여 플랫폼 비종속 인프라와 플랫폼별 코드를 분리합니다:

┌─────────────────────────────────────────────────────────────┐
│  오케스트레이터 (install.sh, update-core.sh, uninstall.sh) │
│  ── 플랫폼 비종속. config.env를 읽고 위임.                │
├─────────────────────────────────────────────────────────────┤
│  공유 스크립트 (scripts/)                                  │
│  ── L1: install-infra-deps.sh (항상 실행)                │
│  ── L2: install-glibc.sh, install-nodejs.sh,              │
│         install-build-tools.sh (config.env 조건부)       │
│  ── L3: 선택적 도구 (사용자 선택)                        │
├─────────────────────────────────────────────────────────────┤
│  플랫폼 플러그인 (platforms/<name>/)                       │
│  ── config.env: 의존성 선언 (PLATFORM_NEEDS_*)           │
│  ── install.sh / update.sh / uninstall.sh / ...           │
└─────────────────────────────────────────────────────────────┘

의존성 계층:

계층 범위 예시 제어 주체
L1 인프라 (항상 설치) git, pkg update 오케스트레이터
L2 플랫폼 런타임 (조건부) glibc, Node.js, 빌드 도구 config.env 플래그
L3 선택적 도구 (사용자 선택) tmux, code-server, AI CLI 사용자 프롬프트

각 플랫폼은 config.env에서 L2 의존성을 선언합니다:

# platforms/openclaw/config.env
PLATFORM_NEEDS_GLIBC=true
PLATFORM_NEEDS_NODEJS=true
PLATFORM_NEEDS_BUILD_TOOLS=true

오케스트레이터는 이 플래그를 읽고 해당하는 설치 스크립트를 조건부로 실행합니다. 특정 의존성이 필요 없는 플랫폼은 해당 플래그를 false로 설정하면 무거운 의존성이 전부 스킵됩니다.

설치 흐름 상세

bash install.sh를 실행하면 아래 8단계가 순서대로 실행됩니다.

[1/8] 환경 체크 — scripts/check-env.sh

설치를 시작하기 전에 현재 환경이 적합한지 검증합니다.

  • Termux 감지: $PREFIX 환경변수 존재 여부로 Termux 환경인지 확인. 없으면 즉시 종료
  • 아키텍처 확인: uname -m으로 CPU 아키텍처 확인 (aarch64 권장, armv7l 지원, x86_64은 에뮬레이터로 판단)
  • 디스크 여유 공간: $PREFIX 파티션에 최소 2000MB 이상 여유 공간이 있는지 확인. 부족하면 필요한 양과 남은 양을 표시하고 오류
  • 기존 설치 감지: openclaw 명령어가 이미 존재하면 현재 버전을 표시하고 재설치/업데이트임을 안내
  • Node.js 사전 확인: 이미 설치된 Node.js가 있으면 버전을 표시하고, 24 미만이면 업그레이드 예고
  • Phantom Process Killer (Android 12+): Phantom Process Killer에 대한 안내 메시지와 비활성화 가이드 링크를 표시

[2/8] 플랫폼 선택

설치할 플랫폼을 선택합니다. 현재는 openclaw으로 하드코딩되어 있습니다. 향후 여러 플랫폼이 제공되면 선택 UI가 추가될 예정입니다.

scripts/lib.sh의 load_platform_config()를 통해 플랫폼의 config.env를 로드하여, 이후 단계에서 사용할 모든 PLATFORM_* 변수를 내보냅니다.

[3/8] 선택적 도구 선택 (L3)

11개의 개별 Y/n 프롬프트(/dev/tty 사용)로 선택적 도구를 선택합니다:

  • tmux, ttyd, dufs, android-tools
  • Chromium, Playwright
  • code-server, OpenCode
  • Claude Code, Gemini CLI, Codex CLI (Termux)

모든 선택은 설치 시작 전에 한 번에 수집됩니다. 사용자가 모든 결정을 마치면 설치 중 자리를 비울 수 있습니다.

[4/8] 핵심 인프라 (L1) — scripts/install-infra-deps.sh + scripts/setup-paths.sh

플랫폼 선택과 무관하게 항상 실행됩니다.

install-infra-deps.sh:

  • pkg update -y && pkg upgrade -y로 패키지 저장소 갱신 및 업그레이드
  • git 설치 (npm git 의존성 및 저장소 클론에 필요)

setup-paths.sh:

  • $PREFIX/tmp와 $HOME/.openclaw-android/patches 디렉토리 생성
  • 표준 Linux 경로(/bin/sh, /usr/bin/env, /tmp)의 Termux 매핑 표시

[5/8] 플랫폼 런타임 의존성 (L2)

플랫폼의 config.env 플래그에 따라 런타임 의존성을 조건부로 설치합니다:

플래그 스크립트 설치 내용
PLATFORM_NEEDS_GLIBC=true scripts/install-glibc.sh pacman, glibc-runner (ld-linux-aarch64.so.1 제공)
PLATFORM_NEEDS_NODEJS=true scripts/install-nodejs.sh Node.js 24.21.0 linux-arm64 (sha256 검증), grun 스타일 래퍼 스크립트
PLATFORM_NEEDS_BUILD_TOOLS=true scripts/install-build-tools.sh python, make, cmake, clang, binutils

각 스크립트는 사전 체크와 멱등성(이미 설치된 경우 스킵)을 갖춘 독립 실행형입니다.

Node.js 래퍼의 기본값: OpenClaw 2026.9.x 는 Node.js 24.16 이상을 요구합니다. OpenClaw 의 파일 안전 모듈(@openclaw/fs-safe)은 네이티브 도우미에서 openat2 시스템 콜을 사용하는데, Android 의 앱 seccomp 정책이 이 호출을 SIGSYS(Bad system call)로 종료시킵니다. 그래서 래퍼는 기본으로 FS_SAFE_TEST_NO_OPENAT2=1 을 설정하여, 네이티브 도우미는 유지하되 openat2 를 사용하지 않게 합니다(값이 정확히 1 이어야 인식됩니다). FS_SAFE_NATIVE_MODE=off 를 설정하면 네이티브 도우미 자체를 끌 수 있으나, 그러면 OpenClaw 의 일부 데이터 이전이 거부될 수 있습니다. 래퍼는 OPENCLAW_NO_AUTO_UPDATE=1 도 기본으로 설정하고 OpenClaw 의 자체 업데이트를 차단합니다(업데이트 참고).

하드링크 패치: Android 는 앱 데이터 영역에서 하드링크와 reflink(FICLONE) 복사를 막습니다(앱과 Termux 모두, 오류 EACCES). OpenClaw 2026.10.2 은 하드링크를 먼저 시도하고 「지원 안 함」 오류일 때만 복사로 넘어가는데, EACCES 는 지원 안 함으로 보지 않습니다. 또 대화 기록을 이전한 뒤 원본을 보관 폴더로 옮길 때는 하드링크만 사용합니다. 그대로 두면 7.35 에서 올라온 사용자의 데이터 이전이 실패합니다. OpenClaw on Android 는 OpenClaw 를 설치하거나 업데이트할 때마다(앱 설치, Termux 설치, oa --update, 그리고 npm install -g openclaw@<고정 버전> 으로 다시 설치할 때) platforms/openclaw/patches/openclaw-patch-hardlink.sh 로 OpenClaw 의 해당 부분을 고칩니다. EACCES 를 복사로 넘어가는 경우에 포함하고, 보관 폴더로 옮길 때는 하드링크가 거부되면 같은 파일 시스템 안의 이름 바꾸기(rename)로 처리합니다. 이에 따라 openclaw backup create 도 하드링크 대신 복사를 사용할 수 있습니다. oa --status 에 Hard-link patch: applied (…) 또는 not complete (…) 줄이 표시됩니다. 대화 기록이 있는 7.35 사용자가 고정 버전이 바뀌는 업데이트를 하면, 설치할 OpenClaw 에 이 패치가 맞는지 먼저 확인하고 맞지 않으면 아무것도 바꾸지 않고 멈춥니다(문제 해결 참고). 또 OpenClaw 2026.10 은 게이트웨이 잠금을 위해 프로세스 네임스페이스 파일 /proc/self/ns/pid 를 읽는데, 많은 Android 커널이 앱에 이 파일을 제공하지 않습니다(조회가 ENOENT 또는 EACCES 로 실패). 같은 패치가 OpenClaw 가 이 파일을 「없음」으로 취급하게 하여 게이트웨이가 시작을 거부하지 않도록 합니다.

알려진 한계: OpenClaw 의 데스크톱 자동화 도구(@trycua/cua-driver)는 Android 10 이하(API 29 이하)에서 필요한 시스템 콜 일부가 막혀 동작하지 않을 수 있습니다.

[6/8] 플랫폼 패키지 설치 (L2) — platforms/<platform>/install.sh

플랫폼 고유의 설치 스크립트에 위임합니다. OpenClaw의 경우:

  1. CPATH를 glib-2.0 헤더용으로 설정 (네이티브 모듈 빌드에 필요)
  2. pip으로 PyYAML 설치 (.skill 패키징용)
  3. glibc-compat.js를 ~/.openclaw-android/patches/에 복사 (Node.js 래퍼는 Node.js 설치 때 함께 들어가는 ~/.openclaw-android/lib/ 사본을 읽습니다 — 앱이 덮어쓰지 않는 위치)
  4. systemctl 스텅을 $PREFIX/bin/에 설치
  5. npm install -g [email protected] --ignore-scripts 실행 (config.env에 고정된 버전)
  6. --ignore-scripts로 건너뛴 OpenClaw 자체 postinstall 스크립트(postinstall-bundled-plugins.mjs) 실행
  7. openclaw-apply-patches.sh로 플랫폼별 패치 적용
  8. openclaw update 가드(openclaw-shim.sh) 설치 — 고정 버전이 유지되도록 함
  9. clawdhub (스킬 매니저) 및 필요 시 undici 의존성 설치
  10. 게이트웨이의 "update available" 알림 끄기(openclaw config set update.checkOnStart false) — 이미 직접 설정한 값이 있으면 그대로 둠

이전 설치가 중간에 끊긴 경우: 설치 스크립트는 설치가 진행 중임을 기록하고, 설치·postinstall·패치·확인이 모두 통과한 뒤에만 그 기록을 삭제합니다. 설치 후에도 OpenClaw 가 불완전하면 Termux 설치 프로그램은 [FAIL] OpenClaw <version> was installed but is incomplete (files are missing or it does not start). 와 Run the installer again. 를 표시하고 중단합니다. Claw 앱의 설정 스크립트(post-setup.sh)는 끝나지 않은 이전 설치를 감지하여([WARN] OpenClaw <version> is incomplete (an earlier install was cut off): installing it again) 버전이 같아도 OpenClaw 를 다시 설치하며, 데이터는 건드리지 않습니다. 그 뒤에도 OpenClaw 가 불완전하면 설정은 다음 오류와 함께 중단됩니다: OpenClaw <version> is still incomplete (files are missing or it does not start). Restart the app to try again. Claw 앱(v0.4.5 이상)은 이 실패를 설정 화면에 표시하며, 다시 시도하는 버튼을 제공합니다.

[6.5] 환경변수 + CLI + 마커:

플랫폼 설치 후 오케스트레이터가:

  • setup-env.sh를 실행하여 .bashrc 환경변수 블록 작성
  • 플랫폼의 env.sh를 평가하여 플랫폼별 변수 설정
  • 플랫폼 마커 파일(~/.openclaw-android/.platform) 기록
  • oa CLI와 oaupdate 래퍼를 $PREFIX/bin/에 설치
  • lib.sh, setup-env.sh, 플랫폼 디렉토리를 ~/.openclaw-android/에 복사 (업데이터와 언인스톨러가 사용)

[7/8] 선택적 도구 설치 (L3)

3단계에서 선택한 도구를 설치합니다:

  • Termux 패키지: tmux, ttyd, dufs, android-tools — pkg install로 설치
  • code-server: 브라우저 기반 VS Code IDE. Termux 전용 워커라운드 포함 (번들 node 교체, argon2 패치, 하드 링크 실패 처리)
  • OpenCode: AI 코딩 어시스턴트. proot + ld.so 결합 방식으로 Bun 독립 실행 바이너리 지원
  • Chromium: OpenClaw 브라우저 자동화 지원 (~400MB)
  • Playwright: 브라우저 자동화 라이브러리 (playwright-core npm 설치). PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH 및 PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD 환경변수 자동 설정. Chromium 미설치 시 자동 설치
  • AI CLI 도구: Claude Code, Gemini CLI, Codex CLI (Termux) — npm install -g로 설치. 설치 실패 시 경고만 표시하고 건너뛰며 설치 전체를 중단하지 않음 (Claude Code는 glibc 로더를 통해 실행됩니다. Codex CLI는 패키지가 os: android 를 선언하는데 이 Node.js는 linux 를 보고하므로 Claw 앱에서는 --force 로 설치합니다. Termux에서는 여전히 경고와 함께 건너뛸 수 있습니다)

[8/8] 검증 — tests/verify-install.sh

2단계 검증을 실행합니다:

오케스트레이터 검증 (FAIL 레벨):

검증 항목 PASS 조건
Node.js 버전 node -v가 고정 버전과 일치 (platforms/openclaw/config.env)
npm npm 명령어 존재
TMPDIR 환경변수 설정됨
OA_GLIBC 1로 설정됨
glibc-compat.js ~/.openclaw-android/lib/에 파일 존재 (Node.js 래퍼가 읽는 사본 · 없으면 patches/)
.glibc-arch 마커 파일 존재
glibc 동적 링커 ld-linux-aarch64.so.1 존재
glibc node 래퍼 ~/.openclaw-android/bin/node에 래퍼 스크립트 존재
디렉토리 ~/.openclaw-android, $PREFIX/tmp 존재
.bashrc 환경변수 블록 포함

오케스트레이터 검증 (WARN 레벨, 비필수):

검증 항목 PASS 조건
code-server code-server --version 성공
opencode opencode 명령어 존재

플랫폼 검증 — platforms/<platform>/verify.sh에 위임:

검증 항목 PASS 조건
openclaw openclaw --version 성공
openclaw 패키지 버전 config.env의 고정 버전과 일치
openclaw update 가드 $PREFIX/bin/openclaw에 설치됨
CONTAINER 1로 설정됨
clawdhub 명령어 존재
~/.openclaw 디렉토리 존재

모든 FAIL 레벨 항목 통과 시 PASSED. FAIL 발생 시 재설치 안내를 표시합니다. WARN 항목은 실패로 처리되지 않습니다.

경량 업데이터 흐름 — oa --update

oa --update (또는 하위 호환을 위한 oaupdate)를 실행하면 GitHub에서 최신 릴리스 tarball을 다운로드하고 아래 5단계를 순서대로 실행합니다.

[1/5] 사전 점검

업데이트를 위한 최소 조건을 확인합니다.

  • $PREFIX 존재 확인 (Termux 환경)
  • curl 사용 가능 여부 확인
  • ~/.openclaw-android/.platform 마커 파일에서 플랫폼 감지
  • 아키텍처 감지: glibc (.glibc-arch 마커) 또는 Bionic (레거시)
  • 구버전 디렉토리 마이그레이션 (.openclaw-lite → .openclaw-android — 레거시 호환)
  • Phantom Process Killer (Android 12+): 비활성화 가이드 링크와 함께 안내 메시지를 표시
  • 한 번에 한 실행: 설치·업데이트·도구 설치는 한 번에 하나만 실행합니다. 두 번째 실행은 [FAIL] Another update, setup or tools run is in progress. Try again when it has finished. 를 출력하고, 설치 상태를 바꾸지 않은 채 종료 코드 2 로 끝납니다

[2/5] 최신 릴리스 다운로드

GitHub에서 전체 저장소 tarball을 다운로드하고 임시 디렉토리에 추출합니다. 필수 파일의 존재를 확인합니다:

  • scripts/lib.sh
  • scripts/setup-env.sh
  • platforms/<platform>/config.env
  • platforms/<platform>/update.sh

[3/5] 핵심 인프라 업데이트

업데이터, 언인스톨러, CLI가 사용하는 공유 파일을 갱신합니다. 이번 업데이트로 고정된 Node.js 나 OpenClaw 의 버전이 바뀌면, 무엇이든 바꾸기 전에 세 가지 안전장치가 먼저 실행됩니다. 여유 공간 확인(2000MB), OpenClaw 게이트웨이가 실행 중이 아닌지 확인, ~/.openclaw-android/backup/pre-update/ 에 데이터 백업(업데이트 참고)입니다.

  • 업데이트 스크립트 자신이 최신인지 확인합니다. 옛 캐시 사본이 내려왔으면(릴리스 직후 몇 분 동안 가능) 아무것도 바꾸지 않고 멈춥니다. 몇 분 뒤 oa --update 를 다시 실행하세요
  • 최신 플랫폼 디렉토리를 ~/.openclaw-android/platforms/에 복사
  • ~/.openclaw-android/scripts/의 lib.sh와 setup-env.sh 갱신
  • 패치 파일 갱신 (glibc-compat.js, argon2-stub.js, spawn.h, systemctl)
  • $PREFIX/bin/의 oa CLI와 oaupdate 래퍼 갱신
  • ~/.openclaw-android/의 uninstall.sh 갱신
  • Bionic 아키텍처가 감지되면 자동 glibc 마이그레이션 수행
  • Node.js를 고정 버전으로 수렴 (sha256 검증 다운로드, 원자적 교체 — 실패 시 이전 설치 복원). OA_ALLOW_NODE_DOWNGRADE=1 을 설정하지 않으면 Node.js 를 더 낮은 버전으로 내리지 않음
  • setup-env.sh를 실행하여 .bashrc 환경변수 블록 갱신
  • Node 게이트: 이후에도 Node.js가 고정 버전이 아니면 여기서 업데이트를 중단합니다 — OpenClaw([4/5])는 건드리지 않습니다. oa --update를 다시 실행하세요

[4/5] 플랫폼 업데이트

platforms/<platform>/update.sh에 위임합니다. OpenClaw의 경우:

  • 고정 버전이 바뀐 경우: 설치 뒤 OpenClaw 설정과 데이터 상태를 확인하고, 데이터 이전이 필요하며 이번 실행에서 백업을 만들었을 때 openclaw doctor --fix 를 한 번 실행 (업데이트 참고)
  • 설치 뒤 설정 확인 직전에 다른 앱의 폴더를 가리키는 경로를 고침 (백업 및 복구 참고)
  • 마지막 데이터 확인(openclaw config validate 와 openclaw doctor --non-interactive): 게이트웨이가 OpenClaw 데이터를 사용 중이고 이번 실행에서 OpenClaw 를 교체하지 않았다면, 확인을 실패로 처리하지 않고 건너뛰며 [WARN] The gateway is using the OpenClaw state, so the data check was skipped. Stop the gateway, then run: openclaw doctor 를 표시한 채 업데이트를 계속합니다
  • binutils 설치 (네이티브 모듈 빌드용)
  • 안전장치로 Node.js 고정 버전을 재확인 (방어적 이중 확인 — [3/5]에서 이미 게이트를 거침)
  • openclaw을 고정 버전으로 수렴 — 설치된 버전이 더 낮으면 고정 버전을 설치. OA_ALLOW_OPENCLAW_DOWNGRADE=1 을 설정하지 않으면 OpenClaw 를 더 낮은 버전으로 내리지 않음
  • OpenClaw 가 불완전하면(이전 설치가 중간에 끊겨 버전은 맞지만 파일이 빠진 상태) 버전이 고정 버전과 같아도 다시 설치합니다: [WARN] openclaw <version> is incomplete (an earlier install was cut off): installing it again. 마지막 데이터 확인에서 OpenClaw 자체의 파일이 없다고 보고하면(OpenClaw 패키지 안의 경로에 대한 Cannot find module 또는 Cannot find package) 한 번 다시 설치합니다: [WARN] OpenClaw <version> is missing some of its own files (an earlier install was cut off): installing it again. 어느 경우에도 데이터는 건드리지 않습니다. 이번 실행에서 설치한 뒤에도 OpenClaw 가 불완전하면 [FAIL] OpenClaw <version> was installed but is incomplete (files are missing or it does not start). 를 표시하고 업데이트를 중단합니다.
  • 플랫폼별 패치 재적용
  • openclaw update 가드(openclaw-shim.sh) 갱신 — openclaw update/--update가 계속 차단되도록 유지 (Node.js 래퍼는 OpenClaw 의 자체 업데이트 경로도 차단)
  • clawdhub (스킬 매니저) 업데이트/설치
  • 필요 시 clawdhub용 undici 설치 (Node.js v24+)
  • 게이트웨이의 "update available" 알림 끄기(update.checkOnStart=false) — 직접 설정한 값이 없을 때만
  • 필요 시 ~/skills/에서 ~/.openclaw/workspace/skills/로 스킬 마이그레이션
  • PyYAML 누락 시 설치

[5/5] 선택적 도구 업데이트

이미 설치된 도구만 업데이트합니다:

  • code-server: install-code-server.sh를 update 모드로 실행 — 고정 버전 4.117.0 으로 유지(예전에 더 새 버전이 설치됐으면 되돌림). 미설치 시 스킵
  • OpenCode: 설치된 경우 업데이트, 미설치 시 설치 여부 문의. glibc 아키텍처 필요
  • Chromium: 설치된 경우 업데이트. 미설치 시 스킵
  • AI CLI 도구 (Claude Code, Gemini CLI, Codex CLI (Termux)): 설치된 버전과 최신 npm 버전을 비교하여 필요 시 업데이트. 미설치 도구는 설치를 제안하지 않음

라이선스

MIT

Claw 앱의 터미널 라이브러리(android/terminal-emulator, android/terminal-view)는 Termux 에서 가져온 것이며 Apache License 2.0 을 따릅니다.

관련 프로젝트 살펴보기