Grevling er en Android-app som videresender SMS-meldinger, tapte anrop og app-varsler til email via Gmail SMTP. Perfekt for når du ikke har telefonen tilgjengelig, men trenger å holde deg oppdatert.
- SMS til email – Alle innkommende SMS sendes til din valgte email-adresse
- Tapte anrop til email – Bli varslet når noen ringer og du ikke svarer
- App-varsler til email – Velg hvilke apper som skal sende varsler til email
- Kontaktnavn-oppslag – Viser kontaktens navn i stedet for bare telefonnummer
- Automatisk SMS-svar – Send auto-svar til innkommende SMS
- Automatisk anrops-svar – Send SMS til de som ringer og du ikke svarer
- Unified eller separate meldinger – Bruk samme melding for alt, eller tilpass per type
- Låsefunksjon – Beskytt auto-svar meldingene mot utilsiktet endring
- Standard widget (3x1) – Viser status og statistikk
- Mini widget (1x1) – Kompakt toggle-knapp for av/på
- Stats widget (2x2) – Detaljert statistikk med pause/resume knapp
- Kryptert lagring – Gmail-legitimasjon lagres med AES256-GCM kryptering
- TLS 1.2/1.3 – Sikker kommunikasjon med Gmail SMTP
- HTML-escaping – Beskyttelse mot injection i emails
- GDPR-compliant logging – Ingen sensitiv data i logger
| Krav | Verdi |
|---|---|
| Android versjon | 10+ (API 29) |
| Target SDK | 34 (Android 14) |
| Arkitektur | Alle (arm64, arm, x86, x86_64) |
- Gå til GitHub Releases
- Last ned siste versjon av
grevling.apk - Aktiver "Ukjente kilder" i Android-innstillinger
- Installer APK-filen
git clone https://github.com/Aliman00/grevling.git
cd grevling
./gradlew assembleReleaseAPK-filen finnes i: app/build/outputs/apk/release/grevling.apk
For at appen skal kunne sende email via Gmail trenger du et App Password. Dette er et spesielt passord som Google genererer for tredjeparts-apper.
Dette er et krav fra Google for å kunne opprette App Passwords.
- Gå til Google Account Security
- Under "Signing in to Google", velg 2-Step Verification
- Følg instruksjonene for å aktivere 2FA
- Gå til App Passwords
- Velg Mail som app
- Velg Other (Custom name) som enhet
- Skriv inn:
Grevlingeller et annet navn du husker - Klikk Generate
- Kopier det 16-tegn passordet (fjern mellomrom)
- Åpne Grevling appen
- Gå til Innstillinger-fanen
- Fyll ut:
- Mottaker email: Email-adressen hvor du vil motta varsler
- Gmail-adresse: Din
[email protected] - Gmail App Password: Det 16-tegn passordet uten mellomrom
- Trykk 📧 Send test-email for å verifisere
Appen trenger følgende tillatelser:
| Tillatelse | Formål |
|---|---|
RECEIVE_SMS |
Motta innkommende SMS |
READ_SMS |
Lese SMS-innhold |
SEND_SMS |
Sende automatiske svar |
READ_CALL_LOG |
Lese anropslogg for tapte anrop |
READ_CONTACTS |
Slå opp kontaktnavn |
INTERNET |
Sende email via SMTP |
NOTIFICATION_LISTENER |
Lytte til varsler (må aktiveres manuelt) |
For å fange tapte anrop og app-varsler må du gi appen varseltilgang:
- Gå til Innstillinger i appen
- Trykk Gi varseltilgang
- Aktiver Grevling i listen
Hvis tillatelser blir avvist automatisk på Android 13+:
- Åpne Android Innstillinger
- Gå til Apper → Grevling
- Trykk på ⋮ (tre prikker) øverst
- Velg Tillat begrensede innstillinger
- Bekreft med enhetens PIN/mønster
SMS/Anrop/App-varsel
↓
SmsReceiver / NotificationMonitorService
↓
EmailWorker (WorkManager)
↓
Gmail SMTP (TLS 1.2/1.3)
| Komponent | Beskrivelse |
|---|---|
MainActivity |
Eneste Activity, setter opp Compose og navigasjon |
HomeScreen |
Hjem-skjerm med status og auto-svar innstillinger |
HomeViewModel |
Business logic for HomeScreen |
AppsScreen |
Velg apper for varsel-overvåking |
AppsViewModel |
Business logic for AppsScreen |
SettingsScreen |
Gmail-konfigurasjon og tillatelser |
SettingsViewModel |
Business logic for SettingsScreen |
PreferencesRepository |
Singleton for preference-adgang |
SmsReceiver |
BroadcastReceiver for innkommende SMS |
NotificationMonitorService |
NotificationListenerService for app-varsler |
EmailWorker |
WorkManager worker for bakgrunns-email sending |
EmailSender |
SMTP email-sending |
AutoReplyHelper |
Håndterer auto-svar SMS |
EncryptedPrefsFactory |
Factory for kryptert SharedPreferences |
# Kjør alle tester
./gradlew test
# Kjør spesifikk testklasse
./gradlew test --tests "EmailSenderTest"
# Kjør Android lint
./gradlew lint// Kotlin
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
// Jetpack Compose
implementation(platform("androidx.compose:compose-bom:2024.02.00"))
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-graphics")
implementation("androidx.compose.ui:ui-tooling-preview")
implementation("androidx.compose.material3:material3")
implementation("androidx.compose.material:material-icons-extended")
implementation("androidx.activity:activity-compose:1.8.2")
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0")
implementation("androidx.lifecycle:lifecycle-runtime-compose:2.7.0")
implementation("androidx.navigation:navigation-compose:2.7.6")
// AndroidX
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("androidx.security:security-crypto:1.1.0-alpha06")
// WorkManager
implementation("androidx.work:work-runtime-ktx:2.9.0")
// JavaMail for SMTP
implementation("com.sun.mail:android-mail:1.6.7")
implementation("com.sun.mail:android-activation:1.6.7")
// Image loading
implementation("io.coil-kt:coil-compose:2.5.0")- MVVM med Jetpack Compose
- StateFlow for reaktiv state-håndtering
- Singleton Repository for data-adgang
- Manual DI (ingen Hilt/Koin)
- Single Activity med Navigation Compose
- EncryptedSharedPreferences med AES256-GCM for credential-lagring
- TLS 1.2/1.3 påkrevd for SMTP-tilkoblinger
- HTML-escaping av alt email-innhold
- Rate-limiting: Maks 10 emails per minutt
- Retry-logikk: 3 forsøk med exponential backoff
- Thread-safe operasjoner med koroutiner
- GDPR-compliant logging (ingen sensitiv data)
Løsning:
- Sjekk at du har aktivert 2FA på Google-kontoen
- Verifiser at App Password er korrekt (16 tegn, uten mellomrom)
- Prøv å generere et nytt App Password
Løsning:
- Sjekk internettforbindelsen
- Verifiser at port 587 ikke er blokkert av brannmur
- Prøv på et annet nettverk
Løsning:
- Sjekk at varseltilgang er aktivert for Grevling
- Deaktiver og reaktiver varseltilgang
- Start telefonen på nytt
Løsning (Android 13+): Se "Begrensede innstillinger" under Oppsett-seksjonen ovenfor.
Personal Use Only License. Se LICENSE for detaljer.
Tillatt:
- Personlig bruk
- Modifisering for egen bruk
Ikke tillatt:
- Kommersiell bruk
- Redistribusjon
- Bruk i andre prosjekter
For sikkerhetsproblemer, se SECURITY.md.
Se CHANGELOG.md for versjonshistorikk.
Utviklet av Aliman00
🦡 Grevling – Aldri gå glipp av en viktig SMS eller anrop igjen
Dette prosjektet er lisensiert under Personal Use Only License - se LICENSE filen for detaljer.
Viktig:
- ✅ Gratis for personlig bruk
- ✅ Kan modifiseres for eget bruk
- ✅ Kan deles med andre (gratis)
- ❌ Kommersiell bruk IKKE tillatt
- ❌ Kan IKKE selges
- ❌ Kan IKKE ha subscription-modeller
For kommersiell bruk, kontakt utvikleren via GitHub Issues.
For spørsmål eller problemer, opprett en issue i dette repositoriet.


