Android/Framework

Android 시스템 최적화

임베디드 친구 2025. 4. 23. 16:45
728x90
반응형

Android 시스템 최적화

Android 시스템은 다양한 하드웨어와 소프트웨어 환경에서 실행되기 때문에 최적화를 통해 성능을 극대화하는 것이 중요합니다. 본 글에서는 Android 시스템의 성능을 최적화하는 주요 기법을 다룹니다. 특히, 프로파일링을 통한 성능 개선, 전원 관리 및 배터리 최적화, 부팅 속도 최적화 방법을 중심으로 설명하겠습니다.

1. 프로파일링을 통한 성능 개선

프로파일링은 애플리케이션 및 시스템의 성능을 분석하고 병목 현상을 찾아내는 중요한 과정입니다. Android에서는 여러 프로파일링 도구를 제공하며, 이를 활용하여 성능을 개선할 수 있습니다.

1.1 Android Profiler

Android Profiler는 Android Studio에서 제공하는 성능 분석 도구로, 다음과 같은 기능을 제공합니다.

  • CPU Profiler: 애플리케이션의 CPU 사용량을 측정하고, 스레드 활동을 분석합니다.
  • Memory Profiler: 메모리 사용량을 추적하고, 메모리 누수 및 GC(Garbage Collection) 활동을 분석합니다.
  • Network Profiler: 네트워크 요청 및 응답 시간을 확인하여 최적화할 수 있습니다.
  • Energy Profiler: 애플리케이션이 소비하는 전력을 분석합니다.

1.2 Systrace

Systrace는 Android에서 제공하는 시스템 수준의 프로파일링 도구로, 다음과 같은 분석이 가능합니다.

  • CPU 스케줄링 및 스레드 활동
  • 시스템 콜 및 이벤트 추적
  • 프레임 렌더링 시간 분석

Systrace 실행 예제

adb shell atrace --async_start -c -t 10 gfx view sched
adb shell atrace --async_stop > trace.html

1.3 Perfetto

Perfetto는 최신 Android 버전에서 지원하는 고급 트레이싱 도구로, 다음과 같은 기능을 제공합니다.

  • 장기간의 시스템 트레이스 지원
  • 고해상도 이벤트 로깅
  • 웹 인터페이스를 통한 분석

Perfetto는 adb 명령을 사용하여 실행할 수 있습니다.

adb shell perfetto --txt -c /data/misc/perfetto-configs/example_config.pbtxt -o /data/misc/perfetto-traces/trace.pftrace

2. 전원 관리 및 배터리 최적화

Android 시스템에서는 배터리 수명을 연장하기 위해 다양한 전력 관리 기법을 적용하고 있습니다.

2.1 Doze 모드

Doze 모드는 기기가 오랫동안 사용되지 않을 때 배터리 소모를 줄이는 기능입니다. Doze 모드는 다음과 같은 단계로 동작합니다.

  • Light Doze: 네트워크 액세스 및 일부 작업이 제한됩니다.
  • Deep Doze: 대부분의 작업이 중지되며, 주기적으로 깨어나서 동기화 작업을 수행합니다.

Doze 모드 활성화 확인

adb shell dumpsys deviceidle

2.2 App Standby

사용하지 않는 애플리케이션이 백그라운드에서 불필요한 리소스를 소비하지 않도록 제한하는 기능입니다. adb 명령을 사용하여 특정 앱의 대기 상태를 확인할 수 있습니다.

adb shell am get-inactive <package_name>

2.3 Battery Historian

Battery Historian은 배터리 사용 기록을 분석할 수 있는 도구로, bugreport 데이터를 이용하여 애플리케이션의 배터리 소모 패턴을 분석할 수 있습니다.

adb bugreport > bugreport.zip

Battery Historian 웹 도구를 이용하여 bugreport를 분석할 수 있습니다.

3. 부팅 속도 최적화

Android 기기의 부팅 속도를 최적화하는 것은 사용자 경험에 중요한 영향을 미칩니다. 다음과 같은 방법을 통해 부팅 속도를 향상할 수 있습니다.

3.1 부팅 프로세스 이해

Android 부팅 과정은 크게 다음과 같이 나뉩니다.

  1. 부트로더 단계: 기기의 펌웨어가 초기화되고, 커널을 로드합니다.
  2. 커널 단계: Android 커널이 초기화됩니다.
  3. init 단계: 시스템 서비스가 시작됩니다.
  4. Zygote 단계: 앱 프로세스를 생성하는 Zygote가 실행됩니다.
  5. System Server 단계: Android 시스템 서비스가 시작됩니다.
  6. Launcher 단계: 홈 화면이 표시됩니다.

3.2 init 스크립트 최적화

init 스크립트(init.rc)를 최적화하면 부팅 시간을 줄일 수 있습니다. 불필요한 서비스 실행을 지연하거나 제거하는 것이 중요합니다.

service example_service /system/bin/example
    class late_start
    disabled

위의 설정은 example_servicelate_start 클래스로 지정하여 부팅 후 일정 시간이 지나고 나서 실행되도록 합니다.

3.3 Zygote 최적화

Zygote는 애플리케이션 프로세스를 생성하는 역할을 합니다. 불필요한 라이브러리를 미리 로드하지 않도록 설정하면 성능을 개선할 수 있습니다.

setprop persist.device_config.runtime_native_boot.zygote_critical_window 0

3.4 Bootchart를 활용한 분석

Bootchart를 사용하면 부팅 과정에서 실행되는 프로세스를 시각적으로 분석할 수 있습니다.

adb shell stop
adb shell setprop dev.bootchart true
adb shell start

이후 /data/bootchart/ 디렉토리에서 부팅 로그를 확인할 수 있습니다.

결론

본 글에서는 Android 시스템 최적화를 위해 프로파일링 기법, 전원 관리 최적화, 부팅 속도 개선 방법을 살펴보았습니다. 적절한 프로파일링을 통해 성능 병목을 파악하고, 불필요한 전력 소모를 줄이며, 부팅 속도를 최적화하면 Android 기기의 성능을 향상시킬 수 있습니다. 이를 통해 보다 원활한 사용자 경험을 제공할 수 있습니다.

반응형

'Android > Framework' 카테고리의 다른 글

커널 로그 분석 및 디버깅  (0) 2025.04.22
Android 디버깅 기법  (0) 2025.04.21
Android 디바이스 포팅  (0) 2025.04.20
AOSP 소스 코드 수정 및 커스텀 기능 추가  (0) 2025.04.19
AOSP 빌드 및 환경 설정  (0) 2025.04.17