안드로이드

[Android][번역] 안드로이드 3.0 을 위한 어플리케이션 최적화

SojuMan 2013. 5. 29. 23:49

출처 : http://blog.naver.com/PostView.nhn?blogId=huewu&logNo=110119643374

Optimizing Apps for Android 3.0

원문: http://developer.android.com/guide/practices/optimizing-for-3.0.html


간만에 Dev Guide 문서를 번역해 보았습니다. 와... 내용이 길군요. 본 문을 두 개의 포스트로 나누고, 중복된 부분과 그다지 필요없다고 여겨지는 부분은 임의로 건너 띈 만큼, 원문을 참고하시면 좋겠네요.


안드로이드 3.0 허니콤은 어플리케이션 사용자 경험을 향상 시킬 수 있는, 여러가지 새로운 기능을 제공합니다. 물론, 안드로이드는 상위 호환성을 갖기 때문에, 기존에 작성된 어플리케이션이 허니콤 타블렛에서 동작하지 않는 것은 아닙니다. 하지만, 아무래도 훨씬 커다란 화면을 갖고 있는 타블렛 디바이스 상에서 기존 휴대폰과 비슷한 UX 를 갖은 어플리케이션이 근사하다고 할 수는 없겠지요. 여러분의 어플리케이션이 이 새로운 디바이스 위에서 멋진 동시에 잘 동작하게 하고자 한다면 약간의 주의가 필요합니다.


이 문서는 어떤 방식으로 기존 어플리케이션을 이전 버전과 호환성을 유지한 채 안드로이드 3.0 기반으로 최적화 할 수 있을 지, 혹은 새로운 API 를 기반으로 완전히 업그레이드 된 어플리케이션을 작성할 수 있는지에 관하여 설명합니다.


안드로이드 3.0 SDK 설치하기

안드로이드 허니콤 어플리케이션을 개발하고 테스트하기 위해서는 관련 SDK 를 설치 하셔야 합니다. 안드로이드 SDK & AVD 매니저를 통해 아래의 패키지를 설치하세요.

  • SDK Platform Android 3.0
  • Android SDK Tools, revision 10
  • Android SDK Platform-tools, revision 3
  • Documentation for Android SDK, API 11
  • Samples for SDK API 11

허니콤 AVD(Android Virtual Device) 생성하기

안드로이드 3.0 이상 버전을 타겟으로 설정하고, WXGA 스킨을 선택한니다. (기본 설정입니다.) 안드로이드 3.0 기반에서 어플리케이션을 테스트 하는 최선의 방법은 바로 모토로라 Xoom 과 같은 실재 디바이스를 사용하는 것 입니다. 디바이스가 없는 경우에는 AVD 를 사용해야 합니다.하지만, 안드로이드 에뮬레이터는 ARM 인스트럭션 셋을 시뮬레이팅 해야하고, WXGA 스크린은 일반 AVD 에 비하여 훨씬 크기때문에, 에뮬레이터의 성능은 기대하지 않는 편이 좋습니다. 최초 구동하는데는 굉장히 오랜 시간이 걸리고, 부팅되는 동안 별다른 사용자 피드백도 주어지지 않습니다. 인내심이 필요합니다. 안드로이드 개발 팀은 에뮬레이터의 성능 문제를 해결하기 위하여 열심히 노력하고 있으며, 앞으로 새롭게 릴리즈될 에뮬레이터는 훨씬 좋아질 것 입니다.

TIP: 에뮬레이터 스타트업 시간을 향상 시키기 위하여, 여러분이 생성한 AVD 의 스냅샷 기능을 활용할 수 있습니다. AVD 생성시 'Enable Snapshots' 체크 박스에 체크하고, AVD 을 시작할 때, 'Launch from Snapshot' 과 'Save to Snapshot ' 박스에 체크하시면 됩니다. 이렇게 되면, 에뮬레이터 종료 시 스냅샷 저장을 위한 시간이 소요되지만, AVD 의 상태 정보가 스냅샷으로 저장됩니다. (따라서, 초기 상태의 에뮬레이터 스냅샷을 작성 한 후에는 Save to Snapshot 박스를 체크하지 않는 편이 좋습니다.) 이 후, 에뮬레이터를 시작할 때는 해당 스냅샷이 바로 시작됨으로 부팅 시간이 단축 됩니다.

