ChromeOS용 앱 빌드 시작

Chromebook과 같은 ChromeOS 기기는 Google Play 스토어 및 Android 앱을 지원합니다. 이 문서에서는 Chromebook에 최적화할 휴대전화 또는 태블릿용으로 설계된 기존 Android 앱이 있다고 가정합니다. Android 앱 빌드의 기본사항을 알아보려면 첫 Android 앱 빌드를 참고하세요.

앱의 매니페스트 파일 업데이트

시작하려면 Chromebook과 Android를 실행하는 다른 기기 간의 주요 하드웨어 및 소프트웨어 차이를 고려하여 매니페스트 파일을 업데이트하세요.

ChromeOS 버전 M53부터 android.hardware.touchscreen 기능을 명시적으로 필요로 하지 않는 모든 Android 앱은 android.hardware.faketouch 기능을 지원하는 ChromeOS 기기에서도 작동합니다. 그러나 앱이 모든 Chromebook에서 작동하도록 하려면 다음 예와 같이 android.hardware.touchscreen 기능이 필요하지 않도록 매니페스트 파일을 업데이트합니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          ... >
    <!-- Some Chromebooks don't support touch. Although not essential,
         it's a good idea to explicitly include this declaration. -->
    <uses-feature android:name="android.hardware.touchscreen"
                  android:required="false" />
</manifest>

다양한 하드웨어 기기에는 다양한 센서가 장착되어 있으며 Chromebook에는 GPS, 가속도계와 같이 Android 휴대기기에 있는 일부 센서가 없을 수도 있습니다. 하지만 센서 기능이 다른 방식으로 제공되는 경우도 있습니다. 예를 들어 Chromebook에는 GPS 센서가 없을 수 있지만 Wi-Fi 연결을 기반으로 위치 데이터를 제공합니다. Android 플랫폼이 지원하는 센서에 관해 자세히 알아보려면 센서 개요를 참고하세요.

센서 가용성과 관계없이 Chromebook에서 앱을 실행하려면 센서가 필요 없도록 매니페스트 파일을 업데이트하세요.

Chromebook에서는 일부 소프트웨어 기능이 지원되지 않습니다. 예를 들어 맞춤 IME, 앱 위젯, 라이브 배경화면, 앱 런처를 제공하는 앱은 지원되지 않으며 Chromebook에 설치할 수 없습니다. Chromebook에서 지원되지 않는 소프트웨어 기능의 전체 목록은 호환되지 않는 소프트웨어 기능을 참고하세요.

대상 SDK 업데이트

Android 플랫폼의 모든 개선사항을 활용하려면 앱의 targetSdkVersion 속성을 사용 가능한 최신 API 수준으로 업데이트합니다. 여러 버전에 걸쳐 Android 플랫폼의 개선사항을 검토해 보세요.

네트워크 요구사항 확인

Chromebook은 Docker 또는 LXC와 마찬가지로 컨테이너에서 전체 Android OS를 실행합니다. 즉, Android가 시스템의 LAN 인터페이스에 직접 액세스할 수 없습니다. 대신 IPv4 트래픽은 네트워크 주소 변환 (NAT)의 내부 레이어를 통과하고 IPv6 유니캐스트 트래픽은 추가 홉을 통해 라우팅됩니다.

Android 앱에서 인터넷으로의 아웃바운드 유니캐스트 연결은 대부분 그대로 작동합니다. 일반적으로 인바운드 연결은 차단됩니다. Android의 멀티캐스트 또는 브로드캐스트 패킷은 방화벽을 통해 LAN으로 전달되지 않습니다.

멀티캐스트 제한의 예외로 ChromeOS는 Android와 LAN 인터페이스 간에 mDNS 트래픽을 전달하는 서비스를 실행하므로 표준 네트워크 서비스 검색 API는 LAN 세그먼트에서 다른 기기를 검색하는 데 권장되는 방법입니다. LAN에서 기기를 찾은 후 Android 앱은 표준 TCP 또는 UDP 유니캐스트 소켓을 사용하여 기기와 통신할 수 있습니다.

Android에서 시작되는 IPv4 연결은 ChromeOS 호스트의 IPv4 주소를 사용합니다. 내부적으로 Android 앱은 네트워크 인터페이스에 할당된 비공개 IPv4 주소를 확인합니다. Android에서 시작되는 IPv6 연결은 ChromeOS 호스트와 다른 주소를 사용합니다. Android 컨테이너에는 전용 공개 IPv6 주소가 있기 때문입니다.

클라우드 및 로컬 저장용량 효율적으로 사용

