Computer >> 컴퓨터 >  >> 문제 해결 >> Android

안드로이드 내비게이션 바 홈 키에 움직이는 GIF 애니메이션 적용하는 방법

안드로이드 커뮤니티의 재능 있는 개발자들이 내비게이션 바의 홈 키를 애니메이션 GIF로 교체하는 방법을 알아냈습니다. 이 가이드에서는 그 과정을 단계별로 자세히 소개합니다.

안드로이드 내비게이션 바 홈 키에 움직이는 GIF 애니메이션 적용하는 방법

주의: 이 작업은 상당히 복잡한 과정입니다. SystemUI.apk를 디컴파일하고 핵심 시스템 파일을 수정한 뒤 다시 컴파일해야 합니다. 만약의 사태에 대비해 반드시 원본 SystemUI.apk를 백업해 두세요!

관련 가이드

  • 안드로이드 시스템 UI 테마 수동으로 적용하는 방법
  • 안드로이드 APK 디컴파일 및 테마 적용 방법
  • 순정 ROM에서 APK 디오덱스(Deodex)하는 방법

준비물

  • 루팅된 안드로이드 스마트폰 (루팅 관련 가이드도 함께 참고하세요!)
  • APK 디컴파일 도구 (APK Easy Tool을 추천합니다)
  • Notepad++ 같은 코드 편집기

1단계: SystemUI.apk 디오덱스 및 디컴파일하기

가장 먼저 할 일은 SystemUI.apk를 디오덱스(deodex)하는 것입니다. Tickle My Android 같은 도구를 활용하면 편리하며, 구체적인 절차는 APK 디오덱스 관련 가이드를 참고하세요.

다음으로 SystemUI.apk를 디컴파일해야 합니다. 처음 해보신다면 다소 어렵게 느껴질 수 있지만, "안드로이드 시스템 UI 테마 수동으로 적용하는 방법" 가이드에 디컴파일 절차가 자세히 정리되어 있으니 참고하시기 바랍니다.

2단계: SMALI 파일 추가하기

이제 새로운 smali 파일을 추가해야 합니다. 우리가 필요로 하는 기능에 맞게 이미 수정된 .smali 파일 팩이 배포되어 있으니 이를 다운로드하세요. 특히 ZIP 파일에서 "SelfAnimatingImageView.smali" 파일을 추출한 뒤, 디컴파일된 APK의 아래 경로에 넣어야 합니다.

SystemUI.apk\smali\com\android\morningstar\

해당 폴더가 존재하지 않는다면 직접 생성해 주면 됩니다.

3단계: GIF를 프레임 단위 PNG로 분할하기

이번에는 내비게이션 바 홈 버튼으로 사용할 마음에 드는 애니메이션 GIF를 찾아야 합니다. 이때 Giphy.com/stickers에서 제공하는 스티커 GIF를 사용하는 것이 좋습니다. 스티커 GIF는 PNG처럼 배경이 투명하지만 실제로는 GIF 형식이기 때문입니다.

원하는 스티커 GIF를 저장했다면, 이것을 연속된 PNG 이미지 시리즈로 변환해야 합니다. 수정된 SystemUI는 GIF 파일을 직접 재생하지 않고 PNG 프레임을 순서대로 보여주는 방식으로 동작하기 때문입니다. 다행히 EZGIF Split 같은 온라인 변환기를 이용하면 아주 간단하게 분할할 수 있습니다.

안드로이드 내비게이션 바 홈 키에 움직이는 GIF 애니메이션 적용하는 방법

GIF를 EZGIF Split에 업로드한 후, Split Options 드롭다운 메뉴에서 "Output images in PNG format(PNG 형식으로 출력)"을 선택하면 모든 프레임이 순서대로 추출됩니다. 이후 프레임들을 ZIP 파일로 한 번에 내려받으면 됩니다.

안드로이드 내비게이션 바 홈 키에 움직이는 GIF 애니메이션 적용하는 방법

분할된 PNG 프레임들을 디컴파일된 SystemUI APK 폴더 내 알맞은 "drawable-xxxDPI" 폴더에 넣어야 합니다. 어떤 폴더를 사용할지는 기기의 DPI에 따라 달라지며, 기준은 다음과 같습니다.

  • MDPI = 약 160 DPI
  • HDPI = 약 240 DPI
  • XHDPI = 약 320 DPI
  • XXHDPI = 약 480 DPI
  • XXXHDPI = 약 640 DPI