어플리케이션을 타블렛 용으로 최적화 하기

만일 여러분이 이전 안드로이드 버전 대응 어플리케이션을 개발했다면, 어플리케이션 호환성을 유지하는 가운데(android:minSdkVersion 을 수정하지 않고) 수정할 수 있는 요소들이 그리 많지 않습니다.


안드로이드 3.0 최적화를 위하여 다음과 같은 일들을 시도해 볼 수 있습니다.


1. 기존 어플리케이션을 안드로이드 3.0 에서 테스트 합니다.

기존과 동일한 방식(기존 안드로이드 라이브러리를 활용하여)으로 어플리케이션을 빌드하고, 안드로이드 3.0 AVD 상에서 어플리케이션을 실행해 봅니다. 일반적인 테스트를 수행하고, 어플리케이션이 정상적으로 동작하는지, UI 는 이상하지 않은지 확인하시기 바랍니다.


2. 새로운 "holographic" 테마를 적용합니다.

메니페스트 파일을 열어서, 아래와 같이 android:targetSdkVersion 값을 '11' 로 설정합니다.

<manifest ... >
<uses-sdk android:minSdkVersion="4"
android:targetSdkVersion="11" />
<application ... >
...
<application>
</manifest>

안드로이드 3.0 플랫폼(API Level 11 이상)을 타겟으로 선언 하면, 해당 어플리케이션이 허니콤에서 동작 할 때, 시스템이 자동적으로 'holographic' 테마를 적용해 줍니다. holographic 테마는 허니콤에 어울리는 새롭게 디자인된 위젯들 - 'Button, EditText 등등' 을 제공합니다. 이는 안드로이드 허니콤 어플리케이션에서 기본적으로 사용하는 테마이며, 따라서 여러분의 어플리케이션이 다른 허니콤 어플리케이션과 일관된 Look&Feel 을 갖도록 도와줍니다.


또한, 엑티비티에 holographic 테마가 적용되면, Option Menu 를 대신하여 새롭게 추가된 Action Bar 를 사용할 수 있습니다. Action Bar 는 기존 타이틀 바를 대체하는데, 사용자가 바로 Option Menu 를 사용 할 수 있도록 해 줍니다. (Action Bar 오른편에 Drop Down 메뉴로 Option 항목이 표시됩니다.)


어플리케이션을 이전처럼 빌드 한 후, 안드로이드 3.0 AVD 에 인스톨 합니다. 여러분의 어플리케이션 인터페이스가 holographic 테마에 기반하여 잘 동작하는 지 반복 테스트를 수행합니다.

NOTE: 만일 엑티비티에 이미 적용된 테마가 있는 경우, 해당 테마는 기존 안드로이드 스타일 테마가 아니라, holographic 테마를 오버라이드 하게 됩니다. 이 문제를 해결하기 위해서는 플랫폼 버전 구별자를 사용하여, 안드로이드 3.0 플랫폼을 위해서는 holographic 테마에 기반한 다른 테마를 사용하도록 구현할 수 있습니다. 보다 자세한 정보는 다음 문서를 살표보세요.

xlarge 스크린을 위한 별도의 레이아웃 제공하기