Chromebook을 사용하면 사용자가 한 기기에서 다른 기기로 쉽게 이전할 수 있습니다. 사용자가 한 Chromebook을 사용 중지하고 다른 Chromebook을 사용하기 시작하면 로그인하기만 하면 모든 앱이 표시됩니다.

이 기능 덕분에 앱 데이터를 클라우드에 백업하여 기기 간 동기화를 사용 설정하세요. 하지만 앱이 정상적으로 작동하는 데 인터넷 연결에 의존하지 마세요. 대신 기기가 오프라인 상태일 때 사용자의 작업을 로컬에 저장하고 기기가 다시 온라인 상태가 되면 클라우드에 동기화합니다.

학교와 같이 많은 사람이 Chromebook을 공유할 수도 있습니다. 로컬 저장소는 무한하지 않으므로, 언제든지 전체 계정과 해당 저장소를 기기에서 삭제할 수 있습니다. 교육용인 경우 이 시나리오를 염두에 두는 것이 좋습니다.

NDK 라이브러리 업데이트

앱에서 Android NDK 라이브러리를 사용하고 타겟 SDK 버전이 23 이상이면 Android 6.0 (API 수준 23) 이상에서 호환되지 않으므로 텍스트 재배치가 NDK 라이브러리의 ARM 및 x86 버전에서 모두 삭제되었는지 확인합니다. 텍스트 재배치를 NDK 라이브러리에 그대로 두면 특히 x86 아키텍처를 사용하는 기기에서 실행할 때 Chromebook에서 호환성 오류가 발생할 수도 있습니다.

새로운 앱용 테스트 사례 개발

앱의 테스트 사례를 개발하려면 먼저 적절한 매니페스트 플래그를 지정해야 합니다. 특히 screenOrientationunspecified로 설정하는 것이 좋습니다. 가로 모드 방향을 지정하려면 sensorLandscape를 사용하여 태블릿에서 최적의 환경을 제공하는 것이 좋습니다.

데스크톱 환경에 특별한 크기 또는 방향이 필요한 경우 메타 태그를 크기 또는 방향 힌트로 추가하는 것이 좋습니다. 휴대전화의 크기와 방향을 포함하려면 대신 레이아웃 defaultHeight, defaultWidth 또는 minHeight 속성을 지정합니다.

특정 입력 기기가 특정 기기 카테고리를 처리하려면 android.hardware.type.pc를 지정하여 입력 호환성 모드를 사용 중지합니다.

네트워킹 유형을 사용하는 경우 연결 문제가 해결되거나 기기의 절전 모드가 해제된 후 앱이 네트워크에 다시 연결할 수 있는지 확인해야 합니다.

테스트 계획에 사용할 수 있는 Chrome OS의 Android 앱 테스트 사례 목록을 확인하는 것이 좋습니다. 테스트 사례는 Android 앱을 ChromeOS 기기에서 실행할 것으로 예상되는 경우 준비해야 하는 일반적인 시나리오를 다룹니다.

멀티 윈도우 및 방향 변경

ChromeOS의 멀티 윈도우 환경은 상태 지속성 및 리콜 문제를 더 명확하게 만들 수 있습니다. 적절한 경우 ViewModel를 사용하여 상태를 저장하고 복원하세요.

상태 지속성을 테스트하려면 한동안 앱을 최소화하고 리소스를 많이 사용하는 다른 프로세스를 시작한 다음 앱을 복원하여 앱이 유지했던 상태로 복귀하는지 확인합니다.

전체 화면 키 (F4), 최대화, 복원을 눌러 창 크기 조절을 테스트합니다. 자유 크기 조절을 테스트하려면 먼저 개발자 옵션에서 사용 설정한 다음 앱이 비정상 종료되지 않고 원활하게 크기가 조절되는지 확인합니다.

ChromeOS 기기에서 지원하는 경우 노트북에서 태블릿 모드로 변경하여 모든 것이 예상대로 작동하는지 확인합니다. 태블릿 모드에서 기기를 한 번 회전하여 방향 변경을 테스트한 다음 다시 노트북 모드로 전환합니다. 이 단계를 몇 번 반복합니다.

상단 표시줄이 UI 요소 또는 위치 기반 터치 입력을 오프셋하여 앱을 손상시키지 않도록 합니다. ChromeOS 기기의 경우 앱이 상태 표시줄 영역에 중요한 정보를 배치하지 않도록 합니다.

카메라 또는 다른 하드웨어 기능(예: 펜)을 사용하는 경우 이전에 설명한 창 및 기기 변경사항을 실행할 때 제대로 작동하는지 확인합니다.