หากคุณเป็นนักพัฒนา 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 พาร์ติชั่นอย่างละเอียดเพื่อให้แน่ใจว่าทุกอย่างถูกต้อง – ไฟล์ถูกลบ ฯลฯ บางทีคุณอาจมีการพิมพ์ผิดในชื่อไฟล์และไม่ได้ถูกลบ มันเกิดขึ้น