'extra lagre' 스크린을 위한 별도의 레이아웃을 제공하면, 호환성을 저해할 수 있는 새로운 API 를 사용하지 않고도. 타블렛 상에서 어플리케이션 사용자 경험을 향상 시킬 수 있습니다. 이를 위해, 'extra lagre' 스크린을 위한 새로운 레이아웃을 생성하고자 한다면, 다음과 같은 점을 고려해볼만 합니다.

  • Landscape Layout (가로 모드 레이아웃): 블렛 스타일의 디바이스는 일반적으로 가로 모드로 사용됩니다. 따라서, 넑찍한 화면에 어울리는 엑티비티 레이아웃을 제공할 필요가 있습니다. 가로 모드를 나타내는 "land" 구분자와 큰 스크린 사이즈를 나타내는 "xlarge" 구분자를 동시에 활용하여, 타블렛 크기의 디바이스를 위한 별도의 레이아웃 셋을 구성할 수 있습니다. res/layout-xlarge-land/) 이때 구분자의 순서를 꼭 지키셔야 합니다. 리소스 구분자에 관한 보다 상세한 문서를 참조하시면 좋습니다.
  • 버튼의 위치와 크기: 버튼은 사용자가 타블렛을 두 손으로 쥐었을 때 사용하기 편리한 곳에 있어야 합니다. 또한, 버튼 크기가 너무 적은 경우 이를 재조정 할 필요도 있습니다. 특히나 "wrap_content" 속성을 사용한 경우 그런 일이 발생합니다. 버튼 크기를 키우기 위해서는 추가적인 패딩 값을 삽입하거나, dp 단위로 구체적인 값을 선언허거나, android:layout_weight 속성을 사용할 수 있습니다. 각각의 스크린 사이즈에 대하여 어떤 방식을 활용하는 편이 최선인지 적절한 판단이 필요합니다. 버튼은 너무 작아도, 너무 커도 곤란합니다.
  • 폰트 크기: 어플리케이션 폰트 크기를 지정할 때는 항상 sp 단위를 사용해야 합니다. sp 단위를 사용해야만, 폰트 크기가 너무 작아져서 글씨을 읽을 수 없는 불상사를 방지할 수 있습니다. sp 단위는 화면 크기에 독립적인 픽셀 단위로 현재 화면 크기에 따라 적절하게 그 값이 변경되기 때문에 그렇습니다. 그럼에도, 특별한 경우에는 'xlarge' 스크린을 위해서는 폰트의 크기를 조금 더 키워야 할 경우가 있을 수도 있습니다.

이 외에 기본적으로 항상 'Best Practices for Screen Independence' 문서에 설명된 내용을 기억하시기 바랍니다.


타블렛 용으로 어플리케이션 업그레이드 하기

NOTE: 기존 SDK 와 호환성을 유지하면서도 새롭게 추가된 API를 사용할 수 있는 방법이 있습니다. 일반적으로는자바의 Reflection 패키지를 이용하여, 특정 API 가 실재로 존재하는 동적으로 확인하는 방법을 활용하실 수 있습니다. 또는, 안드로이드 팀에서 제공하는 Compatibility Library (호환성 라이브러리 / 서포트 라이브러리라고 불립니다.) 를 사용하시면, 새롭게 추가된 몇몇 API 들(Fragment , Loader 등) 프로요 이후 타겟의 어플리케이션에서도 사용하실 수 있습니다. (호환성 라이브러리는 AVD and SDK Manager 를 통해 다운받으실 수 있습니다.)

만일 여러분이 안드로이드 허니콤의 기능을 최대로 활용하는 어플리케이션을 작성하고자 한다면, 허니콤을 새롭게 추가된 API 를 활용할 필요가 있습니다. (이렇게 되면 하위 호환성이 보장되지 않겠지만요...) 여러분이 기억해야 할 유용한 기능들을 몇 가지 소개해 보겠습니다.


최소 시스템 버전 선언하기

우선, 어플리케이션 코드를 수정하기전에 메니페스트에 <uses-sdk> 요소를 추가하여, android:targetSdkVersion 값을 11 로 선언해야 합니다. 이 어플리케이션이 안드로이드 허니콤 API 를 사용하고 있다는 것을 명시하여, 이전 버전의 안드로이드 디바이스로는 배포되지 않도록 보장해줍니다.

<manifest ... >
<uses-sdk android:minSdkVersion="11" />
<application ... >
...
<application>
</manifest>

앞서 이야기한대로, 타겟 SDK 버전이 변경되게 되면, 여러분이 어플리케이션 테마를 명시적으로 선언하지 않아도 자동적으로 새로운 Holo 테마가 적용됩니다. 다시 한번 말씀드리면 Holo 테마는 안드로이드 허니콤을 위한 표준 테마로, 모든 어플리케이션은 이 테마를 사용합니다. 또한 Holo 테마가 적용되면, 동시에 Action Bar 기능도 활성화 됩니다.


Action Bar 사용하기

Action Bar 는 기존 엑티비티 타이틀 바를 대체하는 위젯으로, 화면 최상단에 위치합니다. 기본적으로 어플리케이션 로고와 엑티비티 제목을 표시하며, 오른편에 drop-down 형태로 옵션 메뉴를 표시해 줍니다.


