นักพัฒนาบางท่านในชุมชน Android ได้ค้นพบวิธีปรับแต่ง Navigation Bar ให้ใช้ .gif แบบเคลื่อนไหวเป็นปุ่ม Home และ Appuals มีคำแนะนำสำหรับทำได้!

คำเตือน: นี่คือกระบวนการที่ค่อนข้างซับซ้อน คุณต้อง decompile SystemUI.apk แก้ไขไฟล์สำคัญ และ recompile กลับ ควรสำรอง SystemUI.apk ก่อนลองทำ!
คำแนะนำที่เกี่ยวข้องจาก Appuals:
- วิธีปรับธีม Android System UI ด้วยตนเอง
- วิธี Decompile และ Theme Android APKs
- วิธี Deodex APKs บน Stock ROMs
ข้อกำหนดเบื้องต้น:
- โทรศัพท์ Android ที่รูทแล้ว (Appuals มีคำแนะนำรูท Android มากมาย!)
- เครื่องมือ decompile APK (แนะนำ APK Easy Tool)
- โปรแกรมแก้ไขโค้ดที่ดี เช่น Notepad++
Decompile SystemUI.apk
ขั้นแรกต้อง deodex SystemUI.apk สามารถใช้เครื่องมืออย่าง Tickle My Android อ่านคำแนะนำของ Appuals เกี่ยวกับการ deodex APKs สำหรับกระบวนการนี้
ขั้นตอนต่อไปคือ decompile SystemUI.apk ซึ่งต้องมีคำแนะนำแยกต่างหากหากไม่เคยทำมาก่อน โชคดีที่ Appuals มี "วิธีปรับธีม Android System UI ด้วยตนเอง" พร้อมคำแนะนำ decompile ให้อ่านหากไม่เคย decompile APK มาก่อน
เพิ่มไฟล์ SMALI
ตอนนี้ต้องเพิ่มไฟล์ smali ใหม่ มีแพ็กของไฟล์ .smali ที่แก้ไขแล้วสำหรับสิ่งที่เราต้องการทำที่นี่ โดยเฉพาะต้องแยกไฟล์ "SelfAnimatingImageView.smali" จาก .zip และเพิ่มลงใน APK ที่ decompile แล้วในไดเรกทอรี:
SystemUI.apk\smali\com\android\morningstar\
คุณต้องสร้างโฟลเดอร์เหล่านี้หากยังไม่มี
แยก GIF เป็นเฟรม
ตอนนี้ต้องหา .gif แบบเคลื่อนไหวที่ชอบและต้องการใช้เป็นปุ่ม home บน navbar ควรใช้ sticker gif เช่นที่หาได้จาก Giphy.com/stickers - จะสังเกตว่ามีพื้นหลังโปร่งใสเหมือน PNG แต่เป็น GIF จริงๆ
เมื่อเซฟ sticker GIF ที่ชอบแล้ว ต้องแปลงเป็นชุด PNGs เนื่องจาก SystemUI ที่ปรับแต่งแล้วจะไม่รัน .gif โดยตรง แต่จะเล่น PNGs ตามลำดับ ดังนั้นต้องแยก .gif เป็น PNGs ตามลำดับ สามารถทำได้ง่ายด้วย online converter เช่น EZGIF Split

เพียงอัปโหลด GIF ไปที่ EZGIF Split tool เลือก "Output images in PNG format" จากเมนู dropdown Split Options จะแยกเฟรมทั้งหมดตามลำดับ จากนั้นดาวน์โหลดเฟรมทั้งหมดรวมในไฟล์ ZIP

ตอนนี้ต้องเพิ่ม PNG frames จาก GIF ที่แยกแล้วไปที่โฟลเดอร์ "drawable-xxxDPI" ที่เหมาะสมในโฟลเดอร์ SystemUI apk ที่ decompile แล้ว โฟลเดอร์ที่ใช้ขึ้นอยู่กับ DPI ของอุปกรณ์:
- MDPI = ~160 DPI
- HDPI = ~240 DPI
- XHDPI = ~320 DPI
- XXHDPI = ~480 DPI
- XXXHDPI = ~640 DPI
ตอนนี้ต้องมีไฟล์ XML ที่บอก Android ว่าใช้รูปภาพไหนสำหรับแอนิเมชัน และความเร็วในการเล่น กลับไปที่ ZIP ที่ดาวน์โหลดก่อนหน้านี้ หา "frame_anim.xml" และคัดลอกไปที่โฟลเดอร์ "res\drawable" ภายใน APK ที่ decompile แล้ว
หากเปิด frame_anim.xml ใน Notepad++ จะเห็นประมาณนี้:
<?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 ที่แยกเป็น PNG แยกต่างหาก
และสุดท้าย ก่อนที่จะ recompile SystemUI.apk ต้องวางแอนิเมชันของเราลงใน navbar นี่ค่อนข้าง tricky เพราะเราจะ edit layout XML file ใน stock ROMs ส่วนใหญ่ โค้ดควบคุมปุ่ม HOME navbar softkey อยู่ที่ "layout\navigation_bar.xml" แต่อาจอยู่ที่ "layout\home.xml" ต้องค้นหาตาม ROM ของคุณ
โดยพื้นฐานคุณกำลังมองหา layout XML file ที่มีโค้ดแบบนี้:
<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" />
คุณจะรู้ว่าอยู่ใน XML file ที่ถูกต้องเมื่อเห็นบรรทัดที่อ้างอิง home_button หรือคล้ายกัน สิ่งที่เราต้องทำคือ ซ่อน ปุ่ม HOME นี้ และวางปุ่มใหม่แทนที่มีขนาดเท่ากัน แต่อโปร่ง และเฟรมแอนิเมชันของเราจะอยู่ใต้มัน นี่ค่อนข้างง่าย ต้องการแค่โค้ด 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 แบบเคลื่อนไหวของคุณที่ตำแหน่งปุ่ม HOME บน navbar
ดังนั้นสิ่งที่ต้องทำคือแทนที่บรรทัดโค้ด HOME softkey ด้วยโค้ด FrameLayout ข้างต้น แต่อาจต้องปรับเล็กน้อยสำหรับ ROM เฉพาะของคุณ ต้องลองผิดลองถูกบ้าง
Recompile APK และแฟลช
ตอนนี้พร้อม recompile modded APK แล้ว ใช้ APK Easy Tool recompile SystemUI.apk และแฟลชใน recovery mode บนอุปกรณ์ สำคัญที่ต้องทำใน recovery mode เพราะต้อง wipe Dalvik cache ไม่งั้นไฟล์ smali ใหม่ที่เพิ่มจะไม่ถูกเปิดใช้งาน
หากทุกอย่าง顺利 คุณควรจะเห็น GIF แบบเคลื่อนไหวเป็นปุ่ม home navbar ใหม่!