Hacker News

Android apps running native on macOS

Apple Silicon에서 Android 앱을 macOS 앱처럼 실행하는 Mac.apk

Mac.apk는 Android 프레임워크와 런타임을 macOS에 구현해 Apple Silicon에서 APK를 실행하는 오픈소스 프로젝트입니다. 앱을 별도 창과 Dock 아이콘으로 띄우며 가상 머신은 쓰지 않지만, 초기 알파 단계이고 Android 앱에 macOS 사용자 권한을 그대로 허용합니다.

에디터 노트

가장 먼저 짚을 점은 '가상 머신 없이 실행'이라는 설명과 JVM 사용이 함께 성립한다는 사실입니다. 프로젝트는 Android 운영체제 전체를 가상화하지 않고 DEX를 JVM 바이트코드로 바꿔 내장 JVM에서 실행합니다. 따라서 구동 방식은 일반적인 Android 에뮬레이터와 다르지만, 소개 문구만 읽으면 어떤 실행 계층이 남아 있는지 놓치기 쉽습니다. 실용성은 앱 호환성과 권한 처리에 달렸습니다. 원문은 앱마다 동작 수준이 다르고 일부는 아직 실행되지 않는다고 밝힙니다. 댓글에서는 Play Services와 SafetyNet 의존성이 제약이 될 수 있다는 우려가 나왔고, MicroG를 대안으로 언급한 의견도 있지만 실제 호환 범위는 제시되지 않았습니다. 더 직접적인 제약은 앱이 macOS 사용자 권한으로 실행되고 별도 샌드박스가 없다는 점입니다. 그래서 오래된 기기 앱이나 테스트용 앱을 Mac 창에서 실행하는 편의는 분명하지만, 출처가 불분명한 APK를 다룰 때는 일반 Mac 프로그램과 같은 수준의 접근 권한을 고려해야 합니다.

AI 요약

Mac.apk는 Android 앱을 Apple Silicon Mac에서 macOS 프로세스로 실행하는 초기 단계 프로젝트입니다. 앱마다 창과 Dock 아이콘이 생기고, 창 크기 변경과 회전을 지원합니다. Android TV 앱은 키보드로 조작하며 게임 런처에서 설치된 다른 앱을 실행할 수도 있습니다. 지원 환경은 macOS 26.4 이상과 Apple Silicon Mac입니다. Intel Mac은 지원하지 않습니다.

실행 방식과 설치

프로젝트는 Android를 가상 머신이나 Linux 커널에서 부팅하지 않고 macOS 위에 Android 앱 실행 환경을 구현합니다. 저장소에는 Android 프레임워크 재구현, 네이티브 런타임, arm64 로더와 Bionic shim, ARM32 재컴파일러가 포함됩니다. 다만 Hacker News 댓글에서 설명한 구현 세부사항에 따르면 DEX 코드를 JVM 바이트코드로 변환해 내장 Java 가상 머신에서 실행하고 Android API 구현을 제공합니다. 따라서 '가상 머신이 없다'는 문구는 Android 운영체제를 가상화하지 않는다는 뜻이지, JVM 실행 환경까지 없다는 뜻은 아닙니다.

설치는 릴리스에서 디스크 이미지를 내려받아 응용 프로그램 폴더에 복사한 뒤, 앱 안에서 Runtime을 설치하는 순서입니다. APK 파일을 더블클릭하거나 창에 끌어 놓아 설치합니다. 첫 실행에는 앱 준비 과정 때문에 큰 앱의 경우 최대 1분가량 걸릴 수 있으며 다음 실행부터는 빨라집니다. 앱별 데이터는 ~/Library/Application Support/MacApk/<package>에 저장됩니다. 앱을 휴지통으로 옮기는 것만으로 데이터가 지워지지는 않으며, Mac.apk 안의 제거 기능을 써야 정리할 수 있습니다.

호환성과 보안

프로젝트는 일부 앱이 잘 실행되고 일부는 부분적으로 동작하거나 아직 실행되지 않는다고 밝힙니다. 앱별 호환성 목록과 알려진 문제를 확인할 수 있으며, 개발자는 앱과 운영체제 버전, 로그를 포함해 문제를 보고해 달라고 요청합니다. Google Play Services 의존성이나 SafetyNet, Play Integrity 같은 검증에 걸리는 앱은 실행에 제약이 생길 수 있다는 점이 댓글에서 제기됐습니다. MicroG나 Aurora Store를 언급한 댓글도 있지만, 이 자료만으로 Mac.apk에서의 호환 여부를 확인할 수는 없습니다.

보안상 제약은 분명합니다. 실행한 Android 앱은 별도 모바일 앱 샌드박스에 갇히지 않고 macOS 사용자 계정 권한으로 파일을 읽고 쓸 수 있습니다. 프로젝트는 신뢰할 수 있는 APK만 설치하라고 안내하며, 제3자 앱을 검증하거나 보증하지 않는다고 명시합니다. Mac.apk는 AGPL v3.0 오픈소스이며 기업용 상용 라이선스도 제공합니다. 공식 앱 사용은 무료입니다.

Hacker News 반응

  • @bilalq — 실제로는 Google Play Services 의존성과 Google의 폐쇄형 생태계 때문에 이 도구의 효용이 기대보다 작아질 수 있습니다. 그래도 멋진 프로젝트입니다.
    • @als0 — SafetyNet에 의존하는 앱은 제외됩니다. 은행 앱이 그런 경우입니다.
    • @franga2000 — 은행 앱뿐 아니라 기차 시간표, 식료품점 카탈로그, 택시 호출처럼 평범한 앱도 SafetyNet DRM을 쓰는 경우가 많습니다.
    • @AtHeartEngineer — 이제 Play Services를 역공학할 때입니다.
    • @monocasa — 사람들이 이미 그보다 앞서 있습니다. MicroG가 있습니다.
  • @andsoitis — Android 앱은 보통 Kotlin이나 Java로 만드는데, 이 방식은 JVM에 의존하지 않나요?
    • @chuckadams — Android는 JVM을 쓴 적이 없습니다. 과거에는 Java 바이트코드를 DEX로 변환해 Dalvik VM에서 실행했고, 요즘은 기기에서 미리 네이티브 코드로 컴파일합니다. DEX는 APK에 중간 표현으로 남습니다.
    • @andsoitis — 이 프로젝트도 그런 변환을 하나요, JVM을 쓰나요, 아니면 다른 방식을 쓰나요?
    • @chuckadams — DEX를 JVM 바이트코드로 역변환해 JVM에서 실행하고 Android API를 Java로 구현합니다.
  • @hex4def6 — 의심스러운 권한을 요구하거나 오래된 Android 버전을 요구하는 저가 기기 앱을 Mac에서 실행하는 데 쓸 수 있습니다.
    • @gruez — 프로젝트 페이지를 읽어 보셨나요? 이 프로그램은 샌드박스가 없습니다. 수상한 앱을 실행하려면 가상 머신을 쓰는 Android 에뮬레이터가 낫습니다.
  • @MBCook — 성취 자체로는 해볼 만한 프로젝트지만, Apple Silicon Mac에서 Android 앱이 필요한 경우가 실제로 얼마나 많은지 궁금합니다.
    • @bilalq — iOS와 Android 앱을 개발하는 입장에서 iOS 앱의 스토어 배포판을 Mac에서 자주 실행합니다. Android에서도 같은 일을 할 수 있으면 좋겠습니다.
  • @irskep — 앱 데이터를 .app 안에 저장하는 선택은 이상합니다. 사용자 폴더 여기저기에 파일이 흩어지는 문제를 해결하는 방법은 Application Support도 있습니다.
    • @joshspankit — 반론하자면 앱과 데이터를 분리한 Apple의 설계가 오히려 이상합니다. 저는 모든 것을 한곳에 보관하는 편이 낫습니다.
    • @astrange — 사용자가 앱에 쓰기 권한을 항상 갖는 것은 아닙니다.

원문: GitHub / 번역·요약: Trawling