주간 안드로이드 뉴스 #189

Android Weekly(http://androidweekly.net/)는 매주 발행되는 안드로이드 뉴스레터입니다. 영어 기사를 정독할 시간이 없는 분을 위해 핵심 꼭지를 요약했습니다.

주간 안드로이드 뉴스를 요약해 드립니다. Android Weekly 189 원문도 읽어보세요.


먼저, 아래 긴~ 내용들을 소개하기 전에 짧은 것들을 먼저 소개드립니다.

  • Android Studio 2.0 Preview 7 가 업데이트 되었다고 합니다. 새로운 것을 과감히 써보는 안드로이드 개발자 분들에게 좋은 소식이네요
  • Gradle 빌드 시간이 오래걸려서 걱정이신가요? GitHub 에 올라온 라이브러리 중에 build-time-tracker-plugin 으로 빌드에 얼마나 시간이 걸리는지 알려주고 트렌드를 보여줍니다.
  • 간단한 RecyclerView에서의 Drag and Drop 구현 코드 입니다 DragRecyclerView

안드로이드 스튜디오 업데이트, 얼마나 자주 해야 하나?

안드로이드 스튜디오의 장점은 개선이 빠르다는 것입니다. 매번 새 릴리즈를 통해 새 기능과 도구, 버그 픽스 사항이 소개됩니다. 새 버전의 장점을 누리는 것도 좋지만 안정적인 개발 환경을 유지하고도 싶을 겁니다. 얼마나 자주 업데이트를 해야 할까요?

이런 개발 뉴스를 더 만나보세요

Canary 빌드는 새 릴리즈의 프리뷰 버전입니다. 새 기능을 포함하지만 완벽히 개발되지는 않아서 약간 불안정합니다.

Beta 버전은 안정적인 릴리즈를 위한 후보 버전이라고 이해하면 됩니다. 비교적 버그가 없고 안정적입니다. 보통 안정적인 버전이 릴리즈되기 한 주에서 반 주 전에 릴리즈됩니다.

Stable 릴리즈는 충분히 검증된 버전으로 이전 stable 버전보다 안정적입니다. 보통 6~10주 간격으로 릴리즈됩니다.

안드로이드 스튜디오 Canary 빌드를 사용해서 새 기능을 빠르게 사용하는 장점을 누리면서도 안정적인 개발 환경을 유지하고 싶다면 두 버전을 설치하면 됩니다. 안드로이드 스튜디오는 설정을 OS별로 다른 위치에 저장하므로, 두 버전이 서로 충돌하지 않습니다. Canary 버전을 사용하면서 점차 안정적이 되는 것을 체감한다면 stable 버전을 업데이트해도 된다는 확신을 얻을 수 있갰죠.

“Preferences” 메뉴의 “System Settings” > “Updates”에 가서 “Automatically check updates”를 선택하면 항상 업데이트를 확인해서 알려줍니다.

자세한 내용은 원문 기사를 참고해 주세요.

퍼미션 Part 3

퍼미션은 Marshmallow에서 바뀐 선택적 권한 모델을 적용하고 사용자 경험을 개선하는 방법에 대한 연속 강좌입니다. 주간 안드로이드 뉴스 #188 퍼미션 Part 2에서 이어집니다.

Part 3에서는 아직 획득하지 못한 권한을 실제로 어떻게 요청하는지 알아봅니다.

사용자가 처음 권한 요청을 수락하면 좋겠지만, 거부하는 경우도 생각해야 합니다. 먼저 첫 권한 요청에서 허락하는 경우를 보겠습니다. startActivityForResult() 유틸 메서드를 만들어서 PermissionsActivity를 시작할 때 반드시 사용하도록 했습니다. 사용자가 설정에서 권한을 수락하는 경우를 방어할 수 있습니다. 다음으로 PermissionsActivity에 권한을 요청하는 코드를 만듭니다.

private void requestPermissions(String... permissions) {
    ActivityCompat.requestPermissions(
        this, permissions, PERMISSION_REQUEST_CODE);
}
 
@Override
public void onRequestPermissionsResult(
    int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == PERMISSION_REQUEST_CODE 
        && hasAllPermissionsGranted(grantResults)) {
        requiresCheck = true;
        allPermissionsGranted();
    } else {
        requiresCheck = false;
        showMissingPermissionDialog();
    }
}
 
private boolean hasAllPermissionsGranted(@NonNull int[] grantResults) {
    for (int grantResult : grantResults) {
        if (grantResult == PackageManager.PERMISSION_DENIED) {
            return false;
        }
    }
    return true;
}

requestPermissions()을 호출해서 OS가 권한을 요청하도록 합니다. requestPermissions()는 다른 액티비티에 통제 권한을 넘기면 해당 액티비티가 끝난 후 콜백을 받는 startActivityForResult()처럼 동작합니다. requestPermissions()의 콜백은 onRequestPermissionResult() 메서드로, 요청된 권한 중 획득된 권한을 모두 확인해서 액티비티에 통제 권한을 돌려줍니다. 사용자가 권한 요청을 거부하면 복잡해지죠.

더구나 ‘다시 묻지 않기’ 체크 박스를 선택한 후 거부를 누르면 항상 해당 요청이 거부되도록 처리되지만, 거부인 PERMISSION_DENIED로만 돌아오기 때문에 코드 상에서 이를 확인할 방법이 없습니다. 꼭 필요한 권한인 경우 권한 요청 이유를 설명하고, 그래도 거부를 한다면 앱을 꺼야 합니다. 이 경우 설정 화면에서 사용자가 직접 권한을 승인해줘야 합니다.

자세한 내용은 GitHub 소스 코드와 원문 기사를 참고해 주세요.

퍼미션 Part 4

Part 3에 이어서 4에서는 필수적이지 않은 권한에 대해서 알아봅니다.

권한은 필요한 시점에 요청하는 것이 가장 좋습니다. 만약 사진에 geotag를 사용한다면 사용자가 사진을 찍은 순간에 권한을 요청하는게 좋겠죠. 또한 사용자가 권한 요청을 수락할지 말지 선택하는 것을 도우려면 특정 권한이 필요한 이유도 분명해야 합니다. 권한 요청 이유가 불분명하면 사용자의 거부 확률이 높아질 수 있습니다.

사용자에게 너무 많은 권한을 한꺼번에 요청하면 사용자가 당황해서 앱을 나가거나 심지어 지워버릴 수도 있습니다. 최소한으로 필요한 권한만 요청한 후 문맥에 따라 다른 권한을 단계별로 요청하는 것이 좋습니다. 사용자가 권한 필요 이유도 알 수 있고, 앱의 가치를 더욱 이해할 수 있습니다.

또한 실제로 필요한 권한만을 요청하는 것이 좋습니다. 마지막으로 사용자가 ‘앱 데이터 지우기’를 시행하면 권한 설정도 함께 사라진다는 것을 기억하세요.

다음 시리즈에서는 앞서 다룬 테크닉을 활용하는 방법에 대해 알아보겠습니다.

더 읽을 거리

1월 넷째 주의 기사를 Android Weekly 189 영어 원문에서 볼 수 있습니다.

지난 뉴스가 궁금하다면 아래 링크를 참고해 주세요.

컨텐츠에 대하여

이 컨텐츠는 저자의 허가 하에 이곳에서 공유합니다.


Eunjoo Im

Realm Asia 팀에서 일하는 임은주입니다. iOS와 안드로이드 개발자로, 현재 Realm의 기술 컨텐츠 생산 및 관리에 주력하고 있습니다.

4 design patterns for a RESTless mobile integration »

close