Computer >> Hướng Dẫn Máy Tính >  >> Xử Lý Sự Cố >> Android

Hướng dẫn tạo Flashable Zip cho System Mods trên Android

Nếu bạn là nhà phát triển Android muốn tạo app dành cho phân vùng /system (như app root), có lúc bạn cần tạo file .zip flashable cho app. Điều này giúp các file app được cài đặt đúng cách vào phân vùng /system.

Một số trường hợp khác dùng flashable .zip:

  • Sửa đổi DPI
  • Áp dụng font tùy chỉnh
  • Áp dụng boot animation tùy chỉnh
  • Xóa hoặc thêm system app

Yêu cầu user tự mò file system và di chuyển file thủ công là lãng phí thời gian cho tất cả - tạo flashable .zip tiện lợi hơn nhiều. Hướng dẫn này sẽ chỉ cách tạo flashable zip cho Android.

Chúng tôi cũng sẽ chỉ addon.d script, giúp thay đổi system tùy chỉnh tồn tại sau dirty flash ROM - user không cần re-flash zip mỗi lần cập nhật.

Yêu cầu:

  • Root file explorer (MiXplorer, Solid Explorer)
  • ZipSigner (ký zip) hoặc MiX Signer plugin nếu dùng MiXplorer
  • Nandroid backup rất khuyến nghị

Bạn cũng nên chuẩn bị sẵn các file sẽ đưa vào zip - APK, config, boot animation, v.v. Sắp xếp mọi thứ trước khi bắt đầu, vì đây là quy trình tinh vi.

Template của Custom Zip

Nếu muốn tải template zip để tùy chỉnh hoặc làm base tạo flashable zip, có thể lấy tại:

  • TEMPLATE SCRIPT: DOWNLOAD LINK (lệnh cơ bản / tự thêm giá trị tùy chỉnh: app, đường dẫn ringtone, bootanimation...)
  • TEMPLATE ZIP: DOWNLOAD LINK (ví dụ luôn giúp hiểu rõ giải thích. Giúp hiểu cách cấu trúc file).

Template đủ để bắt đầu dùng custom script.

Cần nhớ các đường dẫn chính, vì đây là những thứ trong phân vùng /system mà flashable zip thường nhắm đến:

addon.d => backup script để sống sót sau dirty flash (dùng bởi GApps package)
app and priv-app => system app để thêm hoặc xóa
etc => host file
fonts => font của bạn
media => bootanimation.zip của bạn
media > audio > alarms => âm thanh báo thức
media > audio > notifications => âm thanh thông báo
media > audio > ringtones => âm thanh chuông
media > audio > ui => âm thanh cho pin yếu, unlock, camera...
root của /system cho file build.prop

Luôn nhớ: file bị xóa từ các đường dẫn này sẽ được cài lại sau dirty flash, và file thêm thủ công sẽ bị xóa. Do đó cần tạo script backup /system mods.

Ví dụ Update-Script

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.");

Lưu ý: ui_print(" "); dùng để hiển thị thông báo. Các dòng này không thực thi hành động.

Luôn unmount và re-mount phân vùng trước khi làm việc trên nó.

run_program("/sbin/busybox", "umount", "/system");
run_program("/sbin/busybox", "mount", "/system");

Để xóa component/app hệ thống, thêm dấu phẩy cuối mỗi dòng, trừ dòng cuối.

delete_recursive( "/system/app/adaway.apk", "/system/app/AdAway", ........................ "/system/priv-app/WeatherProvider", "/system/priv-app/Tag" );

Giải nén file system bạn muốn cài đặt.

package_extract_dir("system", "/system/");

Set quyền file.

set_perm(0, 0, 0755, "/system/addon.d/99-dirty.sh");
.............. set_perm(0, 0, 0644, "/system/priv-app/V4A-Magisk.apk");

Làm tương tự cho thư mục /data. Mount partition, extract data, set permissions.

run_program("/sbin/busybox", "mount", "/data");
package_extract_dir("data", "/data/");
set_perm(0, 0, 0755, "/data/local/afscript.sh");

Tiếp theo unmount các partition đã sửa đổi.

run_program("/sbin/busybox", "umount", "/data");
run_program("/sbin/busybox", "umount", "/system");

Ví dụ Addon.D script

#!/sbin/sh
#
# /system/addon.d/99-dirty.sh
# /system được format và cài lại, sau đó các file này được khôi phục.
.
/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

Tạo danh sách file bạn muốn giữ sau dirty flash.

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 các file bạn không muốn cài lại sau dirty flash (file hệ thống bạn xóa trong mod sẽ được cài lại từ dirty flash)

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 ;; 

Cách tạo Flashable Android Zip

 

Chúng ta sẽ dùng MiXplorer, vì đây là root explorer và file manager tốt nhất cho Android, không bàn cãi.

  1. Chọn tất cả thư mục sẽ đưa vào zip, chọn Archive.
    Hướng dẫn tạo Flashable Zip cho System Mods trên Android
  2. Xác nhận tạo archive, đặt tên và chọn Store.
    Hướng dẫn tạo Flashable Zip cho System Mods trên Android
  3. Flashable zip đã tạo, chọn file zip và Sign (dùng MiX signer plugin).
  4. Chọn TestKey để kiểm tra lỗi chữ ký.
  5. Bây giờ có thể flash zip - khuyến nghị move vào /SDcard để dễ tìm từ custom recovery.

Ghi chú cuối

Flashable zip cần cài sau clean flash, hoặc sau khi wipe /system và dirty flash ROM. Updater-script sẽ xóa và thêm file system bạn chỉ định - nhưng đừng đụng addon.d script, nó sẽ tự làm việc mà không cần can thiệp.

Sau cài đặt lần đầu, kiểm tra kỹ phân vùng /system đảm bảo mọi thứ đúng - file đã xóa, v.v. Có thể bạn typo tên file nên không bị xóa, chuyện này hay xảy ra.