Android Things SDK 개요


이 글은 Android things의 공식 홈페이지에 있는 Overview를 번역한 것이다. 크게 보자면 Android Things가
embedded 기기에 대한 core Android의 확장이며 그에 따른 Android Things의 이점과 제약을 설명하고 있다.


개인적으로는 다른 어떤 이점보다도 단일 app 기반이라는 점과 UI의 부재라는 제약이 더 크게 보인다.
사실 라즈베리파이는 아두이노나 다른 embedded 기기에 비한다면 상당히 고사양의 기기이다. multi tasking이
가능한 CPU와 HDMI라는 고사양의 display 인터페이스를 가지고 있음에도 불구하고 그 것을 활용하지 못한다는
것은 하드웨어 리소스의 낭비로 보여진다. 


이런 측면으로 보자면 아두이노를 지원해야 할 것 같지만 그 또한 여의치 않은 것이 아두이노같은 저수준의 디바이스는
작은 크기의 소프트웨어와 빠른 속도, 저사양의 기기이므로 메모리 관리가 효율적으로 이루어져야 한다는 점에서 
VM 기반의 Android 플랫폼이 썩 어울려 보이지는 않는다.


이렇게 쓰고보니 Android Things가 마치 쓸모없는 것 처럼 표현이 되었는데…아직 개발자 프리뷰이니 조금 더
지켜보아야 할 것 같다.



Android Things는 동일한 Android 개발 툴, 동급 최고의 Android 프레임워크, 모바일에서 개발자들의 성공을 
보장하는 Google API를 제공함으로써 embedded 기기와 관련된 개발을 쉽게 할 수 있도록 한다.



embedded 기기를 위한 app들은 개발자로 하여금 폰이나 태블릿보다 하드웨어 주변 장치나 드라이버에 더 익숙하게
한다. 또한 일반적으로 embedded 기기는 사용자들에게 단일 app 환경을 제공한다. 이 문서는 core Android 
개발과 Android Things 사이에 추가된 것, 빠진 것 등 중요한 차이점을 설명한다.


Android Things는 Things Support Library를 통해 추가적인 API를 제공하는 Core Android 프레임워크의
확장이다. 이런 추가된 API들은 기존의 모바일 기기에서는 찾아볼 수 없었던 새로운 유형의 하드웨어를 통합시킬 수 
있는 app을 개발할 수 있도록 해준다.


또한 Android Things 플랫폼은 단일 애플리케이션 사용을 위해 간소화 되어있다. 시스템 app이 존재하지 않고
기기의 시작과 동시에 개발자가 개발한 app이 자동으로 실행됨으로써 사용자가 app 환경에 집중할 수 있도록 해준다.


Things Support Library


주변장치 I/O API

주변장치(Peripheral) I/O APIs는 개발한 app이 산업 표준의 프로토콜과 인터페이스를 통해 센서들이나 액츄에이터
들과 통신할 수 있도록 해준다. 다음의 인터페이스들을 지원한다 : GPIO, PWM, I2C, SPI, UART.

APIs의 사용 방법에 대한 추가적인 정보는 다음 링크에서 확인하라. Peripheral I/O API Guides


User Driver API

사용자 Drivers는 기존 Android 프레임워크 서비스를 확장하고 다른 app들이 표준 Android APIs를 통해 접근
가능한 프레임워크에 하드웨어 이벤트를 주입할 수 있도록 해준다.

APIs의 사용 방법에 대한 추가적인 정보는 다음 링크에서 확인하라. User Driver API Guides


동작의 변화


Core application packages


Android Things 는 시스템 apps와 content providers등 표준 API 모음은 포함하지 않는다. 앱을 개발할 때
common intents와 아래 목록의 content provider APIs는 사용을 하면 안된다.

  • CalendarContract
  • ContactsContract
  • DocumentsContract
  • DownloadManager
  • MediaStore
  • Settings
  • Telephony
  • UserDictionary
  • VoicemailContract


화면 출력은 선택 사항

Android Things는 전통적인 Android 애플리케이션과 마찬가지로 UI toolkit을 이용하여 그래픽 사용자 
인터페이스를 제공할 수 있다. 그래픽 모드에서는 애플리케이션의 Window가 전체 화면을 모두 차지하게 된다.
Android Things는 시각적인 사용자 환경을 완벽하게 제어할 수 있는 시스템 상태바라든지 네비게이션 버튼이
포함되어있지 않다. 


따라서 Android Things는 디스플레이가 필요하지 않다. 그래픽 디스플레이가 제공되지 않는 기기상에서도
여전히 Activity들은 Android Things app의 중요한 컴포넌트이다. 그렇기 때문에 프레임워크는 모든 입력 
이벤트를 포커스가 주어진 foreground Activity로 전달한다. 이렇게 개발된 앱은 service와 같은 다른 애플리케이션 
컴포넌트로부터 키 이벤트나 모션 이벤트 등을 수신받지 못한다.


Home activity 지원

Android Things는 부팅 시 자동으로 실행될 수 있도록 애플리케이션의 manifest에 주요 진입점으로 home
activity
를 노출하도록 하고 있다. 이 activity는 CATEGORY_DEFAULT와 IOT_LAUNCHER 두 개의 intent
filter를 반드시 포함시켜야 한다.


개발의 편의를 위해 이 activity는 CATEGORY_LAUNCHER 또한 포함시켜야 하므로 Android Studio를 통한
배포 또는 디버깅시에 이 activity를 기본 activity로 실행시킬 수 있다.

<application
    android:label="@string/app_name">
    <activity android:name=".HomeActivity">
        <!-- Launch activity as default from Android Studio -->
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>

        <!-- Launch activity automatically on boot -->
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.IOT_LAUNCHER"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>
</application>


Google service들의 지원

Android Things는 Google APIs for Android의 일부를 지원한다. 아래의 목록은 Android Things에서의 
API 지원 여부를 보여준다.


Supported APIs


Unavailable APIs

주의 : 일반적으로 사용자의 입력이나 인증 절차가 필요한 APIs는 app에서 사용할 수가 없다.


Android Things의 각 배포버전은 Google Play Services의 최신 안정화 버전을 번들로 제공하며 적어도 
클라이언트 SDK 10.0.0 이상의 버전이 필요하다. Android Things는 기기의 Play 서비스를 자동으로 업데이트
해주는 Google Play Store를 포함하고 있지 않다. 기기의 Play 서비스 버전은 정적으로 고정되어있기 때문에
app은 대상 배포판에 번들로 제공되는 것 보다 큰 버전의 클라이언트 SDK를 대상으로 할 수 없다.


주의 : 개발자 프리뷰 상태인 동안 각 배포판의 번들 버전은 release notes에 그 목록이 표시되어 있다.


Permissions

embedded 기기에서는 app 실행 시에 대화상자에 접근할 수 있는 UI를 제공하지 않기 때문에 app 실행 시의 권한 
요청
은 지원되지 않는다. 필요하다면 app의 manifest 파일에 권한을 선언해야 한다. app의 manifest에 선언된 
정상적이고 워험한 권한들은 설치 시에 부여된다.


Notifications

Android Things에는 시스템 전반적으로 상태표시줄이나 창이 없으므로 notification은 지원되지 않는다.
따라서 NotificationManager APIs의 호출은 피해야 한다.






블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^