본문 바로가기
개발/안드로이드

Direct Boot용으로 개발하기

by darksilber 2016. 6. 4.
반응형

출처 - http://googledevkr.blogspot.kr/search?updated-max=2016-05-31T08:41:00%2B09:00&max-results=7&reverse-paginate=true

 

Direct Boot용으로 개발하기

게시자: Wojtek Kaliciński, 디벨로퍼 어드보케
Android N에서부터, 전원이 켜진 기기는 사용자가 처음으로 잠금을 풀기 전에 Direct Boot라는 새로운 모드로 부팅할 수 있습니다. 이 모드에서는 운영 체제가 완전히 작동하지만, 비공개 앱 데이터에 대한 액세스가 제한되며 Direct Boot를 인식하도록 업데이트된 앱만 실행할 수 있습니다.
게시자: Wojtek Kaliciński, 디벨로퍼 어드보케
Android N에서부터, 전원이 켜진 기기는 사용자가 처음으로 잠금을 풀기 전에 Direct Boot라는 새로운 모드로 부팅할 수 있습니다. 이 모드에서는 운영 체제가 완전히 작동하지만, 비공개 앱 데이터에 대한 액세스가 제한되며 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를 포함하여 기기가 부팅될 때 항상 액세스할 수 있는 새 저장소입니다.
Direct Boot 인식으로 표시된 앱의 구성 요소들은 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_AWAREPackageManager.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 개발 패턴 모음을 팔로우해서 더 자세히 알아보세요!
반응형

댓글