반응형
Direct Boot용으로 개발하기
2016년 5월 27일 금요일
게시자: Wojtek Kaliciński, 디벨로퍼 어드보케
Android N에서부터, 전원이 켜진 기기는 사용자가 처음으로 잠금을 풀기 전에 Direct Boot라는 새로운 모드로 부팅할 수 있습니다. 이 모드에서는 운영 체제가 완전히 작동하지만, 비공개 앱 데이터에 대한 액세스가 제한되며 Direct Boot를 인식하도록 업데이트된 앱만 실행할 수 있습니다.Read More
Android N에서부터, 전원이 켜진 기기는 사용자가 처음으로 잠금을 풀기 전에 Direct Boot라는 새로운 모드로 부팅할 수 있습니다. 이 모드에서는 운영 체제가 완전히 작동하지만, 비공개 앱 데이터에 대한 액세스가 제한되며 Direct Boot를 인식하도록 업데이트된 앱만 실행할 수 있습니다.Read More
게시자: Wojtek Kaliciński, 디벨로퍼 어드보케
Android N에서부터, 전원이 켜진 기기는 사용자가 처음으로 잠금을 풀기 전에 Direct Boot라는 새로운 모드로 부팅할 수 있습니다. 이 모드에서는 운영 체제가 완전히 작동하지만, 비공개 앱 데이터에 대한 액세스가 제한되며 Direct Boot를 인식하도록 업데이트된 앱만 실행할 수 있습니다.
시스템이 Direct Boot 모드로 시작되자마자 실행해야 하는 앱의 경우에는 새 Intent.ACTION_LOCKED_BOOT_COMPLETED 브로드캐스트가 있습니다. 사용자가 기기 잠금을 해제한 후에도 모든 앱들이 여전히 Intent.ACTION_BOOT_COMPLETED를 수신하게 됩니다.
기기 보호 저장소에 액세스하려면 모든 파일 관련 API에 대해 제2의 Context 객체를 만들어 사용해야 합니다.
또 한 가지 기억할 점은, Direct Boot 도중에는 앱이 다른 Direct Boot 인식 앱이나 구성 요소에만 액세스할 수 있다는 것입니다. 앱이 외부 서비스나 액티비티에 의존하는 경우에는 이런 외부 서비스나 액티비티를 사용할 수 없는 상황을 적절하게 처리해야 합니다. 인텐트 필터는 기본적으로 사용자의 현재 상태(잠김/잠금 해제됨)에서 사용할 수 있는 구성 요소만 일치 항목으로 검색합니다. 패키지 관리자에게 열거할 구성 요소를 명시적으로 알려주는 두 가지 새로운 플래그가 있는데, 그것은 바로 PackageManager.MATCH_DIRECT_BOOT_AWARE와 PackageManager.MATCH_DIRECT_BOOT_UNAWARE입니다.
또는 에뮬레이트한 Direct Boot 모드를 사용할 수 있습니다. 이 모드를 사용하려면 기기에서 잠금 패턴을 설정하고, 잠금 패턴을 설정할 때 보안 화면으로 시작할 것인지 묻는 메시지가 나오면 "사양합니다"를 선택한 다음, 아래의 adb 셸 명령을 사용해 에뮬레이션을 설정하거나 해제하십시오.
#BuildBetterApps
Android 개발 패턴 모음을 팔로우해서 더 자세히 알아보세요!
Android N에서부터, 전원이 켜진 기기는 사용자가 처음으로 잠금을 풀기 전에 Direct Boot라는 새로운 모드로 부팅할 수 있습니다. 이 모드에서는 운영 체제가 완전히 작동하지만, 비공개 앱 데이터에 대한 액세스가 제한되며 Direct Boot를 인식하도록 업데이트된 앱만 실행할 수 있습니다.
Direct Boot가 내 앱에 적합한가?
모든 앱을 Direct Boot 모드로 실행해야 하는 것은 아니므로, 코딩을 시작하기 전에 자신의 앱이 다음의 일반적 사용 사례에 적합한지 확인해 보세요.- 알람을 예약하는 앱(예: 알람 시계)
- 중요하고 시기 적절한 알림을 제공하는 앱(예: 메시징 앱)
- 다른 앱이나 시스템에 서비스를 제공하는 앱(예: 접근성 서비스)
Direct Boot 인식 앱으로 만들기
사용자가 기기의 잠금을 풀기 전에 앱이 실행되도록 하기 위해서는, 매니페스트에서 명백하게 구성 요소들을 Direct Boot 인식 구성 요소로 표시해야 합니다. <activity|provider|receiver|service ...
android:directBootAware=”true”>
앱 구성 요소들 중에서 Direct Boot 인식이 되어야 하는 것들을 일부 고를 수 있지만, 사용자 지정 Application 클래스를 사용하고 있다면, 앱 내부에 Direct Boot 인식으로 표시된 구성 요소가 있을 경우 앱이 Direct Boot 인식인 것으로 추정합니다.시스템이 Direct Boot 모드로 시작되자마자 실행해야 하는 앱의 경우에는 새 Intent.ACTION_LOCKED_BOOT_COMPLETED 브로드캐스트가 있습니다. 사용자가 기기 잠금을 해제한 후에도 모든 앱들이 여전히 Intent.ACTION_BOOT_COMPLETED를 수신하게 됩니다.
기기 보호 저장소 영역 사용
사용자가 비공개 앱 데이터의 잠금을 해제하는 데 필요한 자격 증명을 제시하기 전에 앱이 실행되도록 지원하기 위해, 이제 모든 Android N 기기에서 다음 두 가지 데이터 저장 위치를 제공합니다.- 자격 증명 보호 저장소. 모든 앱의 기본 저장소로서, 사용자가 기기 잠금을 해제한 이후에만 사용할 수 있습니다.
- 기기 보호 저장소. Direct Boot를 포함하여 기기가 부팅될 때 항상 액세스할 수 있는 새 저장소입니다.
기기 보호 저장소에 액세스하려면 모든 파일 관련 API에 대해 제2의 Context 객체를 만들어 사용해야 합니다.
Context deviceProtectedContext = context.createDeviceProtectedStorageContext();
deviceProtectedContext.openFileInput( ... )
앱이 Direct Boot 인식 버전으로 업데이트될 경우, 기기 보호 저장소로 옮겨가야 하는 Shared Preferences 또는 데이터베이스를 이전에 저장했을 수 있습니다. Shared Preferences나 데이터베이스에 액세스하기 전에 Context.moveSharedPreferencesFrom()과 Context.moveDatabaseFrom()을 사용하여 데이터가 백업되고 이전 버전이나 다른 기기로부터 복원되더라도 앱이 계속해서 올바르게 작동하는지 확인해야 합니다.주의할 점
기기 보호 저장소에 무엇을 넣을 것인지 신중히 생각해야 합니다. 이 저장소에 넣는 것은 앱이 Direct Boot 동안에 작동하도록 해줄 최소한의 데이터 세트여야 합니다. 예를 들어, 메시징 앱에서 서버 상의 새 메시지 개수에만 액세스할 수 있는 좁은 범위의 액세스 토큰을 저장할 수 있을 것입니다. 완전한 메시지 기록 및 읽기/쓰기 토큰 등의 모든 민감한 개인 정보는 여전히 자격 증명 보호 저장소에 저장해야 합니다.또 한 가지 기억할 점은, Direct Boot 도중에는 앱이 다른 Direct Boot 인식 앱이나 구성 요소에만 액세스할 수 있다는 것입니다. 앱이 외부 서비스나 액티비티에 의존하는 경우에는 이런 외부 서비스나 액티비티를 사용할 수 없는 상황을 적절하게 처리해야 합니다. 인텐트 필터는 기본적으로 사용자의 현재 상태(잠김/잠금 해제됨)에서 사용할 수 있는 구성 요소만 일치 항목으로 검색합니다. 패키지 관리자에게 열거할 구성 요소를 명시적으로 알려주는 두 가지 새로운 플래그가 있는데, 그것은 바로 PackageManager.MATCH_DIRECT_BOOT_AWARE와 PackageManager.MATCH_DIRECT_BOOT_UNAWARE입니다.
다음 단계는?
새 Direct Boot을 지원하는 Android N 기기가 릴리스될 때까지는 Android N 개발자 프리뷰 빌드로 앱을 테스트할 수 있습니다. Nexus 5X와 Nexus 6P에서는 모든 사용자 데이터를 지우고 설정 > 개발자 옵션 > 파일 암호화로 변환을 사용하여 전체 Direct Boot 모드를 사용하도록 설정할 수 있습니다. 또는 부트로더로 재부팅하고 적절한 빠른 부팅 명령을 실행할 수도 있습니다. $ adb reboot-bootloader
$ fastboot --wipe-and-use-fbe
경고: 두 가지 방법 모두 공장 초기화를 수행하여 기기에서 사용자 데이터를 모두 삭제합니다.또는 에뮬레이트한 Direct Boot 모드를 사용할 수 있습니다. 이 모드를 사용하려면 기기에서 잠금 패턴을 설정하고, 잠금 패턴을 설정할 때 보안 화면으로 시작할 것인지 묻는 메시지가 나오면 "사양합니다"를 선택한 다음, 아래의 adb 셸 명령을 사용해 에뮬레이션을 설정하거나 해제하십시오.
$ adb shell sm set-emulate-fbe true
$ adb shell sm set-emulate-fbe false
이런 명령을 사용하면 기기가 재부팅된다는 점에 유의하세요. 에뮬레이트한 Direct Boot 모드는 테스트 기기에서만 사용해야 합니다. 데이터 손실을 초래할 수 있기 때문입니다.#BuildBetterApps
Android 개발 패턴 모음을 팔로우해서 더 자세히 알아보세요!
반응형
'개발 > Google Developers korea 블로그' 카테고리의 다른 글
안드로이드 N API 최종 마무리. 안드로이드 N용으로 앱을 준비하세요. (0) | 2016.06.29 |
---|---|
Firebase 클라우드 메시징 소개 (0) | 2016.06.29 |
Android Studio 2.2 Preview 살펴보기 (0) | 2016.06.29 |
Google Play 서비스 9.0 업데이트 (0) | 2016.06.04 |
안드로이드 N 두 번째 개발자 프리뷰 (0) | 2016.04.27 |
댓글