หากคุณเป็นนักพัฒนา Android ที่ต้องการสร้างแอปสำหรับพาร์ติชั่นระบบ / (เช่น แอปรูท) มีบางกรณีที่คุณต้องการสร้างไฟล์ .zip แบบแฟลชได้สำหรับแอปของคุณ เพื่อให้สามารถติดตั้งไฟล์แอปในพาร์ติชั่น /system ได้อย่างเหมาะสม
การใช้ไฟล์ .zip แบบแฟลชได้อื่นๆ อีกสองสามรายการ ได้แก่:
- การปรับเปลี่ยน DPI
- การใช้แบบอักษรที่กำหนดเอง
- การใช้แอนิเมชั่นการบูตแบบกำหนดเอง
- การลบหรือเพิ่มแอประบบ
การแนะนำให้ผู้ใช้จัดการระบบไฟล์และย้ายไฟล์ด้วยตนเองเป็นการเสียเวลาสำหรับทุกคนที่เกี่ยวข้อง การสร้างไฟล์ .zip แบบ flashable เป็นวิธีที่สะดวกกว่ามาก คู่มือ Appual นี้จะแสดงวิธีสร้างไฟล์ zip แบบ flashable สำหรับ Android
นอกจากนี้ เราจะแสดงสคริปต์ addon.d ให้คุณดู เพื่อให้การเปลี่ยนแปลงระบบแบบกำหนดเองจะรอดจากแฟลช ROM ที่สกปรก ดังนั้น ผู้ใช้จึงไม่จำเป็นต้องแฟลช zip ของคุณอีกครั้งสำหรับการอัปเดตแต่ละครั้ง
ข้อกำหนด:
- ตัวสำรวจไฟล์รูท (MiXplorer, Solid Explorer)
- ZipSigner (สำหรับการเซ็นชื่อใน zip) หรือปลั๊กอิน MiX Signer หากคุณใช้ MixPlorer
- ขอแนะนำให้ใช้การสำรองข้อมูล Nandroid
คุณควรเตรียมไฟล์ทั้งหมดที่จะไปอยู่ในไฟล์ zip เช่น APK, configs, boot animations ฯลฯ จัดระเบียบทุกอย่างก่อนที่เราจะเริ่ม เพราะนี่เป็นกระบวนการที่ละเอียดอ่อน
เทมเพลตของ Zip แบบกำหนดเอง
หากคุณต้องการดาวน์โหลดเทมเพลต zip ที่คุณสามารถปรับแต่งตามความต้องการของคุณเอง หรือใช้เป็นฐานสำหรับสร้างไฟล์ zip แบบแฟลชได้ คุณสามารถคว้ามันได้ที่นี่:
- สคริปต์เทมเพลต: ลิงก์ดาวน์โหลด (คำสั่งพื้นฐาน / คุณต้องเพิ่มค่าที่กำหนดเอง:แอป เส้นทางเสียงเรียกเข้า แอนิเมชั่นการบูต…)
- TEMPLATE ZIP: ลิงก์ดาวน์โหลด (ตัวอย่างสามารถเข้าใจคำอธิบายได้ดียิ่งขึ้นเสมอ ซึ่งช่วยให้เข้าใจวิธีจัดโครงสร้างไฟล์ของคุณ)
เทมเพลตควรเพียงพอที่จะเริ่มใช้สคริปต์ที่กำหนดเองได้
คุณจะต้องจำเส้นทางหลักเหล่านี้ เนื่องจากสิ่งเหล่านี้คือสิ่งที่อยู่ในพาร์ติชั่น /system ที่ไฟล์ zip แบบแฟลชได้ของคุณมักจะกำหนดเป้าหมาย:
addon.d => backup script to survive a dirty flash (used by GApps package for instance) app and priv-app => system apps to add or remove etc => host file fonts => your font media => your bootanimation.zip media > audio > alarms => sounds for alarms media > audio > notifications => sounds for notifications media > audio > ringtones => sounds for ringtones media > audio > ui => sounds for various things such as low battery, unlock, camera,.. root of /system for build.prop file
จำไว้เสมอว่าไฟล์ที่ถูกลบออกจากเส้นทางเหล่านี้จะถูกติดตั้งใหม่หลังจากแฟลชสกปรก และไฟล์ที่เพิ่มด้วยตนเองจะถูกลบออก นี่คือเหตุผลที่จำเป็นต้องสร้างสคริปต์ที่ทำการสำรองข้อมูลของ /system mods ของคุณ
ตัวอย่างสคริปต์อัปเดต
ui_print("+-------------------------------------+"); ui_print("| CLEAN FLASH SCRIPT |"); ui_print("| |"); ui_print("| by Primokorn |"); ui_print("+-------------------------------------+"); run_program("/sbin/busybox", "umount", "/system"); run_program("/sbin/busybox", "mount", "/system"); ui_print(" "); ui_print("***Deleting bloatwares***"); delete_recursive( "/system/app/adaway.apk", "/system/app/AdAway", "/system/app/BasicDreams", "/system/app/BookmarkProvider", "/system/app/Calendar", "/system/app/CalendarWidget", "/system/app/CMFileManager", "/system/app/CMWallpapers", "/system/app/DeskClock", "/system/app/Eleven", "/system/app/Email", "/system/app/ExactCalculator", "/system/app/Exchange2", "/system/app/Gello", "/system/app/HexoLibre", "/system/app/Jelly", "/system/app/LiveWallpapersPicker", "/system/app/LockClock", "/system/app/messaging", "/system/app/MiXplorer", "/system/app/NexusLauncher", "/system/app/Phonograph", "/system/app/PhotoTable", "/system/app/PicoTts", "/system/app/PicoTTS", "/system/app/ResurrectionStats", "/system/app/SoundRecorder", "/system/app/Terminal", "/system/app/TugaBrowser", "/system/app/Wallpaper", "/system/app/WallpaperPickerGoogle", "/system/priv-app/AudioFX", "/system/priv-app/Chrome", "/system/priv-app/Gallery2", "/system/priv-app/MusicFX", "/system/priv-app/OnePlusCamera", "/system/priv-app/OnePlusGallery", "/system/priv-app/OnePlusMusic", "/system/priv-app/Recorder", "/system/priv-app/Screencast", "/system/priv-app/Snap", "/system/priv-app/SnapdragonCamera", "/system/priv-app/SnapdragonGallery", "/system/priv-app/WeatherManagerService", "/system/priv-app/WeatherProvider", "/system/priv-app/Tag" ); ui_print("Installing apps and mods, etc"); show_progress(8.800000, 5); package_extract_dir("system", "/system/"); ui_print("***Fixing permissions***"); set_perm(0, 0, 0755, "/system/addon.d/99-dirty.sh"); set_perm(0, 0, 0644, "/system/etc/gps.conf"); set_perm(0, 0, 0644, "/system/fonts/Roboto-Regular.ttf"); set_perm(0, 0, 0644, "/system/media/audio/ringtones/PlasticRing.ogg"); set_perm(0, 0, 0644, "/system/priv-app/Phonesky.apk"); set_perm(0, 0, 0644, "/system/priv-app/microG.apk"); set_perm(0, 0, 0644, "/system/priv-app/Gsam.apk"); set_perm(0, 0, 0644, "/system/priv-app/BBS.apk"); set_perm(0, 0, 0644, "/system/priv-app/V4A-Magisk.apk"); run_program("/sbin/busybox", "mount", "/data"); package_extract_dir("data", "/data/"); set_perm(0, 0, 0755, "/data/local/afscript.sh"); show_progress(8.800000, 5); run_program("/sbin/busybox", "umount", "/data"); run_program("/sbin/busybox", "umount", "/system"); ui_print(" "); ui_print("Done."); ui_print("Ready to reboot.");
หมายเหตุ: ui_print(” “); สำหรับข้อความ บรรทัดเหล่านี้ไม่ได้ทำอะไรเลย
คุณควรยกเลิกการต่อเชื่อมและติดตั้งพาร์ติชั่นใหม่ทุกครั้งก่อนดำเนินการ
run_program("/sbin/busybox", "umount", "/system"); run_program("/sbin/busybox", "mount", "/system");
หากต้องการนำคอมโพเนนต์ของระบบ/แอปออก ให้ใส่เครื่องหมายจุลภาคต่อท้ายแต่ละบรรทัด ยกเว้นบรรทัดสุดท้าย
delete_recursive( "/system/app/adaway.apk", "/system/app/AdAway", ........................ "/system/priv-app/WeatherProvider", "/system/priv-app/Tag" );
แตกไฟล์ระบบที่คุณต้องการติดตั้ง
package_extract_dir("system", "/system/"); Set the file permissions. set_perm(0, 0, 0755, "/system/addon.d/99-dirty.sh"); .............. set_perm(0, 0, 0644, "/system/priv-app/V4A-Magisk.apk");
ทำสิ่งเดียวกัน แต่สำหรับโฟลเดอร์ /data ดังนั้นคุณจะเมานต์พาร์ติชั่น ดึงข้อมูลที่คุณต้องการเพิ่ม และตั้งค่าการอนุญาต
run_program("/sbin/busybox", "mount", "/data"); package_extract_dir("data", "/data/"); set_perm(0, 0, 0755, "/data/local/afscript.sh");
ถัดไป คุณจะยกเลิกการต่อเชื่อมพาร์ติชั่นที่แก้ไขแล้ว
run_program("/sbin/busybox", "umount", "/data"); run_program("/sbin/busybox", "umount", "/system");
ตัวอย่างสคริปต์ Addon.D
#!/sbin/sh # # /system/addon.d/99-dirty.sh # /system is formatted and reinstalled, then thes files are restored. # . /tmp/backuptool.functions list_files() { cat <<EOF addon.d/99-dirty.sh fonts/Roboto-Regular.ttf media/audio/ringtones/PlasticRing.ogg priv-app/BBS.apk priv-app/Gsam.apk priv-app/microG.apk priv-app/PhoneSky.apk priv-app/V4A-Magisk.apk etc/gps.conf etc/hosts EOF } case "$1" in backup) list_files | while read FILE DUMMY; do backup_file $S/"$FILE" done ;; restore) list_files | while read FILE REPLACEMENT; do R="" [ -n "$REPLACEMENT" ] && R="$S/$REPLACEMENT" [ -f "$C/$S/$FILE" ] && restore_file $S/"$FILE" "$R" done rm -rf /system/app/adaway.apk rm -rf /system/app/AdAway rm -rf /system/app/BasicDreams rm -rf /system/app/BookmarkProvider rm -rf /system/app/Calendar rm -rf /system/app/CalendarWidget rm -rf /system/app/CMFileManager rm -rf /system/app/CMWallpapers rm -rf /system/app/DeskClock rm -rf /system/app/Eleven rm -rf /system/app/Email rm -rf /system/app/ExactCalculator rm -rf /system/app/Exchange2 rm -rf /system/app/Gello rm -rf /system/app/HexoLibre rm -rf /system/app/Jelly rm -rf /system/app/LatinIME rm -rf /system/app/LiveWallpapersPicker rm -rf /system/app/LockClock rm -rf /system/app/messaging rm -rf /system/app/MiXplorer rm -rf /system/app/NexusLauncher rm -rf /system/app/Nova.apk rm -rf /system/app/Phonograph rm -rf /system/app/PhotoTable rm -rf /system/app/PicoTts rm -rf /system/app/PicoTTS rm -rf /system/app/ResurrectionStats rm -rf /system/app/SoundRecorder rm -rf /system/app/Terminal rm -rf /system/app/TugaBrowser rm -rf /system/app/Wallpaper rm -rf /system/app/WallpaperPickerGoogle rm -rf /system/priv-app/AudioFX rm -rf /system/priv-app/Chrome rm -rf /system/priv-app/Gallery2 rm -rf /system/priv-app/LatinIME rm -rf /system/priv-app/MusicFX rm -rf /system/priv-app/OnePlusCamera rm -rf /system/priv-app/OnePlusGallery rm -rf /system/priv-app/OnePlusMusic rm -rf /system/priv-app/Recorder rm -rf /system/priv-app/Screencast rm -rf /system/priv-app/SnapdragonCamera rm -rf /system/priv-app/SnapdragonGallery rm -rf /system/priv-app/Snap rm -rf /system/priv-app/Trebuchet rm -rf /system/priv-app/WeatherManagerService rm -rf /system/priv-app/WeatherProvider rm -rf /system/priv-app/Tag ;; pre-backup) # Stub ;; post-backup) # Stub ;; pre-restore) # Stub ;; post-restore) # Stub ;; esac
สร้างรายการไฟล์ที่คุณต้องการเก็บไว้หลังจากแฟลชสกปรก
list_files() { cat <<EOF addon.d/99-dirty.sh fonts/Roboto-Regular.ttf media/audio/ringtones/PlasticRing.ogg priv-app/BBS.apk priv-app/Gsam.apk priv-app/microG.apk priv-app/PhoneSky.apk priv-app/V4A-Magisk.apk etc/gps.conf etc/hosts EOF }
RM -RF ไฟล์ที่คุณไม่ต้องการติดตั้งหลังจากแฟลชสกปรก (ไฟล์ระบบที่คุณลบในการดัดแปลงของคุณซึ่งจะถูกติดตั้งใหม่จากแฟลชสกปรก)
rm -rf /system/app/adaway.apk rm -rf /system/app/AdAway rm -rf /system/app/BasicDreams rm -rf /system/app/BookmarkProvider ................................................ rm -rf /system/priv-app/WeatherProvider rm -rf /system/priv-app/Tag ;;
วิธีสร้าง Android Zip แบบ Flashable
เราจะใช้ MiXplorer สำหรับสิ่งนี้ เนื่องจากเป็นเครื่องมือสำรวจรูทและตัวจัดการไฟล์ที่ดีที่สุดสำหรับ Android
- ขั้นแรกให้เลือกโฟลเดอร์ทั้งหมดที่จะรวมอยู่ในไฟล์ zip แล้วเลือกเก็บถาวร
- ยืนยันการสร้างไฟล์เก็บถาวร ตั้งชื่อและเลือก Store
- ไฟล์ zip ที่แฟลชได้ของคุณจะถูกสร้างขึ้น ดังนั้นให้เลือกไฟล์ zip แล้วจึงลงชื่อ (โดยใช้ปลั๊กอินผู้ลงนาม MiX)
- ตอนนี้เลือก TestKey เพื่อตรวจสอบข้อผิดพลาดของลายเซ็น
- ขณะนี้คุณสามารถแฟลชไฟล์ zip ได้แล้ว แนะนำให้ย้ายไปที่ /SDcard เพื่อให้ค้นหาได้ง่ายจากการกู้คืนที่กำหนดเอง
หมายเหตุสุดท้าย
ไฟล์ zip แบบแฟลชได้ของคุณจะต้องติดตั้งหลังจากคลีนแฟลช หรือหลังจากล้างพาร์ติชั่น /system และทำแฟลช ROM ของคุณสกปรก updater-script จะลบและเพิ่มไฟล์ระบบที่คุณระบุในสคริปต์ของคุณ – แต่ปล่อยให้สคริปต์ addon.d เพียงอย่างเดียว เพราะมันจะทำงานโดยไม่มีการรบกวนจากคุณ
หลังจากการติดตั้งครั้งแรกของคุณ ให้ตรวจสอบ /system พาร์ติชั่นอย่างละเอียดเพื่อให้แน่ใจว่าทุกอย่างถูกต้อง – ไฟล์ถูกลบ ฯลฯ บางทีคุณอาจมีการพิมพ์ผิดในชื่อไฟล์และไม่ได้ถูกลบ มันเกิดขึ้น