만일, 특정 메뉴 아이템 리소스에 showAsAction="ifRoom" 속성 값을 선언하거나, 코드 상으로 해당 값을 선언하시면, drop-down 형식 대신, 해당 메뉴 아이템이 바로 Action Bar 에 표시됩니다. (위의 그림에서는 두 개의 메뉴 아이템이 바로 표시되어 있습니다.) 또한, Action Bar 내에 어플리케이션 네이게이션 기능을 추가할 수 있으며, 이를 통해 사용자가 바로 홈 엑티비티 화면혹은 상위의 엑티비티로 이동할 수 있는 기능을 추가할 수도 있습니다. 추가적인 정보에 관해서는 Using Action Bar 문서를 읽어 보시기 바랍니다.


엑티비티를 Fragment 로 분할하기

Fragment 는 엑티비티 내의 특정 행위나 사용자 인터페이스의 일부분을 나타냅니다. 다시 말해, 엑티비티 내의 한 부분을 구성하는 모듈이라고 생각할 수 있습니다. 이 Fragment 는 고유한 라이프 사이클을 갖고, 독자적으로 Input 이벤트를 받으며, 엑티비티 동작중에 동적으로 추가되거나 삭제될 수 있습니다. Fragment 는 멀티 패널 UI 를 구성하거나, 여러 엑티비티에서 공통적으로 사용되는 부분을 재활용 할 수 있도록 도와주는 좋은 방법입니다. 안드로이드 개발팀은 개발자분들이 엑티비티를 만들 때 Fragment 를 사용할 것을 적극 권장하고 있습니다. 여러분은 보다 동적이고 유연한 사용자 인터페이스를 구성할 수 있을 것 입니다.


예를 들어, 뉴스 어플리케이션을 작성한다고 생각해 보겠습니다. 하나의 Fragment 는 기사 목록을 보여주고, 다른 하나의 Fragment 는 특정 기사의 본문 내용을 표시합니다. 메인 엑티비티는 두 개의 Fragment 로 이루어져 있으며, 왼편에는 기사의 목록을 보여주고, 오른편에는 선택한 기사의 본문 내용을 표시합니다. 두 개의 Fragment 는 자연스럽게 한 엑티비티에 동시에 표시 될 수 있으며, 각각 독립적인 라이프 사이클과 이벤트 처리 루틴을 갖을 수 있기 때문에, 개발자 분들은 손 쉽게 이런 어플리케이션을 구성할 수 있습니다. 또한, 보다 화면 크기가 작은 디바이스를 위한 레이아웃을 구성하고자 한다면, 필요한 경우에는 각각의 Fragment 를 개별적인 Activity 로 분리할 수 있습니다. 보다 상세한 정보가 필요하면 Fragment 문서를 살펴보시기 바랍니다.


새로운 애니매이션 API 를 사용하기

완전히 새롭게 변경된 애니메이션 프레임워크를 활용하면, 여러분은 특정 오브젝트(View, Drawable, Fragment, 기타 등등) 속성 값을 손 쉽게 변화시킬 수 있습니다. 기본적으로, 오브젝트의 특정 int , float, color 속성 값에 대하여, 이 값을 시간에 따라 변화 시키기 위한 애니매이션에 설정 값을(기간, 반복 여부, 인터폴네이션 등등) 정의할 수 있습니다. 그러면, 그 값이 어떤 값이던지 간에 지정된 애니매이션에 의해 시간이 지남에 따라 해당 값이 변경 됩니다.


View 클래스 또한 새로운 애니매이션 프레임워크를 조절할 수 있는 API 를 제공합니다. 개발자들은 엑티비티 내부의 View 대하여 손쉽게 2D / 3D 변환 애니매이션을 적용할 수 있습니다. 이러한 변환 애니매이션은 View 의 레이아웃 위치, 오리엔테이션, 투명도 등등의 값을 제어할 수 있습니다. 보다 상세한 정보는 Property Animation 문서를 참고하시기 바랍니다.


하드웨어 가속기능 사용하기

