Register now for Android Dev Summit 2019!

Chrome OS를 위한 앱 빌드 시작

Chromebook과 같은 Chrome OS 기기는 이제 Google Play 스토어와 Android 앱을 지원합니다. 이 기사는 Chromebook용으로 최적화할 기존의 스마트폰 또는 태블릿용 Android 앱이 있다고 전제합니다. Android 앱 빌드 기초를 배우려면 첫 사용자 앱 빌드하기를 참조하세요.

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

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

Chrome OS 버전 M53부터 android.hardware.touchscreen 기능을 명시적으로 필요로 하지 않는 모든 Android 앱은 android.hardware.faketouch 기능을 지원하는 Chrome OS 기기에서도 실행됩니다. 그러나 앱이 모든 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>
    

서로 다른 하드웨어 기기에는 다양한 센서 세트가 장착되어 있습니다. Android 핸드헬드 기기에는 주로 GPS와 가속도계가 장착되어 있지만 이런 센서를 모든 Chromebook에서 사용할 수 있는 것은 아닙니다. 하지만, 센서 기능이 다른 방법으로 제공되는 경우가 있습니다. 예를 들어, Chromebook에 GPS 센서가 없는 경우가 있을 수 있지만, 이러한 Chromebook이 Wi-Fi 연결을 기반으로 위치 데이터를 제공할 수 있습니다. Android 플랫폼이 지원하는 모든 센서에 대한 개요는 센서 검토 문서를 참고하세요. 센서 지원 여부에 상관없이 Chromebook에서 앱이 실행되도록 하려면 어떠한 센서도 필수 항목이 아니도록 매니페스트 파일을 업데이트해야 합니다.

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

대상 SDK 업데이트

targetSdkVersion 속성을 사용할 수 있는 가장 최신 API 레벨로 업데이트하면 앱이 Android 플랫폼의 모든 개선 사항을 최대한으로 활용할 수 있습니다. 예를 들면 Android 7.0(API 레벨 24)은 멀티 윈도우 지원에 대한 개선사항이 포함되어 있습니다. 자유 양식 크기 조절로 활동의 크기를 조절하여 더욱 자연스럽게 만들 수 있습니다. 앱과 사용자설정 마우스 커서에 걸쳐서 드래그 앤 드롭 작업용 API에 액세스할 수도 있습니다.

네트워크 요구사항 확인

Chromebook은 Docker 또는 LXC와 같이 컨테이너에서 전체 Android OS를 실행합니다. 이는 Android가 시스템 LAN 인터페이스에 직접 액세스할 수 없다는 것을 의미합니다. 대신 IPv4 트래픽이 네트워크 주소 변환(NAT)의 내부 레이어를 통과하고 IPv6 유니캐스트 트래픽이 추가 hop으로 라우팅됩니다. Android 앱에서 인터넷으로 발신되는 유니캐스트 연결은 그 자체로 작동하지만 일반적으로 수신 연결은 차단됩니다. Android의 멀티캐스트 또는 브로드캐스트 패킷은 방화벽을 통해 LAN으로 전달되지 않습니다.

멀티캐스트 제한사항의 특별한 예외사항으로 Chrome OS는 Android와 LAN 인터페이스 간 mDNS 트래픽을 전달하는 서비스를 실행합니다. 그렇기 때문에 LAN 세그먼트에서 다른 기기를 탐색하는 데 기본 Network Service Discovery API가 좋습니다. LAN에서 기기를 찾은 후 Android 앱은 기본 TCP 또는 UDP 유니캐스트 소켓을 사용하여 기기와 통신할 수 있습니다.

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

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

Chromebook의 가장 강력한 기능 중 하나는 사용자가 쉽게 한 기기에서 다른 기기로 이전할 수 있다는 점입니다. 즉, 누군가가 지금까지 사용해 온 Chromebook을 그만 사용하고 다른 Chromebook을 사용하기 시작한 경우 간단하게 로그인하기만 하면 모든 앱이 나타납니다.