다음으로 안드로이드에게 어떤 이미지를 어떤 속도로 재생할지 지시하는 XML 파일이 필요합니다. 앞서 내려받은 ZIP 파일에서 "frame_anim.xml"을 꺼내 디컴파일된 APK의 "res\drawable" 폴더에 복사하세요.

Notepad++로 frame_anim.xml을 열면 아래와 같은 구조로 되어 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<animation-list android:oneshot="false"
  xmlns:android="https://schemas.android.com/apk/res/android">
    <item android:duration="100" android:drawable="@drawable/frame_0" />
    <item android:duration="100" android:drawable="@drawable/frame_1" />
    <item android:duration="100" android:drawable="@drawable/frame_2" />
    <item android:duration="100" android:drawable="@drawable/frame_3" />
</animation-list>

<item으로 시작하는 각 줄이 순서대로 재생되는 프레임을 의미합니다. 따라서 분할한 GIF의 프레임 개수에 맞춰 줄을 추가하거나 삭제해 주면 됩니다.

4단계: 내비게이션 바에 애니메이션 적용하기

SystemUI.apk를 다시 컴파일하기 전에 마지막으로, 만든 애니메이션을 내비게이션 바에 배치해야 합니다. 레이아웃 XML 파일을 수정해야 하기 때문에 조금 까다로운 부분입니다.

대부분의 순정 ROM에서는 홈 내비게이션 소프트키를 제어하는 코드가 "layout\navigation_bar.xml"에 있지만, ROM에 따라 "layout\home.xml"에 있을 수도 있습니다. 자신의 ROM에 맞게 해당 파일을 찾아야 합니다.

찾아야 할 파일은 아래와 비슷한 코드를 포함한 레이아웃 XML입니다.

<com.android.systemui.statusbar.policy.KeyButtonView android:layout_gravity="center"
android:id="@id/home_button" android:layout_width="0.0dip" android:layout_height="0.0dip"
android:scaleType="center" android:contentDescription="@string/accessibility_home" systemui:keyCode="3" />

home_button 또는 이와 유사한 표현이 보인다면 올바른 XML 파일에 도달한 것입니다. 이제 해야 할 일은 기존 홈 키를 숨기고, 같은 크기의 투명한 새 버튼을 그 자리에 배치한 뒤, 그 아래에 애니메이션 프레임을 깔아주는 것입니다. 생각보다 간단하며, FrameLayout 코드 하나만 있으면 됩니다.

<FrameLayout android:layout_width="@dimen/navigation_key_width" android:layout_height="fill_parent">
    <com.android.systemui.statusbar.policy.KeyButtonView android:layout_gravity="center" android:layout_width="@dimen/navigation_key_width" android:layout_height="fill_parent" android:src="@drawable/transparent" android:scaleType="center" android:contentDescription="@string/accessibility_home" systemui:keyCode="3" />
    <com.android.systemui.statusbar.policy.KeyButtonView android:layout_gravity="center" android:id="@id/home_button" android:layout_width="0.0dip" android:layout_height="0.0dip" android:scaleType="center" android:contentDescription="@string/accessibility_home" systemui:keyCode="3" />
    <com.android.systemui.morningstar.SelfAnimatingImageView android:layout_gravity="center" android:id="@+id/frame_animation" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/frame_anim" />
</FrameLayout>

이 코드를 살펴보면 세 가지 요소가 겹쳐져 있는 구조임을 알 수 있습니다. 하지만 실제 실행 화면에서는 겹친 구조가 보이지 않고, 내비게이션 바 홈 키 위치에 애니메이션 GIF만 나타납니다.

따라서 기존 홈 소프트키 코드 줄을 위 FrameLayout 코드로 교체하면 됩니다. 다만 사용하는 ROM에 따라 일부 수정이 필요할 수 있으며, 이 부분은 약간의 시행착오가 필요합니다.

5단계: APK 재컴파일 및 플래싱하기

이제 수정된 APK를 다시 컴파일할 준비가 되었습니다. APK Easy Tool을 사용해 SystemUI.apk를 재컴파일한 뒤, 기기를 리커버리 모드로 진입해 플래싱하세요. 리커버리 모드에서 작업해야 하는 이유는 Dalvik 캐시를 초기화해야 새로 추가한 smali 파일이 정상적으로 활성화되기 때문입니다.

모든 과정이 순조롭게 끝났다면, 내비게이션 바의 홈 키가 멋진 애니메이션 GIF로 바뀐 것을 확인할 수 있습니다!