Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

PayPay Sound Hook

version license platform

PayPayアプリ(jp.ne.paypay.android.app)の通知音・決済完了音を、自分で選んだ音声ファイルに差し替えるLSPosedモジュールです。

  • パッケージ名: com.paypaysound.hook
  • バージョン: 1.00
  • アプリ名・アイコンはビルド時に自由に変更できます(app/src/main/res/mipmap-xxhdpi/AndroidManifest.xml)

本ツールはPayPay株式会社およびPayPay関連サービスとは一切関係のない、非公式の個人開発ツールです。 "PayPay"は各権利者の商標です。本ツールはリバースエンジニアリングによりリソース名を特定し、 ローカル端末上でのみ動作するもので、PayPay本体のAPKやサーバー通信内容を一切改変・傍受しません。

機能

アプリを開いて音声ファイルを選ぶだけで、再ビルド不要で即座に反映されます。

対象 PayPay側のリソース名
決済完了音 payment_complete_pay2_sound / payment_complete_pay2_settings_sound
受信通知音 incoming_message
送信通知音 outgoing_message

各項目に「▶ 再生」ボタンがあり、アプリ内でテスト再生できます(再生中は「■ 停止」に変わり、いつでも止められます)。

対応フォーマット

拡張子ではなくファイルの中身(ヘッダ)から自動判別するため、Android標準のMediaPlayer/SoundPoolが対応している形式であれば基本的に使えます。

形式 対応
MP3
WAV(PCM)
OGG Vorbis
AAC / M4A
FLAC ○(API21以上)

動作要件

  • root化端末(Magisk / KernelSU)
  • LSPosed
  • 対象端末で PayPay自体にSuperuser権限を許可しておくこと(Magiskアプリの「Superuser」タブから設定)

動作確認済み環境

項目 バージョン等
PayPay 5.60.0(このバージョンのリソース名で解析・動作確認。2026年8月時点でGoogle Play上の最新は5.59.0前後のため、実質最新版に対応)
Android 17(Pixel 10a、Magisk)/ Android 15系(Redmi 15 5G、KernelSU LKM)
minSdk 27(Android 8.1)以上

リソースIDではなくgetResourceEntryName()による名前一致でフックしているため、PayPay側のアップデートでID値が変わっても追従できる設計です。ただしリソース名自体(payment_complete_pay2_sound等)が変更された場合はさすがに追従できません。その場合はIssueで実際に検出されたリソース名を報告してもらえると対応しやすいです(モジュール側は[PayPaySoundHook]タグでLSPosedのログに実際のリソース名を出力する仕組みを持っています)。

なぜPayPay自体にroot権限が必要か

Android 11以降のパッケージ可視性制限により、本モジュールの提供するデータをPayPayプロセスから通常の方法(ContentProvider / forceQueryable)で読み取ることができませんでした。この制限を回避するため、PayPay自身のプロセス内でsuを呼び出し、本モジュールの内部ストレージにあるファイルを直接読み出す方式を採用しています(su -mmでマウント名前空間を維持し、SELinuxラベルの問題を回避するため事前に空ファイルを非root権限で作成してからrootで書き込む、という手順を踏んでいます)。

セットアップ

  1. app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png(前景)・app/src/main/res/values/colors.xml(背景色)はサンプルです。好きなデザインに差し替えてもかまいません
  2. (継続的にアップデートしていく場合)keystore.properties.examplekeystore.properties にコピーし、リポジトリ配布元から受け取った署名鍵ファイル(paypaysoundhook-release.keystore、gitには含まれません)を配置してパスワードを設定 — これにより毎回同じ署名でビルドされ、上書きアップデートが可能になります。鍵ファイルが無い場合は自動生成される仮の鍵で署名されます(その場合はバージョンアップの度に再インストールが必要)
  3. Android Studioでビルド(または ./gradlew assembleRelease)
  4. APKをインストール
  5. LSPosed Managerでモジュールを有効化し、スコープに jp.ne.paypay.android.app を追加
  6. Magiskアプリの「Superuser」タブで jp.ne.paypay.android.app にroot権限を許可
  7. インストールしたアプリを開いて音声ファイルを選択
  8. PayPayを完全終了 → 再起動 → 反映確認

仕組み

Resources#openRawResourceFd / openRawResource をフックし、getResourceEntryName() で名前一致したリソースのみ差し替えます(リソースIDのハードコードを避けているため、PayPay側のアップデートでID値が変わっても壊れにくい設計です)。

差し替え用の音声はアプリ自身の内部ストレージ(/data/user/0/com.paypaysound.hook/files/)に保存され、PayPayプロセス側からは su -mm 経由でこのファイルを直接読み出し、PayPay自身のキャッシュディレクトリにコピーしてから再生に利用します。

リンク

免責

個人の学習・カスタマイズ目的のツールです。PayPay本体のAPKは一切改変していません。PayPay株式会社とは無関係の非公式ツールです。利用は自己責任でお願いします。

About

PayPayの通知音・決済完了音を自由に差し替えるLSPosedモジュール(root+Xposed)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors