No description
  • Java 96.1%
  • Shell 3.9%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-29 22:10:32 +00:00
app [verified] Harden SMS forwarding and add release build 2026-10-29 22:10:32 +00:00
gradle/wrapper [verified] Harden SMS forwarding and add release build 2026-10-29 22:10:32 +00:00
scripts [verified] Harden SMS forwarding and add release build 2026-10-29 22:10:32 +00:00
.gitignore [verified] Harden SMS forwarding and add release build 2026-10-29 22:10:32 +00:00
build.gradle Initial SMS to Discord forwarder 2026-10-29 22:04:34 +00:00
gradle.properties Initial SMS to Discord forwarder 2026-10-29 22:04:34 +00:00
gradlew [verified] Harden SMS forwarding and add release build 2026-10-29 22:10:32 +00:00
gradlew.bat [verified] Harden SMS forwarding and add release build 2026-10-29 22:10:32 +00:00
README.md [verified] Harden SMS forwarding and add release build 2026-10-29 22:10:32 +00:00
settings.gradle Initial SMS to Discord forwarder 2026-10-29 22:04:34 +00:00

SMS2Discord

Kleine native Android-App, die alle eingehenden SMS an einen Discord-Webhook weiterleitet. Keine Fremd-SDKs, kein Tracking, keine Werbung, keine Cloud-Backups.

Funktionen

  • Empfang ueber den Android-System-Broadcast SMS_RECEIVED
  • Multipart-SMS werden vor dem Versand zusammengesetzt
  • Absender, SMS-Text und Empfangszeit in UTC
  • Versand mit HTTPS und allowed_mentions: [], damit SMS keine Discord-Mentions ausloesen
  • Nachrichten ueber dem Discord-Limit werden aufgeteilt
  • Persistente Warteschlange bei fehlendem Netz oder Discord-Fehlern
  • Systemverwalteter JobScheduler mit exponentiellem Retry
  • Wiederanlauf nach Reboot und App-Update
  • Webhook nur in den privaten App-Einstellungen, niemals in Logs oder Cloud-Backups
  • Release ohne Debug-Flag und ohne Cleartext-Traffic

Installation

  1. dist/SMS2Discord-1.0.0.apk auf das Android-Telefon kopieren und installieren. Installation aus unbekannten Quellen fuer den Browser/Dateimanager erlauben.
  2. App oeffnen und ueber SMS-Berechtigungen pruefen SMS empfangen und SMS lesen erlauben.
  3. In Discord im gewuenschten Kanal: Kanal bearbeiten → Integrationen → Webhooks → Neuer Webhook und URL kopieren.
  4. URL in der App eintragen, Webhook speichern, danach Test an Discord senden.
  5. Fuer zuverlaessigen Dauerbetrieb die Akkuoptimierung fuer SMS2Discord deaktivieren.
  6. Telefon eingeschaltet, mit WLAN/Mobilfunk und nach Moeglichkeit am Ladegeraet lassen.

Wichtig: Alle Personen mit Zugriff auf den Discord-Kanal koennen die 2FA-Codes lesen. Einen privaten, eng begrenzten Kanal verwenden. Der Webhook ist ein Geheimnis und gehoert nicht in Chats, Screenshots oder Git.

Build

Voraussetzungen: JDK 21, Android SDK Platform 35, Build-Tools 35.0.0.

export ANDROID_HOME=/opt/android-sdk
./gradlew testDebugUnitTest lintDebug assembleDebug

Signierter Release:

scripts/build-release.sh

Das Skript nutzt bei vorhandener lokaler Signaturkonfiguration:

  • /root/.hermes/secrets/sms2discord-release.jks
  • /root/.hermes/secrets/sms2discord-keystore.properties

Die Dateien bleiben ausserhalb des Repos und sind per .gitignore ausgeschlossen. Alternativ koennen SMS2DISCORD_KEYSTORE, SMS2DISCORD_STORE_PASSWORD und SMS2DISCORD_KEY_PASSWORD selbst gesetzt werden.

APK pruefen:

$ANDROID_HOME/build-tools/35.0.0/apksigner verify --verbose --print-certs dist/SMS2Discord-1.0.0.apk
$ANDROID_HOME/build-tools/35.0.0/aapt dump badging dist/SMS2Discord-1.0.0.apk
sha256sum dist/SMS2Discord-1.0.0.apk

Betriebsgrenzen

  • Ohne Strom, Netz oder gueltigen Webhook kann das Telefon nicht zustellen. Nachrichten bleiben dann in der lokalen Warteschlange.
  • Discord-Rate-Limits werden durch Retry abgefedert, nicht durch Dauerfeuer.
  • Ein echter Discord- und Geraete-Endtest erfolgt nach der Installation ueber den Testbutton; der Build- und Signaturtest allein ersetzt ihn nicht.