안드로이드 앱을 Googlebook 노트북 네이티브처럼 만드는 법: Jetpack Ink·Continue On·주변기기 커스터마이징 API 해부
Android Dev Summit 2026에서 공개된 Googlebook 1차 런칭 파트너(Notability·Logitech)의 데스크톱급 안드로이드 앱 아키텍처를 정리한다. Jetpack Ink의 Wet/Dry 2단계 초저지연 필기 파이프라인, Android 17 Continue On 기기 간 핸드오프, 마우스 물리 버튼을 OS 액션에 매핑하는 Peripheral Customization API를 살펴본다.
Googlebook 데스크톱 안드로이드 아키텍처 — Jetpack Ink(Wet/Dry Layer)·Android 17 Continue On·Peripheral Customization API 구조도
결론부터 말하면 노트북 폼팩터인 Googlebook과 데스크톱 윈도우 환경에서 안드로이드 앱이 '화면만 늘려놓은 폰 앱'처럼 보이지 않으려면, 단순 레이아웃 확장을 넘어 젖은 잉크(Wet Ink)와 마른 잉크(Dry Ink)를 분리하는 초저지연 필기 파이프라인(Jetpack Ink), 폰 작업을 노트북 작업 표시줄로 즉시 넘기는 Android 17 Continue On, 그리고 외부 마우스·키보드의 물리 버튼을 OS 액션에 매핑하는 Peripheral Customization API까지 입력·연속성 계층을 데스크톱 수준으로 재설계해야 한다. Android Developers의 'Inside the first wave on Googlebook with Notability and Logitech' 세션에서 Notability와 Logitech 엔지니어링 팀은 Googlebook 1차 런칭 파트너로서 겪은 아키텍처 전환 과정과 실무 설계 패턴을 공개했다.
단, 세션에서 소개된 커스텀 브러시 개발 기간 단축(수개월 → 1주 미만)이나 수천 페이지 동시 편집 성능은 Notability 및 Logitech의 내부 구현 사례 발표치이며, Peripheral Customization API는 현재 허용 목록(Allowlist) 기반 프리뷰를 거쳐 2026년 4분기 안드로이드 업데이트로 일반 공개될 예정이므로 대상 OS 버전과 하드웨어 지원 범위를 먼저 확인해야 한다.
1. '늘려놓은 폰 앱'을 벗어나는 3대 조건: 멀티 모달 입력 분기와 Android 17 Continue On
Android Developers — Inside the first wave on Googlebook with Notability and Logitech 공식 세션
Notability는 iOS 앱을 단순 포팅하는 대신 처음부터 Jetpack Compose와 Material Design, 그리고 Navigation 3의 커스텀 SceneStrategy로 안드로이드 네이티브 앱을 새로 구축했다. 예를 들어 요약 패널을 열 때 화면 여유 공간이 충분한 Googlebook과 태블릿에서는 우측 사이드 패널로 슬라이드 인하고, 공간이 좁은 스마트폰에서는 동일한 컴포저블을 바텀 시트(Bottom Sheet)로 띄운다.
하지만 Googlebook에서 진정한 랩톱 경험을 완성하려면 화면 크기뿐 아니라 연결된 입력 장치(Peripherals)와 기기 간 연속성에 맞춰 UX를 분기해야 한다.
- 3원화된 입력 모달리티(Stylus · Finger · Trackpad Cursor) 분리 처리: Googlebook은 터치스크린, 스타일러스 펜, 트랙패드/마우스, 물리 키보드를 동시에 갖는다. 키보드·마우스가 감지되면 홈 화면부터 타이핑·단축키 중심 도구와 우클릭 컨텍스트 메뉴를 우선 배치하고, 태블릿 모드에서는 필기 도구를 전면 배치해야 한다.
Android 17 Continue On기반 크로스 디바이스 핸드오프: Android 17(API 37)에 도입된Continue On을 활성화(setHandoffEnabled(true, null))하면, 사용자가 스마트폰에서 보던 노트가 근처 Googlebook 작업 표시줄(Taskbar) 우측에 배지 아이콘으로 자동 제안된다. 클릭 한 번으로 노트 ID와 스크롤 위치가 담긴 인텐트 상태가 전달되어 데스크톱 창이나 웹 폴백(Web Fallback)에서 끊김 없이 이어서 작업할 수 있다.
- 수천 페이지 문서를 위한 2-경로(Two-Path) 공동 편집 엔진: 안드로이드 기본
EditText는 단문 입력에 맞춰져 있어 500페이지 떨어진 곳에서 다른 사용자가 동시 편집하는 수천 페이지 문서를 감당하지 못한다. Notability는 ① 로컬 화면에 즉시 글자를 찍어 체감 지연을 없애는 **낙관적 최선 경로(Best-Effort Path)**와 ② 백엔드 공동 편집 연산자와 동기화해 오프셋 이동을 보정하는 **재조정 경로(Sync & Re-adjust Path)**로 키 입력 파이프라인을 이원화했다.
2. 깜빡임(Flicker) 없는 초저지연 필기 아키텍처: Jetpack Ink의 Wet/Dry 2단계 모델
필기 앱에서 가장 까다로운 엔지니어링 문제는 펜이 닿아 움직이는 순간의 **젖은 잉크(Wet Ink)**와 펜을 뗀 뒤 캔버스에 영구 저장되는 마른 잉크(Dry Ink) 사이의 핸드오프다. 과거에는 멀티스레드 버퍼 관리, 곡선 피팅(Curve Fitting), OpenGL 커스텀 셰이더를 직접 짜야 했고, Wet 레이어에서 Dry 레이어로 넘길 때 1프레임 차이로 선이 깜빡이는(Flicker) 현상이 빈번했다.
**Jetpack Ink(androidx.ink)**와 공식 **Ink App Builder / Custom Brush Builder 스킬**은 이 파이프라인을 선언형 Compose 컴포넌트(InProgressStrokes)와 CanvasStrokeRenderer로 표준화했다.
| 필기 파이프라인 단계 | 기존 자체 구현 방식 (Custom OpenGL / Threading) | Jetpack Ink ( androidx.ink 1.0 / 1.1) 아키텍처 |
| 1) 실시간 필기 중 (Wet Ink Layer) | MotionEvent 직접 수집, 스레드 동기화 및 프론트 버퍼 렌더링 직접 구현 | Compose 전용 InProgressStrokes 컴포저블이 터치·스타일러스 입력과 예측(Prediction) 및 초저지연 렌더링을 자동 전담 |
| 2) 획 완료 핸드오프 (Wet → Dry 전환) | 비동기 상태 반영 시 Wet 획이 먼저 지워지고 Dry 획이 다음 프레임에 그려져 1프레임 깜빡임(Flicker) 발생 | onStrokesFinished 콜백이 동일 UI 스레드 프레임 안에서 불변 Stroke 객체 리스트를 즉시 전달하여 깜빡임 없이 영구 캔버스로 커밋 |
| 3) 확정 획 렌더링 및 저장 (Dry Ink Layer) | 단순 비트맵 저장 시 확대 깨짐 및 대용량 메모리 점유, Canvas.drawPath 사용 시 브러시 질감 표현 불가 | 메모리에는 Stroke 객체를 유지해 CanvasStrokeRenderer.draw()로 렌더링하고, 디스크·네트워크에는 StrokeInputBatch 바이트로 초경량 직렬화 |
| 4) 커스텀 브러시 제작 및 실시간 협업 | 무지개·글리터 등 셰이더 브러시 1종 제작에 수개월 소요, 타 기기(iPad 등)와 실시간 스트로크 동기화 복잡 | AI 및 Custom Brush Builder로 1주일 미만에 구현. 협업 시에는 TouchDown → 임시(Transient) 스트로크 전송 → LiftUp 시 단일 확정 객체로 교체 |
특히 Compose에서 Jetpack Ink로 드로잉 화면을 구현할 때 반드시 지켜야 할 핵심 패턴은 뷰 기반의 InProgressStrokesView 대신 Compose 전용 **InProgressStrokes**를 사용하고, onStrokesFinished 콜백에서 비동기 StateFlow 지연을 거치지 않고 UI 스레드 상태(mutableStateListOf)에 즉시 추가해 1프레임 깜빡임을 방지하는 것이다.
참고로 Notability 팀은 iOS와 안드로이드 간 수식·모델 로직을 공유할 때 처음에는 C++/Objective-C를 검토했으나, **Kotlin Multiplatform(KMP)**을 도입한 결과 iOS 엔지니어의 구현 난도가 낮아졌을 뿐 아니라 실행 성능까지 더 빨라졌다고 밝혔다.
3. 앱 샌드박스를 넘어 마우스 버튼을 OS 기능에 매핑하는 Peripheral Customization API
세션 후반부에서는 Logitech이 Windows·macOS용 주변기기 설정 앱인 **Options+**를 Googlebook용으로 출시하며 활용한 신규 플랫폼 API인 Peripheral Customization API(2026년 4분기 안드로이드 업데이트 정식 공개 예정)가 소개되었다.
기존 안드로이드에서는 일반 앱이 개별 샌드박스에 갇혀 있어, 외부 마우스(예: MX Master 4)의 엄지 버튼이나 휠 클릭을 눌렀을 때 OS 전역 기능인 **Circle to Search(서클 투 서치)**나 음성 어시스턴트를 호출하도록 재정의하는 것이 불가능했다. 새 API는 하드웨어 펌웨어 설정과 OS 수준 액션을 세 가지 구성 요소로 연결한다.
| API 구성 요소 | 역할 및 식별 기준 | Googlebook / Android 연동 동작 예시 |
| 1) Device (장치 식별) | 제조사 ID( Vendor ID, VID)와 제품 ID(Product ID, PID)로 연결된 주변기기 특정 | 블루투스/수신기로 호환 마우스(예: Logitech 폴더블 마우스) 연결 시 Fast Pair Discovery 알림이 자동으로 떠서 Play 스토어의 전용 설정 앱 설치 유도 |
| 2) Trigger (물리 입력 트리거) | 마우스·키보드의 특정 물리 버튼 또는 키 조합 정의 | 휠 클릭( MIDDLE_BUTTON), 엄지 버튼(THUMB_BUTTON), 기능 버튼(FEATURE_BUTTON) 등 지정 |
| 3) Action (OS/앱 액션 매핑) | AppCustomizationAction.Builder를 통해 실행할 OS 시스템 기능 또는 앱 인텐트 지정 | 엄지 버튼 클릭 시 즉시 Circle to Search 오버레이 호출, 기능 버튼에 Magic Pointer 또는 Voice Assistant 매핑하여 한 손으로 검색 워크플로 완결 |
4. 실무 도입 체크리스트
- 기기 종류(Phone/Tablet) 하드코딩 대신 윈도우 크기와 입력 모달리티로 분기:
Googlebook처럼 자유롭게 창 크기가 조절되고 터치·스타일러스·트랙패드가 공존하는 환경을 위해, Navigation 3SceneStrategy로 패널/바텀시트 전환을 자동화하고 키보드 단축키 및 마우스 우클릭 메뉴를 기본 제공한다.
Android 17 Continue On핸드오프 활성화: 문서 열람, 노트 작성, 쇼핑·미디어 탐색처럼 폰에서 시작해 노트북 대화면에서 이어하기 좋은 Activity에는setHandoffEnabled(true, null)와 복원용 상태 번들(문서 ID, 스크롤 오프셋) 및 웹 폴백 URL을 구성한다.
Jetpack Ink도입 시 안티패턴 점검: Compose 화면에서는 레거시InProgressStrokesView나 직접 구현한Canvas.drawPath대신 반드시InProgressStrokes와CanvasStrokeRenderer를 조합하고,ink-nativeloader및ink-authoring-android의존성 누락으로 인한 런타임 에러(UnsatisfiedLinkError)를 방지한다.
참고 자료
- Inside the first wave on Googlebook with Notability and Logitech — Android Developers YouTube 공식 영상 (October 30, 2026 게시, November 3, 2026 확인)
- Support cross-device continuity on Googlebook (Android 17 Continue On) — Android Developers 공식 가이드 (November 3, 2026 확인)
- About the Continue On feature | Better Together — Android Developers (November 3, 2026 확인)
- Draw a stroke with Jetpack Ink API | Jetpack Compose 공식 문서 (November 3, 2026 확인)
- Build inking apps with the Android Ink API (Compose Agent Skill) (November 3, 2026 확인)
- Jetpack Ink (
androidx.ink) 릴리스 노트 — Android Developers (November 3, 2026 확인)