Skip to content

About

Remove the JP/KR locale-forced camera shutter sound on Pixel via a fabricated RRO (KernelSU/Magisk). No APK, no mount, no /system footprint.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

Pixel Shutter Silencer (JP/KR)

English | 日本語

A tiny KernelSU / KernelSU Next / Magisk module that removes the forced camera shutter sound on Pixel and other AOSP devices sold in Japan and South Korea — without changing your region, locale, or SIM, and without any /system footprint.

Why the shutter sound can't be turned off normally

On JP/KR firmware, Android's AudioService sets mCameraSoundForced = true, which routes the shutter through STREAM_SYSTEM_ENFORCED with FLAG_AUDIBILITY_ENFORCED. That flag makes the sound play at an audible level regardless of volume or mute, and the Camera app's toggle is greyed out.

mCameraSoundForced is computed at boot from a single framework boolean resource:

com.android.internal.R.bool.config_camera_sound_forced   // true on JP/KR builds

The region logic that sets this to true lives in framework-res.apk and can't be reached with setprop. (The runtime property audio.camerasound.locale.enabled looks related but does not drive the decision on modern Pixel — flipping it does nothing.)

What it changes

This module overrides exactly one boolean resource with a fabricated RRO (Runtime Resource Overlay), created at boot via cmd overlay fabricate:

Resource Original Overridden to
android:bool/config_camera_sound_forced true false

Your region detection is left completely intact — locale stays ja-JP, the SIM country stays jp, every other region-dependent behavior is untouched. Only the result this one flag feeds into AudioService is overridden, so the shutter sound follows normal volume/mute rules again.

overlay: com.android.shell:CameraSoundOff  (priority max, target = framework-res.apk)
  0x0111006d -> boolean 0x00000000  (bool/config_camera_sound_forced)

No APK is installed, no partition is mounted, no file is modified. Because it does not use overlayfs, no metamodule is required and there is zero /system footprint — it won't disturb root-hiding / Play Integrity setups.

Requirements

  • Root (KernelSU / KernelSU Next / Magisk). cmd overlay fabricate requires root; it cannot be done from plain non-root adb.
  • Android 11+ (fabricated overlays / idmap2 FRRO support).

Install

  1. Flash the release zip in the KernelSU / KernelSU Next / Magisk manager (or ksud module install pixel-shutter-silencer.zip).
  2. Reboot.
  3. The shutter sound is gone. Verify below.

service.sh re-creates and re-enables the overlay on every boot (idempotent), so the effect self-heals even if the overlay state is ever cleared.

Verify

adb shell su -c 'dumpsys audio | grep mCameraSoundForced'      # expect: false
adb shell su -c 'cmd overlay list | grep CameraSoundOff'       # expect: [x] ...

Uninstall

Remove the module in your manager and reboot. uninstall.sh disables the overlay.

Compatibility

  • Verified on Pixel 11 (Tensor G6), Android 17, KernelSU Next.
  • Should work on any AOSP device where the shutter is forced through config_camera_sound_forced. If your device forces it differently, open an issue with the output of adb shell su -c 'dumpsys audio | grep -i camera'.

Legal note

Some jurisdictions expect a camera shutter sound. Use responsibly and in line with local law. This is provided for personal customization of your own device.

Build

./build.sh          # produces dist/pixel-shutter-silencer.zip

How it works (internals)

AudioService.readCameraSoundForced() returns the value of the framework resource config_camera_sound_forced. A fabricated RRO is a runtime overlay that maps a single resource ID to a new value, stored under /data/resource-cache and persisted across reboots — no APK and no signing needed. We set that resource to false with maximum priority, so the resolver returns false while the original true remains untouched in framework-res.apk.

License

MIT (see LICENSE). The flashable-zip installer stub under module/META-INF/ follows the widely-used Magisk module template convention.

Releases & auto-update

Releases are built by GitHub Actions: push a tag vX.Y.Z (matching module/module.prop version) and the workflow builds the zip and attaches it to a GitHub Release.

git tag v1.0.0 && git push origin v1.0.0

To enable in-manager auto-update, set your GitHub user in update.json (replace <you>) and add this line to module/module.prop:

updateJson=https://raw.githubusercontent.com/<you>/pixel-shutter-silencer/main/update.json

About

Remove the JP/KR locale-forced camera shutter sound on Pixel via a fabricated RRO (KernelSU/Magisk). No APK, no mount, no /system footprint.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages