현재 제 책상 위에는 Google Pixel 9과 OnePlus Open, 두 대의 Android 휴대폰이 있습니다. 며칠 전 Discord 알림이 Pixel에서는 즉시 표시되지만 OnePlus에서는 늦게 도착한다는 사실을 발견했습니다. 같은 앱의 같은 버전 번호를 사용하고 있고, 동일한 Wi-Fi 네트워크와 동일한 Discord 계정을 사용 중입니다. 처음에는 Discord 문제라고 생각했지만, 그렇지 않았습니다. Discord는 Android 휴대폰마다 다르게 작동하는 수많은 앱 중 하나일 뿐이며, 여기에는 몇 가지 이유가 있습니다.
조금 더 자세히 알아본 결과, 다음과 같은 사실을 발견했습니다.
관련 기사
여러분은 아마 같은 APK를 실행하고 있지 않을 것입니다
Google이 각 기기에 맞춰 설치 파일을 조정하는 방법
2021년부터 Google은 Play 스토어의 모든 신규 앱을 기존 APK 파일 대신 Android App Bundle(AAB) 형식으로 게시하도록 의무화했습니다. AAB는 설치 가능한 파일이 아니라 실제 파일에 대한 설계도와 같습니다. 사용자가 ‘설치’를 누르면 Google 서버가 사용 중인 기기(CPU 아키텍처, 화면 밀도, 언어 설정 등)를 분석하여 해당 휴대폰에 최적화된 맞춤형 APK를 생성합니다. 이 시스템을 Dynamic Delivery라고 합니다.
따라서 Pixel과 OnePlus Open에 사진 편집 앱을 설치하더라도 동일한 파일을 받는 것이 아닙니다. Google은 앱 번들을 분할하여 각 휴대폰에 서로 다른 패키지를 제공합니다. 두 기기 모두 ARM 기반이므로 해당 칩 유형에 맞춰 빌드된 네이티브 라이브러리를 받게 됩니다.
하지만 GPU의 경우는 다릅니다. Pixel의 Tensor G4는 ARM Mali-G715와 결합되는 반면, OnePlus의 Snapdragon 8 Gen 2는 Qualcomm의 Adreno 740을 사용합니다. 매니페스트에 OpenGL 텍스처 압축 지원을 선언하는 앱(주로 게임)의 경우, Google Play는 GPU 지원 여부에 따라 각 기기에 서로 다른 에셋을 전달할 수 있습니다.
두 기기의 픽셀 밀도는 비슷하지만, Google Play는 OnePlus의 더 큰 패널을 기반으로 다른 이미지 리소스를 로드할 수 있습니다.
즉, 두 대의 서로 다른 휴대폰에서 실행하는 "같은 앱"이라도 그 안의 코드는 의미 있게 다를 수 있습니다. 이는 의도된 설계이며, 앱이 이전보다 빠르게 로드되고 휴대폰 공간을 덜 차지하게 해주므로 일반적으로는 좋은 일입니다. 하지만 이는 앱을 실행하기도 전에 전달 단계에서부터 동작의 차이가 결정된다는 것을 의미하기도 합니다.
더 다양한 휴대폰의 경우 CPU 아키텍처 차이가 상당할 수 있습니다. 한 기기는 다른 기기에서 지원하지 않는 하드웨어 가속 라이브러리를 받을 수도 있습니다.
휴대폰 제조사도 계층을 추가합니다
OEM 배터리 관리가 좋은 예입니다
두 휴대폰이 본질적으로 같은 APK를 받더라도 여전히 동일하게 작동하지 않을 수 있습니다. 그 이유는 Android가 사실상 단일한 운영체제가 아니기 때문입니다. Google은 AOSP(Android Open Source Project)를 공개하고, 삼성, 샤오미, OnePlus, Oppo와 같은 제조사(OEM)는 이를 기반으로 One UI, HyperOS, ColorOS 등 자신들만의 계층을 추가합니다.
이로 인해 가장 큰 차이가 발생하는 부분 중 하나는 백그라운드 프로세스 관리 방식입니다.
Google은 Android 6.0에서 휴대폰이 유휴 상태일 때 앱의 동작을 제한하는 Doze 모드를 도입했습니다. 하지만 제조사가 반드시 이를 따를 필요는 없습니다. 많은 제조사가 Android 기본 정책 위에 더 공격적인 배터리 정책을 적용할 수 있기 때문에 같은 앱이라도 휴대폰마다 완전히 다르게 동작할 수 있습니다.
‘Don’t Kill My App’ 사이트는 수년간 이 문제를 추적해 왔습니다. 이들의 데이터에 따르면 삼성, OnePlus, 샤오미, 화웨이, Oppo와 같은 휴대폰 제조사들이 특히 공격적인 정책을 취하고 있습니다. 예를 들어, 삼성은 최근에 열지 않은 앱의 백그라운드 작업을 제한하며, 샤오미의 자동 시작 권한 시스템은 앱 실행 자체를 차단할 수 있습니다.
한 개발자는 노인 사용자의 휴대폰에서 하루 종일 실행되어야 하는 안전 모니터링 앱을 개발했지만, OTA 소프트웨어 업데이트 후 OEM이 배터리 예외 권한을 초기화하는 문제에 직면했습니다. 이로 인해 사용자가 휴대폰을 업데이트할 때마다 기능이 작동하지 않는 문제가 발생했습니다.
Android Police에 따르면, 많은 개발자가 Play 스토어 리뷰만 보고도 어떤 OEM이 "문제를 일으키는지" 파악합니다. 개발자들은 백그라운드 의존 기능에 대한 부정적인 피드백이 특정 휴대폰 브랜드에 집중되는 경향이 있음을 확인했습니다. 여기에는 알림 지연, 알람 누락, 백그라운드에서 더 이상 실행되지 않는 피트니스 앱 등이 포함됩니다.
백그라운드 동작 외에도 일부 앱 기능은 하드웨어에 따라 조건부로 제공됩니다. Google은 개발자가 앱 매니페스트에 하드웨어 요구 사항(NFC, 특정 카메라, 자이로스코프 등)을 선언하도록 합니다. 휴대폰에 해당 기능이 없으면 앱이 설치되지 않거나, 설치되더라도 해당 기능이 비활성화된 상태로 나타납니다.
Dynamic Delivery를 사용하는 개발자는 휴대폰의 RAM 용량과 같이 특정 조건이 충족될 때만 다운로드되는 기능 모듈이나 기능 덩어리를 정의할 수 있습니다.
실제로 할 수 있는 조치
배터리 설정부터 시작하여 점검하세요
OnePlus의 경우 설정 > 배터리 > 배터리 최적화로 이동하여 해당 앱을 찾아 "최적화 안 함"으로 설정할 수 있습니다. 또한 설정 > 앱 > 특별한 앱 접근 > 자동 시작으로 이동하여 앱이 스스로 시작할 수 있도록 허용되어 있는지 확인하십시오. 다른 휴대폰의 경우 Don’t Kill My App 사이트에서 주요 OEM별 단계별 가이드를 확인해 보시기 바랍니다.
배터리 정책 문제가 아니라면 사용자가 할 수 있는 일은 거의 없습니다. 하드웨어가 없으면 기능도 없는 것이기 때문입니다. 한 가지 방법은 APKMirror와 같은 사이트에서 범용 APK를 사이드로드하여 작동하는지 확인하는 것입니다.
Android는 여전히 파편화되어 있습니다
Android는 수십 개의 제조사에서 출시한 수천 개의 기기 모델에서 실행되어야 합니다. 대부분의 앱이 그 모든 하드웨어 환경에서 잘 작동한다는 사실은 정말 놀라운 일입니다. 하지만 이는 "같은 앱"이 실제로 같은 앱인 경우가 드물다는 것을 의미하기도 합니다. Google Play는 기기의 CPU, 화면, 언어에 맞춰 조정된 바이너리를 제공하며, OEM은 Android 위에 독자적인 배터리 및 프로세스 관리 정책을 실행할 수 있습니다. 게다가 앱 자체가 RAM 용량이나 처리 성능을 감지하여 런타임에 결정을 내릴 수도 있습니다. 고려해야 할 변수가 너무나 많습니다.
##### Google Pixel 10a
SoC Google Tensor G4
디스플레이 6.3인치 Actua pOLED 디스플레이, 1080 x 2424 해상도, 60-120Hz, 최대 밝기 3000니트
RAM 8GB
저장 공간 128GB, 256GB
배터리 5,100 mAh
포트 USB-C
Google Pixel 10a는 평평한 후면과 긴 배터리 수명을 갖춘 보급형 스마트폰입니다. 이전 모델과 동일한 Tensor G4 칩으로 구동되며, 많은 주요 사양이 Pixel 9a와 동일합니다. 하지만 더 밝은 화면, 더 나은 모뎀, 새로운 소프트웨어 기능, 그리고 7년간의 소프트웨어 지원을 제공하는 Android 16이 탑재되어 있습니다.