이러한 경험을 더욱 향상하려면 앱 데이터를 클라우드로 백업하여 기기에 걸친 동기화를 가능하게 합니다. 즉, 앱의 정상적인 작동을 인터넷 연결에 의존해서는 안 됩니다. 기기가 오프라인 상태라면 앱은 사용자의 작업을 로컬에 저장하고 온라인 상태가 되면 이를 클라우드와 동기화해야 합니다. 예를 들어 사용자는 오프라인 상태에서 Google 문서로 문서를 수정하고 기기가 인터넷에 연결되면 변경사항을 클라우드와 동기화할 수 있습니다.

Chromebook은 학교와 같이 많은 사람들이 함께 사용할 수도 있습니다. 로컬 저장소는 한정되어 있기 때문에 계정과 계정의 저장소 전체가 언제든지 기기에서 삭제될 수 있습니다. 학교 현장에서는 이러한 시나리오를 염두에 둬야 합니다.

NDK 라이브러리 업데이트

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

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

먼저 적절한 매니페스트 플래그가 지정되었는지 확인합니다. 이 플래그는 원하는 방향을 포함하며 screenOrientation unspecified를 설정하는 것이 가장 좋습니다. 방향을 landscape로 설정하고 싶으면 대신 sensorLandscape를 사용하여 태블릿에서 최적의 경험을 만듭니다. 특별한 크기 또는 방향 요청이 있다면 데스크톱 환경에만 영향을 미치는 새로운 메타 태그를 크기 또는 방향 힌트로 추가하는 것을 고려해야 합니다. 스마트폰에서도 이를 변경하고 싶다면 대신 defaultHeight, defaultWidth, 또는 minHeight 레이아웃을 지정해야 합니다.

특정 입력 기기가 특정 기기 범주를 처리하도록 하려면 android.hardware.type.pc를 지정하여 입력 호환성 모드를 비활성화해야 합니다.

네트워킹을 사용한다면 연결 문제가 해결된 후 앱이 네트워크와 연결되는 것을 확인하거나 기기의 절전 모드에서 해제된 것을 확인해야 합니다.

Google은 사용자만의 테스트 계획을 만드는 데 사용할 수 있는 Chrome OS의 Android 앱용 테스트 사례를 참조하는 것을 추천합니다. 테스트 사례는 Android 앱을 Chrome OS 기기에서 실행하려면 준비되어 있어야 하는 다양한 일반적인 시나리오를 다룹니다.

멀티 윈도우 및 방향 변경

Chrome OS의 멀티 윈도우 환경은 상태 지속성 및 리콜 문제를 더욱 분명하게 만듭니다. 적절할 때 ViewModel을 사용하여 상태를 저장하고 복원해야 합니다.

상태 지속성을 테스트하려면 앱을 어느 정도 동안 최소화하고 자원을 많이 소모하는 다른 프로세스를 시작한 앱을 복원하여 앱이 처음에 놔둔 상태로 다시 돌아오는 것을 확인해야 합니다.

전체 화면 키(F4), 최대화 및 복원을 눌러서 창 크기 조절을 테스트합니다. 개발자 옵션에서 자유 크기 조절을 활성화하고 앱이 비정상적으로 종료되지 않고 원활하게 크기가 조절되는지 확인하여 자유 크기 조절을 테스트합니다.

Chrome OS 기기가 지원하는 경우 노트북에서 태블릿 모드로 변경하여 모든 것이 정상적으로 작동하는지 확인합니다. 태블릿 모드에서 기기를 한 번 돌려서 방향 변경을 테스트합니다. 다시 노트북 모드로 전환합니다. 이 단계를 몇 번 반복합니다.

상단 바가 UI 요소 또는 위치 기반 터치 입력을 상쇄하여 앱을 손상시키는지 확인합니다. Chrome OS 기기의 경우 앱이 상태 바 구역에 중요한 정보를 배치하지 않는지 확인합니다.

카메라 또는 펜과 같은 다른 하드웨어 기능을 사용한다면 위에 언급한 창 및 기기 변경 시에도 정상적으로 작동하는지 확인합니다.