A high-performance system-level module that brings the complete iOS auditory and visual experience to any rooted Android device.
iOS Sounds • iOS Emojis • SF Pro Display Font • Multi-Root Support
- Overview
- Features
- What's Included
- Compatibility
- Installation
- Architecture & Boot Lifecycle
- Script Details
- Project Structure
- OEM Emoji Support
- Meta / Facebook Emoji Fix
- Known Limitations
- OTA Updates
- Troubleshooting
- Changelog
- Credits
Sound_And_Emoji_IOS is a comprehensive Android root module that systemlessly replaces:
- All system sounds (UI, ringtones, notifications, alarms) with authentic iOS audio
- System-wide emojis with the latest iOS emoji font (including OEM-specific replacements)
- System typography with Apple's SF Pro Display font family
The module uses an intelligent multi-stage boot pipeline to ensure 100% persistence across reboots, ROM updates, and aggressive Google Play Services font re-downloads.
| Feature | Description |
|---|---|
| 🔊 Complete iOS Sound Set | 43 audio files covering UI, ringtones, notifications, alarms, camera, NFC, charging, and more |
| 😀 iOS Emoji Replacement | System-wide emoji override with latest iOS emoji font (~30MB high-res) |
| 🔤 SF Pro Display Font | 16 font weights (Regular to Ultralight, with Italic variants) |
| 🏭 OEM Detection | Auto-detects Samsung, Xiaomi, LG, HTC, OnePlus, Huawei emoji fonts |
| 📱 Dual-Path Installation | Installs to both /system/product/ and /system/media/ for max ROM compatibility |
| 🔒 SELinux Compliant | Full u:object_r:system_file:s0 context enforcement + custom SEPolicy rules |
| 🔄 Anti-Revert System | Blocks Google Play Services from re-downloading stock emoji fonts |
| 📘 Meta App Fix | Replaces Facebook, Instagram, and Messenger emoji with iOS versions |
| 🪵 Built-in Logging | Detailed service.log for debugging |
| ♻️ OverlayFS Support | Integrated support for magisk_overlayfs module |
| 🔁 Auto-Update | In-app update support via updateJson |
UI Sounds (30 files)
| Sound | File |
|---|---|
| Lock Screen | Lock.ogg |
| Unlock Screen | Unlock.ogg |
| Keyboard Standard | KeypressStandard.ogg |
| Keyboard Spacebar | KeypressSpacebar.ogg |
| Keyboard Delete | KeypressDelete.ogg |
| Keyboard Return | KeypressReturn.ogg |
| Keyboard Invalid | KeypressInvalid.ogg |
| Camera Click | camera_click.ogg, CameraClick.ogg |
| Camera Focus | camera_focus.ogg, CameraFocus.ogg |
| Screenshot | screenshot.ogg |
| Video Record Start | VideoRecord.ogg |
| Video Record Stop | VideoStop.ogg |
| Charging Started | ChargingStarted.ogg |
| Charging Stopped | ChargingStopped.ogg |
| Wireless Charging | WirelessChargingStarted.ogg |
| Low Battery | LowBattery.ogg |
| NFC Success | NFCSuccess.ogg |
| NFC Failure | NFCFailure.ogg |
| NFC Transfer Complete | NFCTransferComplete.ogg |
| NFC Transfer Initiated | NFCTransferInitiated.ogg |
| NFC Initiated | NFCInitiated.ogg |
| Smart Lock (Trusted) | Trusted.ogg |
| Dock | Dock.ogg |
| Undock | Undock.ogg |
| Volume Incremental | VolumeIncremental.ogg |
| Media Volume | Media_Volume.ogg |
| Effect Tick | Effect_Tick.ogg |
| In-Call Notification | InCallNotification.ogg |
Notifications (7 files)
| Sound | File |
|---|---|
| Default Message | IOSDefaultMessageNotification.ogg |
| Calendar Alert | IOSCalendarAlert.ogg |
| New Mail | IOSNewMail.ogg |
| Reminder Alert | IOSReminderAlert.ogg |
| Sent Message | IOSSentMessage.ogg |
| iOS Notification 0 | Ios Notification 0.ogg |
| iOS Notification 1 | Ios Notification 1.ogg |
Ringtones (3 files)
| Sound | File |
|---|---|
| Default (Reflection) | IOSDefaultRingtone.ogg |
| Reflection | IOSReflection.ogg |
| Sashimi | IOSSashimi.ogg |
Alarms (3 files)
| Sound | File |
|---|---|
| Default Alarm | IOSDefaultAlarm.ogg |
| Bedtime | IOSBedtimeAlarm.ogg |
| Nightstand | IOSNightstandAlarm.ogg |
| Font | Size | Purpose |
|---|---|---|
NotoColorEmoji.ttf |
~30 MB | System-wide emoji replacement (AOSP/Pixel) |
FacebookEmoji.ttf |
~30 MB | Meta apps emoji replacement (FB, IG, Messenger) |
| Weight | Regular | Italic |
|---|---|---|
| Ultralight | ✅ | ✅ |
| Thin | ✅ | ✅ |
| Light | ✅ | ✅ |
| Regular | ✅ | ✅ |
| Medium | ✅ | ✅ |
| Semibold | ✅ | ✅ |
| Bold | ✅ | ✅ |
| Heavy | ✅ | ✅ |
| Platform | Version | Status |
|---|---|---|
| Magisk | 20.0+ | ✅ Full Support |
| KernelSU | All | ✅ Full Support (requires metamodule) |
| KernelSU Next | 20000+ | ✅ Full Support (requires metamodule) |
| APatch | All | ✅ Full Support |
| Android | API | Status | Notes |
|---|---|---|---|
| Android 11 | API 30 | ✅ | Legacy path (/system/media/audio) |
| Android 12 | API 31 | ✅ | Product path (/system/product/media/audio) |
| Android 12L | API 32 | ✅ | — |
| Android 13 | API 33 | ✅ | — |
| Android 14 | API 34 | ✅ | resetprop fallback for ro.config.* |
| Android 15 | API 35 | ✅ | resetprop fallback for ro.config.* |
| Android 16 | API 36 | ✅ | resetprop fallback for ro.config.* |
Works on AOSP, Pixel, LineageOS, crDroid, EvolutionX, AxionOS, MIUI, HyperOS, OneUI, OxygenOS, ColorOS, and more.
Important
KernelSU / KernelSU Next users: You MUST install a metamodule (e.g., meta-overlayfs) for the module to mount files into /system/. The installer will warn you if none is detected.
- Download the latest
Sound_And_Emoji_IOS.zipfrom Releases - Open your root manager (Magisk Manager, KernelSU Manager, or APatch)
- Flash the
.zipvia the Modules → Install from storage option - Reboot your device
- Enjoy the iOS experience! 🎉
Note
The module clears the Gboard emoji cache during installation. You may notice a brief delay on the first keyboard launch after reboot while Gboard rebuilds its emoji index.
The module uses a sophisticated multi-stage boot pipeline to ensure everything works across all root solutions and Android versions:
graph TD
subgraph INSTALL["📥 Installation (customize.sh)"]
I1[Detect Root Environment] --> I2[Detect Android Version]
I2 --> I3{API ≥ 31?}
I3 -- Yes --> I4["/system/product/media/audio"]
I3 -- No --> I5["Mirror to /system/media/audio"]
I4 --> I6[Detect OEM Fonts]
I5 --> I6
I6 --> I7[Clear Gboard Cache]
I7 --> I8[Set SELinux Contexts]
I8 --> I9[Apply Permissions]
end
subgraph BOOT1["🔒 post-fs-data.sh (Pre-Mount)"]
B1["Nuke font caches:<br/>/data/fonts<br/>GMS fonts<br/>Gboard emoji<br/>Messenger fonts"]
end
subgraph BOOT2["📁 post-mount.sh (After OverlayFS)"]
B2[Replace ALL *emoji*.ttf in /data] --> B3[Lock Meta app emojis]
B3 --> B4[Block Messenger font downloads]
B4 --> B5[Clean GMS font caches]
end
subgraph BOOT3["⚙️ service.sh (Late Start)"]
B6[Wait for boot_completed] --> B7[Clear Gboard cache]
B7 --> B8["Force resetprop ro.config.*"]
B8 --> B9[Replace ALL emoji fonts globally]
B9 --> B10[Lock Meta emoji + chattr +i]
B10 --> B11[Disable GMS Font Provider]
B11 --> B12["Media Scanner (Magisk only)"]
end
subgraph BOOT4["✅ boot-completed.sh (KSU/APatch)"]
B13["Force resetprop ro.config.*"] --> B14[Media Scanner broadcast]
end
INSTALL --> BOOT1
BOOT1 --> BOOT2
BOOT2 --> BOOT3
BOOT3 --> BOOT4
style INSTALL fill:#1a1a2e,stroke:#e94560,color:#fff
style BOOT1 fill:#16213e,stroke:#0f3460,color:#fff
style BOOT2 fill:#16213e,stroke:#533483,color:#fff
style BOOT3 fill:#16213e,stroke:#e94560,color:#fff
style BOOT4 fill:#0f3460,stroke:#00b4d8,color:#fff
| Stage | Timing | Purpose |
|---|---|---|
post-fs-data.sh |
Before module mount | Clean caches BEFORE system reads them |
post-mount.sh |
After OverlayFS mount | Replace app emoji files while apps haven't started |
service.sh |
Late start (boot completed) | Force properties, disable GMS, media scan |
boot-completed.sh |
After sys.boot_completed=1 (KSU/APatch) |
Re-apply properties that system may have overwritten |
The installation script adapts to the device environment:
- Root Detection: Identifies Magisk, KernelSU, KernelSU Next, or APatch
- Metamodule Check (KSU): Warns if
meta-overlayfsor similar is not installed - API-Based Path Selection: Uses
/system/product/for Android 12+ or mirrors to/system/media/for Android 11 - OEM Emoji Detection: Scans
/system/fonts/for manufacturer-specific emoji fonts and creates replacements only for fonts that actually exist - Gboard Cache Cleanup: Removes cached emoji data so Gboard picks up the new font
- OverlayFS Integration: Detects and supports
magisk_overlayfsfor restricted partitions - SELinux Enforcement: Applies
u:object_r:system_file:s0context to all installed files
Runs BEFORE the module is mounted. Has a strict 10-second timeout.
- Deletes
/data/fonts/(system font updates) - Cleans GMS font provider caches
- Clears Gboard emoji caches
- Removes Messenger font download directories
Runs AFTER OverlayFS/MagicMount has mounted module files.
- Nuclear font replacement: Finds ALL
*emoji*.ttffiles in/data/data/and/data/user/0/and replaces them with the iOS emoji font - Meta app lock: Creates/replaces
FacebookEmoji.ttfin each Meta app'sapp_ras_blobs/directory with correct ownership and immutable flag - Messenger block: Sets
chmod 000on Messenger's font download directory - GMS cleanup: Removes cached font files from Google Play Services
The main runtime script. Waits for sys.boot_completed=1 before executing.
- resetprop: Force-sets 25+
ro.config.*sound properties that Android 14+ may overwrite during boot - Global emoji replacement: Scans ALL app directories for emoji font files and replaces them
- Meta emoji lock: Replaces and locks emoji fonts in Facebook, Instagram, Messenger (+ Lite variants) with
chattr +i(immutable) - GMS Font Provider disable: Disables
FontsProviderandUpdateSchedulerServicein Google Play Services to prevent stock emoji re-download - Media Scanner (Magisk): Broadcasts
MEDIA_SCANNER_SCAN_FILEintents for all audio files so they appear in Android's sound picker
KernelSU and APatch support this hook natively. Provides a clean way to re-apply properties after the system is fully booted.
- Re-applies all
ro.config.*sound properties viaresetprop - Triggers media scanner for ringtones, notifications, and alarms
Custom SEPolicy rules that allow:
mediaserverandaudioserverto read module-mounted audio files- Untrusted apps (Facebook/Messenger) to read bind-mounted emoji fonts
- Platform apps (Gboard) and GMS to read system emoji fonts
Declares default ringtone, notification, and alarm properties. Kept for backwards compatibility with older Android versions where system.prop is reliably applied during boot.
Removes the module directory from /data/adb/modules/ on uninstallation.
Sound_And_Emoji_IOS/
├── META-INF/ # Flashable ZIP metadata
│ └── com/google/android/
│ ├── update-binary # Magisk module installer
│ └── updater-script # Required (empty marker)
│
├── system/
│ ├── fonts/ # Font replacements
│ │ ├── NotoColorEmoji.ttf # iOS emoji font (system-wide)
│ │ ├── FacebookEmoji.ttf # iOS emoji for Meta apps
│ │ ├── SF-Pro-Display-Regular.ttf
│ │ ├── SF-Pro-Display-Bold.ttf
│ │ ├── SF-Pro-Display-Medium.ttf
│ │ ├── SF-Pro-Display-Semibold.ttf
│ │ ├── SF-Pro-Display-Light.ttf
│ │ ├── SF-Pro-Display-Thin.ttf
│ │ ├── SF-Pro-Display-Heavy.ttf
│ │ ├── SF-Pro-Display-Ultralight.ttf
│ │ └── ... (+ italic variants)
│ │
│ └── product/media/audio/ # iOS sound files
│ ├── ui/ # 30 UI sounds
│ ├── notifications/ # 7 notification sounds
│ ├── ringtones/ # 3 ringtones
│ └── alarms/ # 3 alarm sounds
│
├── webroot/
│ └── index.html # Module manager web UI redirect
│
├── update_metada/
│ ├── update.json # OTA update manifest
│ └── CHANGELOG.md # Full version history
│
├── customize.sh # Installation script
├── post-fs-data.sh # Pre-mount cache cleaner
├── post-mount.sh # Post-mount emoji lock (KSU/APatch)
├── service.sh # Late start service (universal)
├── boot-completed.sh # Post-boot hook (KSU/APatch)
├── sepolicy.rule # Custom SELinux policies
├── system.prop # Default sound properties
├── uninstall.sh # Cleanup on removal
└── module.prop # Module metadata
The module automatically detects and replaces manufacturer-specific emoji fonts. It only creates replacement files for fonts that actually exist on your device:
| OEM | Font File | Devices |
|---|---|---|
| Samsung | SamsungColorEmoji.ttf |
Galaxy S, A, Note, Z series |
| Xiaomi | MiuiColorEmoji.ttf |
Mi, Redmi, POCO (MIUI/HyperOS) |
| LG | LGNotoColorEmoji.ttf |
LG V, G series |
| HTC | HTC_ColorEmoji.ttf |
HTC U, Desire series |
| OnePlus | OnePlusEmoji.ttf |
OnePlus, OPPO, Realme |
| Huawei | HuaweiColorEmoji.ttf |
Huawei, Honor |
| AOSP/Pixel | NotoColorEmoji.ttf |
Pixel, AOSP-based ROMs |
Meta apps (Facebook, Instagram, Messenger) use their own bundled emoji font (FacebookEmoji.ttf) instead of the system font. The module uses an aggressive multi-layer approach to force iOS emojis:
graph LR
A["🔍 Find ALL *emoji*.ttf<br/>in /data/data/ & /data/user/0/"] --> B["📝 Replace with<br/>iOS emoji font"]
B --> C["🔒 chattr +i<br/>(immutable flag)"]
C --> D["🚫 Block Messenger<br/>font downloads<br/>(chmod 000)"]
D --> E["⛔ Disable GMS<br/>FontsProvider"]
E --> F["🔄 Force-stop<br/>Meta apps"]
style A fill:#1877f2,stroke:#fff,color:#fff
style B fill:#e94560,stroke:#fff,color:#fff
style C fill:#533483,stroke:#fff,color:#fff
style D fill:#0f3460,stroke:#fff,color:#fff
style E fill:#16213e,stroke:#fff,color:#fff
style F fill:#1a1a2e,stroke:#fff,color:#fff
| App | Package | Status |
|---|---|---|
com.facebook.katana |
✅ iOS Emojis | |
| Messenger | com.facebook.orca |
✅ iOS Emojis |
| Facebook Lite | com.facebook.lite |
✅ iOS Emojis |
| Messenger Lite | com.facebook.mlite |
✅ iOS Emojis |
com.instagram.android |
✅ iOS Emojis | |
| InstaPro | com.instapro.android |
✅ iOS Emojis |
WhatsApp does not use the system emoji font (NotoColorEmoji.ttf). Instead, WhatsApp bundles its own proprietary emoji set directly inside the APK to maintain visual consistency across Android, iOS, and Web platforms. This is a deliberate architectural decision by Meta.
What this means:
- ✅ System UI, Gboard, SMS, Chrome, and most apps → iOS emojis work perfectly
- ✅ Facebook, Instagram, Messenger → iOS emojis work (replaced via module)
- ❌ WhatsApp → uses its own emojis (cannot be changed without modifying the APK)
Note
This is not a bug in the module — it is a WhatsApp limitation. The only way to change WhatsApp's emojis would be to use a modified APK (which violates WhatsApp's Terms of Service and may result in account suspension).
Telegram has its own emoji rendering system that can be configured in-app. Check Settings → Chat Settings → Emoji to use system emojis.
The module supports in-app updates via the updateJson mechanism. Your root manager will automatically check for new versions.
Update URL: https://raw.githubusercontent.com/antoniomalheirs/Sound_And_Emoji_IOS/main/update_metada/update.json
Sounds not changing after reboot
- Check if
service.logexists in the module directory (/data/adb/modules/Sound_And_Emoji_IOS/service.log) - Verify that
resetpropis working: rungetprop ro.config.ringtone— it should showIOSDefaultRingtone.ogg - On Android 14+, the system may override
system.prop— the module usesresetpropas fallback viaservice.shandboot-completed.sh - Clear your Settings app cache and check sound settings again
Emojis not changing in Gboard
- Clear Gboard app data: Settings → Apps → Gboard → Clear Data
- Reboot the device
- Check if
/data/fonts/directory was removed (it should not exist) - Verify the module is enabled in your root manager
Facebook/Instagram still showing old emojis
- Force-stop the app
- Check
service.logfor errors - Verify that the emoji file has the immutable flag:
lsattr /data/data/com.facebook.katana/app_ras_blobs/FacebookEmoji.ttf— should show----i - If not, reboot — the module re-applies on every boot
Sounds/Ringtones not appearing in Settings picker
- The module triggers MediaScanner after boot — wait ~15 seconds after reboot
- If still not visible, check if your ROM reads from
/system/product/media/audio/or/system/media/audio/ - Try clearing the MediaProvider cache: Settings → Apps → Media Storage → Clear Data → Reboot
KernelSU: Nothing is working
- You MUST install a metamodule (e.g.,
meta-overlayfs) for KernelSU to mount files into/system/ - The installer will show a warning if no metamodule is detected
- Install
meta-overlayfs→ Reboot → Re-flash this module → Reboot again
See the full changelog at update_metada/CHANGELOG.md.
- Nuclear emoji replacement: Module now scans ALL
*emoji*.ttffiles across all app directories - GMS Font Provider disabled: Prevents Google Play Services from re-downloading stock emojis
- Immutable flag: Emoji files locked with
chattr +ito prevent app overwrites - Messenger font block: Download directory blocked with
chmod 000 - Detailed logging:
service.logcreated in module directory for debugging - Expanded Meta app support: Facebook, Messenger, FB Lite, Messenger Lite, Instagram, InstaPro
| Contributor | Contribution |
|---|---|
| topjohnwu | Creator of Magisk |
| tiann | Creator of KernelSU |
| TheGabrielHoward | Original iOS sounds and module inspiration |
| dtingley11 | OEM font replacement code |
Sentinel Data Solutions | Mobile Experience Engineering
Developed by Zeca
⭐ If this module improved your Android experience, consider giving the repo a star!