안드로이드 3.0 은 하드웨어 가속 OpenGL 랜더러 기능을 제공하며, 2D 그래픽 성능이 크게 향상될 수 있습니다. 메니페스트의 내의 <application> 혹은 개별 <activity> 들에 대하여, android:hardwareAccelerated="true" 속성 값을 사용하면, 하드웨어 가속 기능이 활성화 됩니다. 이렇게 되면, 애니매이션 및 스크롤이 보다 부드러워지고, 전체적인 어플리케이션 반응 속도가 향상 될 수 있습니다. 단, 이 기능을 사용하실 때는, 실재 하드웨어 가속 기능을 지원하는 디바이스 상에서 여러분의 어플리케이션이 어떤식으로 동작하는지 철저히 테스트 해 보시기 바랍니다. (주>하드웨어 특성에 따라 다양한 차이가 발생할 수 있을 듯 하네요.)


App Widget 개선하기

사용자는 App Widget 을 통해 어플리케이션 정보를 홈 스크린에서 바로 접근 하고, 앱과 상호 작용 할 수 있습니다. 안드로이드 3.0 에서는 App Widget 의 기능이 보다 향상되었는데, 기존에는 지원하지 않던 ListView 와 GridView 를 지원하며, 새로운 StackView 를 지원합니다. 이 위젯을 이용하여, 개발자 분들은 스크롤이 가능한 리스트 라던가, RemoteViewsService 를 통해 자동으로 데이타가 업데이트 되는 보다 인터렉티브한 app widget 을 작성할 수 있습니다.


또한, 사용자들이 App Widget 을 추가하고자 할 때, 해당 App Widget 이 어떻게 생겼는지 미리 확인 할 수 있도록 프리뷰 이미지를 제공해 주는 기능이 추가되었습니다. 이 기능을 위해 개발자 분들은 여러분이 작성한 App Widget 에 대한 프리뷰 이미지를 생성해야 합니다. 안드로이드 3.0 AVD 에 기본 탑재되어있는 Widget Preview 어플리케이션을 활용하시면 간편하게 프리뷰 이미지를 생성할 수 있으며, 생성한 이미지를 android:previewImage 속성으로 리퍼런스 하시면 됩니다.


그 외 기능들 활용하기

안드로이드 3.0 은 이 외에도 다양한 API 를 제공합니다. 예를 들어 Drag&Drap API, 새로운 Bluetooth API, 클립보드 프레임워크, Renderscript 라 불리는 새로운 그래픽 엔진등이 있습니다. 이런 API 들 중에 여러분의 어플리케이션에 유용한 API 가 있는지 잘 살펴볼 필요가 있습니다. 각각의 API 가 어떤 기능을 수행하는지 보다 자세히 알고 싶으시다면, Android 3.0 Platform 문서를 참고하시기 바랍니다.


샘플 예제 활용하기

허니콤에서 새롭게 추가된 기능들에 대한 샘플 어플리케이션이 제공되고 있습니다. AVD 매니저를 이용하여 "Samples for SDK API 11" 패키지를 설치하시면 <sdk_root>/samples/android-11/ 폴더에 저장됩니다. 다음의 개발자 사이트에 올라와 있는 샘플들에대한 소스 코드 링크입니다.

  • Honeycomb Gallery: Fragment, Action Bar, Drag&Drop, Animation 과 같은 다양한 안드로이드 3.0 API 사용법을 보여줍니다.
  • Fragments: Fragment 레이아웃, Back Stack, 상태 값 저장하기 등등 Fragment 관련된 다양한 예제가 준비되어 있습니다.
  • Action Bar: Tab, Logo, Action Item 같은 다양한 Action Bar 기능을 활용하는 예제가 포함되어 있습니다.
  • Clipboard: 잘라내기&복사하기 기능을 위해 Clipboard 를 활용한 예제입니다.
  • Drag and Drop: 새로운 View 이벤트를 통해 Drag&Drop 를 수행하는 예제입니다.
  • Multi-choice List: ListView 와 GridView 를 사용하여 여러 아이템을 선택하는 예제 입니다.
  • Content Loaders: 비동기적으로 데이터를 로드할 수 있는 새로운 Loader API 를 활용한 예제 입니다.
  • Property Animation: 오브젝트의 속성 값을 조절하는 새로운 애니메이션 API 를 활용한 몇몇 샘플이 제공됩니다.
  • Search View Widget: Action Bar 안에 새로운 Search Widget 를 활용한 예제입니다.
  • Renderscript: 계산과 3D 그래픽을 위하여 Renderscript API 를 활용한 몇가지 어플리케이션을 포함하고 있습니다.