30 KiB
NoGooleApps
Everyday Android apps without Google. Privacy-friendly rebuilds of the standard Google apps, for people who want the polish of the originals without Play Services, tracking or an account. Made with GrapheneOS, CalyxOS, /e/OS and LineageOS in mind, and works the same on any stock Android phone.
Not affiliated with, endorsed by or connected to Google. These are independent, clean-room rebuilds: no Google code, assets, icons, fonts or text are used.
Apps
| App | Replaces | Status | Install |
|---|---|---|---|
Messages (messages/) |
Google Messages (SMS) | alpha, not yet tested with real SMS | Obtainium · F-Droid: not yet |
Telefon (telefon/) |
Google Phone | alpha, not yet tested with real calls | Obtainium · F-Droid: not yet |
Rechner (rechner/) |
Google Calculator | alpha | Obtainium · F-Droid: not yet |
Uhr (uhr/) |
Google Clock / Pixel Clock | alpha, in daily testing | Obtainium · F-Droid: not yet |
Wetter (wetter/) |
Google Weather / Pixel Weather | alpha, in daily testing | Obtainium · F-Droid: not yet |
More apps will follow, one folder each. Each one goes through the same pipeline (see How these apps are made).
Wetter
A weather app with the look and feel of Pixel Weather: an animated sky that changes with the conditions, a large hero temperature, hourly and 10-day forecasts, and shaped Material 3 Expressive detail tiles (wind, sun, UV, air quality, visibility, humidity, pressure, pollen).
- No Google Play Services. Location uses the platform's own providers (including the AOSP fused provider), so it works on GrapheneOS without sandboxed Play.
- No account, no tracking, no analytics. Everything stays on the device. Coordinates are rounded to two decimals (about 1 km) before they reach the weather service.
- Open data sources only: Open-Meteo for forecasts, 15-minute precipitation, air quality, pollen and place search (CC BY 4.0), and Nominatim / OpenStreetMap for naming your current location.
- Features today: current location and saved cities (swipe between them), search with a full preview before saving, precipitation-in-the-next-hours card, a rule-based daily summary, day detail view, units and theme settings, light and dark mode.
- Six home-screen widgets: a minimal clock with date and current weather (transparent by default), a weather card that grows from 3×2 to 4×5 (hourly panel, then a daily list), a pill, a tilted pill, a one-line bar with a cookie badge, and a classic card. The widget picker shows real previews. Each one can be customised when added or later: location, system/light/dark, colours (wallpaper Material You, current weather, or five fixed palettes, all WCAG AA checked) and background opacity from 100 % down to fully transparent.
- Coming next: severe weather alerts (DWD / MeteoAlarm), precipitation radar map, card reordering, notifications.
Screenshots are rendered from a real Open-Meteo response (Berlin) by the app's screenshot tests; widgets are rendered on a Pixel with the wallpaper colours of that phone.
Requires Android 10 (API 29) or newer.
Messages
An SMS app with the look of Google Messages, made to replace the system messaging app.
- Becomes your default SMS app (Android's SMS role): receives and stores texts, sends long messages in parts, shows sending / delivered / failed (tap to retry), and handles "decline with message" from the phone app.
- Conversations with unread markers and contact names, chat with grouped bubbles and day separators, new chat from contacts or a number, search, archive and delete, call from the chat.
- Notifications with direct reply and "mark as read".
- No network permission; messages stay in Android's own SMS database.
- Not included: RCS (Google/carrier backend), spam protection, Gemini features. MMS (pictures, group MMS) comes later.
Telefon
A phone app in the style of the Pixel dialer, made to replace the system phone app.
- Becomes your default phone app (Android's dialer role): shows incoming calls full screen over the lock screen with slide to answer or decline, the in-call screen with mute, speaker, Bluetooth, hold and keypad, and call notifications. The ringtone is played by Android itself.
- Start: search, filters (all, missed, contacts), favourites from your starred contacts, call history grouped by day with missed calls in red; repeated calls fold into one row.
- Keypad with T9 contact suggestions, voicemail dials your SIM's mailbox number, details per contact or number with history, SMS, favourite toggle and "add contact".
- Your data stays in the system. Call history and contacts are read from Android's own databases, nothing is copied, and there is no network permission. Declining with a quick reply hands the text to your SMS app.
- Not included: spam detection, call screening, recording and live translation (Google services).
Screenshots use made-up contacts.
Rechner
A calculator with the flow of the Pixel calculator: live result while typing, a scientific row that expands into a full panel, and the history in a sheet you pull down from the display.
- Exact arithmetic. Numbers are decimal, not floating point: 0,1 + 0,2 is 0,3, 1 ÷ 3 × 3 is 1, 100! is exact. Trigonometry snaps exact angles (sin 30° = 0,5, cos π = −1). The engine is covered by unit tests.
- Smart input: one key for parentheses that opens or closes as needed, operators replace each other, implicit multiplication (2π, 3(4)), percent the way people expect (50 + 10 % = 55), unfinished input still shows a preview.
- Scientific: √ π ^ ! · Deg/Rad · sin cos tan and their inverses (Inv) · e ln log · eˣ 10ˣ x².
- History grouped by day, tap to reuse; copy, paste and a memory (MS/MR) from a long press on the display; wallpaper colours, light and dark.
- No permissions except vibration for key feedback. No network.
Requires Android 10 (API 29) or newer.
Uhr
A clock and alarm app with the look and flow of the Pixel clock: alarms in expandable cards, world clock, several timers at once, stopwatch with laps, and a bedtime schedule.
- Reliable alarms without Google. Exact alarms via
AlarmManager.setAlarmClock(exempt from Doze, shown in the status bar), rescheduled after reboot, time or time zone changes and app updates. Wall-clock based: 7:00 stays 7:00 across daylight saving and travel; the scheduling logic is unit-tested for DST gaps and zone changes. - Ringing done right: a full-screen screen over the lock screen with slide to snooze or stop, alarm-stream audio that gets louder gradually, vibration, automatic silence after a set time, and notifications for upcoming, snoozed and missed alarms. Volume keys can snooze or stop.
- No network permission at all. World clock cities come from the system time zone database (names localised offline), sounds from the device, the app's own tone, or your own audio files.
- Also: days and labels per alarm, pause until a date, skip the next ring, timers with ring progress and +1:00 that keep running in the background with a live countdown notification, stopwatch with fastest/slowest laps, analog or digital clock, wallpaper colours (Material You), three home-screen widgets (live digital clock, analog clock, next alarm).
- Bedtime extras: own sleep sounds (rain, waves, deep noise) with a sleep timer that fades out, and a sunrise option that slowly brightens the screen 15 minutes before the wake-up alarm.
- Coming next: widget style options like Wetter, screensaver/night clock.
Screenshots rendered by the app's screenshot tests with the fallback palette; on Android 12+ the app uses your wallpaper colours.
Requires Android 10 (API 29) or newer.
Replacing the system apps
Each app plugs into the places Android uses to pick an app, so you can uninstall or disable the Google version (on GrapheneOS most are not installed anyway):
| App | How it takes over |
|---|---|
| Messages | Android's default SMS app role (Settings → Apps → Default apps → SMS app), plus sms:/smsto: links and sharing text |
| Telefon | Android's default phone app role (Settings → Apps → Default apps → Phone app), plus tel: links and the dial intent |
| Uhr | the public alarm clock intents: set alarm, set timer, show alarms/timers, dismiss and snooze, used by voice assistants, calendars and other apps; exact alarms shown in the status bar and lock screen |
| Rechner | the system calculator category, so the calculator key of keyboards and launchers opens it |
| Wetter | no system role exists for weather; its widgets and the "at a glance"-style clock widget replace the Google ones |
Install with Obtainium
Obtainium installs and updates apps straight from this repository's releases, with no store in between.
Wetter
Open the button on your phone with Obtainium installed and confirm the import. The link carries the complete configuration, so nothing has to be set by hand:
| setting | value | why |
|---|---|---|
| Source | https://git.mrblake.cc/MrBlake/NoGooleApps |
this repository (note the spelling: NoGooleApps) |
| Override source | Forgejo (Codeberg) | the repository runs on a self-hosted Gitea, which Obtainium does not detect on its own; Gitea speaks the same release API |
| Filter release titles | ^Wetter |
several apps share this repository; only weather releases count |
| Filter APKs | ^wetter-.*\.apk$ |
picks the weather APK from the release assets |
If the button does not open Obtainium (some browsers block links to apps; the page then shows a button to tap, or enable "open links in apps" in the browser), paste this link into the phone's browser address bar, or add the app by hand with the settings above:
obtainium://app/%7B%22id%22%3A%22app.wetter%22%2C%22url%22%3A%22https%3A%2F%2Fgit.mrblake.cc%2FMrBlake%2FNoGooleApps%22%2C%22author%22%3A%22MrBlake%22%2C%22name%22%3A%22Wetter%22%2C%22overrideSource%22%3A%22Codeberg%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22appId%5C%22%3A%5C%22app.wetter%5C%22%2C%5C%22includePrereleases%5C%22%3Atrue%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5EWetter%20%5C%22%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5Ewetter-.%2A%5C%5C%5C%5C.apk%24%5C%22%2C%5C%22autoApkFilterByArch%5C%22%3Afalse%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%7D%22%7D
Uhr
Same setup as Wetter, with the filters ^Uhr (release titles) and ^uhr-.*\.apk$ (APKs). Raw link:
obtainium://app/%7B%22id%22%3A%22app.uhr%22%2C%22url%22%3A%22https%3A%2F%2Fgit.mrblake.cc%2FMrBlake%2FNoGooleApps%22%2C%22author%22%3A%22MrBlake%22%2C%22name%22%3A%22Uhr%22%2C%22overrideSource%22%3A%22Codeberg%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22appId%5C%22%3A%5C%22app.uhr%5C%22%2C%5C%22includePrereleases%5C%22%3Atrue%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5EUhr%20%5C%22%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5Euhr-.%2A%5C%5C%5C%5C.apk%24%5C%22%2C%5C%22autoApkFilterByArch%5C%22%3Afalse%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%7D%22%7D
Rechner
Filters: ^Rechner (release titles) and ^rechner-.*\.apk$ (APKs). Raw link:
obtainium://app/%7B%22id%22%3A%22app.rechner%22%2C%22url%22%3A%22https%3A%2F%2Fgit.mrblake.cc%2FMrBlake%2FNoGooleApps%22%2C%22author%22%3A%22MrBlake%22%2C%22name%22%3A%22Rechner%22%2C%22overrideSource%22%3A%22Codeberg%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22appId%5C%22%3A%5C%22app.rechner%5C%22%2C%5C%22includePrereleases%5C%22%3Atrue%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5ERechner%20%5C%22%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5Erechner-.%2A%5C%5C%5C%5C.apk%24%5C%22%2C%5C%22autoApkFilterByArch%5C%22%3Afalse%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%7D%22%7D
Telefon
Filters: ^Telefon and ^telefon-.*\.apk$. Raw link:
obtainium://app/%7B%22id%22%3A%22app.telefon%22%2C%22url%22%3A%22https%3A%2F%2Fgit.mrblake.cc%2FMrBlake%2FNoGooleApps%22%2C%22author%22%3A%22MrBlake%22%2C%22name%22%3A%22Telefon%22%2C%22overrideSource%22%3A%22Codeberg%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22appId%5C%22%3A%5C%22app.telefon%5C%22%2C%5C%22includePrereleases%5C%22%3Atrue%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5ETelefon%20%5C%22%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5Etelefon-.%2A%5C%5C%5C%5C.apk%24%5C%22%2C%5C%22autoApkFilterByArch%5C%22%3Afalse%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%7D%22%7D
Messages
Filters: ^Messages and ^messages-.*\.apk$. Raw link:
obtainium://app/%7B%22id%22%3A%22app.messages%22%2C%22url%22%3A%22https%3A%2F%2Fgit.mrblake.cc%2FMrBlake%2FNoGooleApps%22%2C%22author%22%3A%22MrBlake%22%2C%22name%22%3A%22Messages%22%2C%22overrideSource%22%3A%22Codeberg%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22appId%5C%22%3A%5C%22app.messages%5C%22%2C%5C%22includePrereleases%5C%22%3Atrue%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5EMessages%20%5C%22%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5Emessages-.%2A%5C%5C%5C%5C.apk%24%5C%22%2C%5C%22autoApkFilterByArch%5C%22%3Afalse%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%7D%22%7D
Releases. Every app is published as a release titled <App> <version> (for example Wetter 0.1.0, tag wetter-v0.1.0) with one asset named <app>-<version>.apk. Obtainium shows "no matching version" until the first release of an app exists.
F-Droid: not available yet. The apps contain no proprietary libraries, so an F-Droid build is planned (either the main repository or a self-hosted F-Droid repo).
How these apps are made
The Replica pipeline
Every app is rebuilt with Replica, an open set of eleven Claude Code skills by Jake Schincariol for cloning an app's functionality and UX patterns clean-room style. Each skill writes files the next one reads, and everything is kept in replica/<app>/:
| Step | Skill | What it produced for Wetter |
|---|---|---|
| 1 | replica-recon |
Recon map built from public sources (help center, reviews, store listing): 15 screens, 9 user flows, components, inferred data model, feature matrix |
| 2 | replica-architect |
Architecture and schema: native Kotlin, offline-first, no server, public APIs only |
| 3 | replica-design |
Design tokens and component specs, WCAG AA contrast checked (70 colour pairs), generated into Compose code |
| 4 | replica-build |
The app itself, screen by screen, with a build log and screenshots rendered from a real API response |
| next | replica-test, replica-diff, replica-entrepreneur, replica-brand, replica-launch, replica-deploy, replica-backend |
QA, parity scoring against the original, reading real user reviews for improvements, naming and branding, store listing, release |
Telefon as well: recon, architecture, tokens (20 pairs AA), build log.
Rechner too: recon, architecture, tokens (24 pairs AA), build log, screenshots.
Uhr went through the same steps from scratch: recon (17 screens, 9 flows), architecture, design tokens (39 pairs AA), build log and screenshots.
The rules Replica enforces, and that this project follows:
- Public sources and our own devices only. No decompiling, no private APIs, no reading the original's code or network traffic.
- Everything written fresh. Code, icons, weather glyphs, the animated sky and every label are made from scratch. Reference screenshots of the originals live in
replica/<app>/screens/for layout comparison only and never ship. - What cannot be cloned is left out on purpose: Google's own forecast models, Gemini summaries, Calendar/Gmail-based insights and account sync. Open alternatives replace them where it makes sense.
Built with AI, steered by a human
The code, the design system and this README were written by Claude Opus 5.5 (Anthropic's model, ID claude-opus-5-5) running in Claude Code, working through the Replica skills step by step. The human side of the project (that's @MrBlake) sets direction, supplies reference screenshots, tests every build on a real Pixel phone and reports what feels wrong. Issues found that way, like stutter during scrolling or slow location, are measured on the device and fixed. A typical loop:
- A skill produces its document or code; the human reviews it.
- The app is built and rendered to screenshots on the JVM (Roborazzi), and the screenshots are checked against the reference.
- The release build is installed on the phone over adb and used for real; frame timings (
dumpsys gfxinfo) and logs guide the fixes.
Each commit says what changed and carries a Co-Authored-By line for the AI.
Building from source
Requirements: JDK 17 or newer and the Android SDK (platform 36).
cd wetter # or: cd uhr, cd rechner
./gradlew :app:assembleRelease # APK in app/build/outputs/apk/release/
./gradlew :app:testDebugUnitTest # unit + screenshot tests
./gradlew :app:recordRoborazziDebug # re-render replica/wetter/clone-screens/
Release builds are signed with the project key from ~/.android/nogoogleapps-release.properties (kept outside the repository); without it they fall back to the debug key for local testing. scripts/release.sh <app> builds, signs and publishes a release in the format Obtainium expects.
Repository layout
replica/<app>/ recon, architecture, design system, build log, screenshots (one folder per app)
wetter/ the weather app (Kotlin, Jetpack Compose, Glance widgets, Room, WorkManager)
messages/ the SMS app (Kotlin, Jetpack Compose, system SMS provider)
telefon/ the phone app (Kotlin, Jetpack Compose, InCallService, system call log and contacts)
rechner/ the calculator (Kotlin, Jetpack Compose, own exact expression engine)
uhr/ the clock and alarm app (Kotlin, Jetpack Compose, AlarmManager, Glance, Room)
Credits
- Weather data: Open-Meteo.com, CC BY 4.0
- Place names: © OpenStreetMap contributors, via Nominatim
- UI icons: Material Symbols, Apache 2.0
- Method: Replica by Jake Schincariol
License
Not chosen yet. Until a license file is added, all rights are reserved by the author.






















