Network Survey
com.craxiom.networksurvey
Zapstore _@zapstore.dev Republished from GitHub / F-Droid by the Zapstore main account.
The Network Survey Android App provides a basic survey capability for logging and analyzing Cellular networks, Wi-Fi networks, Bluetooth Devices, and GNSS constellations. Capture detailed records of signal strength, network information, and device data. All data can be conveniently logged to GeoPackage or CSV files for offline analysis. Alternatively, choose to live stream the data via MQTT or gRPC protocols for real-time monitoring and integration with other systems. This app has the ability to access your device's location in the background. The background location permission is needed to start Network Survey at boot. More information can be found in the App's privacy policy located at https://www.networksurvey.app/privacy-policy The cellular logging feature logs several details about the current serving cell, and then some basic information about the neighbor cells. This app won't log all 5 cellular protocols at once. Instead, it will only log information about the protocols that are current connected. If logging for one specific protocol is desired, then the phone must be locked to that protocol (try using *#*#4636#*#* from the dial pad). The cellular survey records can be streamed to either a gRPC server or a MQTT broker. This is not on by default and a gRPC server or MQTT Broker needs to be setup for this feature to work. See https://github.com/christianrowlands/network-survey-messaging for more details on setting up a network survey gRPC server. See https://mosquitto.org for information on setting up a MQTT Broker. A bonus feature of this app is its ability to create a Call Detail Record (CDR) file. If enabled, CDR events are logged to a CSV file. The app also has a calculator that converts an LTE Cell ID to the corresponding eNodeB ID and Sector ID, and a calculator that converts an LTE PCI to the corresponding Primary Sync Sequence (PSS) and Secondary Sync Sequence (SSS). I hope you enjoy this app as much as I have enjoyed writing it. If you have any feature requests please feel free to reach out by creating a GitHub issue at the link below. The source code for this app lives here: https://github.com/christianrowlands/android-network-survey Icon made by [Smashicons](https://www.google.com/url?q=https%3A%2F%2Fwww.flaticon.com%2Fauthors%2Fsmashicons&sa=D&sntz=1&usg=AOvVaw2XvJNemynGWDbSkFkzGJ7x) from [www.flaticon.com](https://www.google.com/url?q=https%3A%2F%2Fwww.flaticon.com%2F&sa=D&sntz=1&usg=AOvVaw12j7OrAqLTutwmj8skso_3) is licensed by [CC BY 3.0](http://www.google.com/url?q=http%3A%2F%2Fcreativecommons.org%2Flicenses%2Fby%2F3.0%2F&sa=D&sntz=1&usg=AOvVaw3Eh1gGyJ9u8Bm-KS6q0hXo)
First release: Jan 29, 2026, 12 total releases.
Most recent release: Sep 21, 2026.
Appears in 4 app stacks.
0 sats / 0 zaps received in the past year.
Sats Received
Underlying data available via MCP: app_zaps, app_releases.
Zap Count
Underlying data available via MCP: app_zaps, app_releases.
Releases
- Sep 21, 2026 1.59## What's Changed **NEW FEATURES** * Add a "My survey points" map layer that shows where your surveys actually recorded data, on both the tower map and the Survey Monitor map. [#101](https://github.com/christianrowlands/android-network-survey/issues/101) * Color survey points by signal strength, technology, provider, sent status, cell, or area (TAC/LAC), and switch the layer between cellular, Wi-Fi, and Bluetooth. * Filter survey points by when they were surveyed, which upload destination collected them, and whether they have been sent, with the active filters shown as dismissible chips on the map. * Add a Cellular Tools screen with a browsable reference of every LTE and 5G NR band, searchable by band designator, name, EARFCN, NARFCN, or frequency. * Rename the Cellular Calculators screen to Cellular Tools with Bands and Calculators panes, and add a Channel to Band calculator that resolves an EARFCN or NARFCN to its band and shows the frequency. * Tap the Band field on the cellular details screen to open that band's entry in the reference. * Rework the ongoing survey notification to report the state of the survey.
More…
**IMPROVEMENTS** * Load towers onto the map through a session tile cache, so panning back to an area you have already viewed, or zooming into it, no longer refetches it. * Raise the on-map tower budget from 7,500 to 20,000, and build the map features off the main thread. * Replace rather than stack new tower alerts, make them dismissible, and count towers per survey. * Translation updates contributed through Weblate. **BUG FIXES** * Fix the 5G NR band being left blank when the device does not report one and the NARFCN falls in more than one band. Every candidate is now listed (for example `n48 / n77 / n78`), with a different separator than the bands the modem reported. * Fix the tower map repeatedly refetching a dense city view after the server truncated the result. * Fix two- and three-digit MNCs producing colliding tower identifiers, which could open the wrong tower when one was tapped. --- ### NS Messaging API This release runs on NS Messaging API version 2.6.0. --- ### APK Downloads Each variant is built as per-architecture APKs for smaller download sizes. **Most users should download the `arm64-v8a` APK** (almost all modern Android phones). If unsure, use the `universal` APK which works on all devices but is larger. | Suffix | Architecture | Devices | |--------|-------------|---------| | `arm64-v8a` | 64-bit ARM | Most modern phones/tablets | | `armeabi-v7a` | 32-bit ARM | Older phones | | `x86_64` | 64-bit x86 | Some tablets, Chromebooks, emulators | | `x86` | 32-bit x86 | Older emulators | | `universal` | All | Works everywhere (larger file size) | The **regular-release** APK is the same as what can be found on the Google Play Store which contains the tracking library Google Analytics. The **cdr-release** APK is the same as the regular-release APK, but with full CDR support (See README.md for more details) and it also does NOT contain ANY tracking libraries such as Google Analytics. ## What's Changed * Translations update from Hosted Weblate by @hosted-weblate[bot] in https://github.com/christianrowlands/android-network-survey/pull/146 * Translations update from Hosted Weblate by @hosted-weblate[bot] in https://github.com/christianrowlands/android-network-survey/pull/150 **Full Changelog**: https://github.com/christianrowlands/android-network-survey/compare/v1.58...v1.59 - Sep 2, 2026 1.58## What's Changed **NEW FEATURES** * Add a Slovak translation, contributed through Weblate. (Thanks Pa Di) * Add a Romanian translation, contributed through Weblate. (Thanks Laur Ioniță) * Add the AGC (Automatic Gain Control) column to the GNSS Status UI. * Log MMS events (INCOMING_MMS and OUTGOING_MMS) in the CDR file. CDR variant only. * Log and stream `gnssAge` and `networkAge` on device status records, the age of the extra GNSS and network provider fixes reported when the location provider is set to "All". Without an age, a receiver that had stopped producing fixes looked identical to one still working. Device status CSV version is now 0.6.0. (NS Messaging API 2.6.0) * Log and stream `mockLocation` on device status records, reporting that the location came from a mock location provider. It is only ever sent when the location really was mocked. (NS Messaging API 2.6.0) * Populate `usedInSolution` on GNSS records, in the CSV file, the GeoPackage file, and the MQTT and gRPC streams. Android reports which satellites went into the position solution on the GNSS status rather than on the raw measurements the records are built from, so the app now tracks both and joins them. A satellite the status did not mention is left empty rather than reported as unused. GNSS CSV version is now 0.4.0.
More…
**IMPROVEMENTS** * Report `locationAge` on every Android version. The age was previously only measured on Android 13 and newer. This affects every record type. * Drop the unused RECEIVE_SMS permission from the CDR variant. SMS events have been captured through the message store (READ_SMS) since 1.29, so the broadcast permission was never needed. **BUG FIXES** * Fix the tower map issuing queries when the map bounds are not usable, which could return no towers on the first load. --- ### NS Messaging API This release runs on NS Messaging API version 2.6.0. --- ### APK Downloads Each variant is built as per-architecture APKs for smaller download sizes. **Most users should download the `arm64-v8a` APK** (almost all modern Android phones). If unsure, use the `universal` APK which works on all devices but is larger. | Suffix | Architecture | Devices | |--------|-------------|---------| | `arm64-v8a` | 64-bit ARM | Most modern phones/tablets | | `armeabi-v7a` | 32-bit ARM | Older phones | | `x86_64` | 64-bit x86 | Some tablets, Chromebooks, emulators | | `x86` | 32-bit x86 | Older emulators | | `universal` | All | Works everywhere (larger file size) | The **regular-release** APK is the same as what can be found on the Google Play Store which contains the tracking library Google Analytics. The **cdr-release** APK is the same as the regular-release APK, but with full CDR support (See README.md for more details) and it also does NOT contain ANY tracking libraries such as Google Analytics. **Full Changelog**: https://github.com/christianrowlands/android-network-survey/compare/v1.57...v1.58 - Aug 4, 2026 1.57## What's Changed **BUG FIXES** * Show the 5G NSA secondary cell (the NR cell carrying your 5G data) in its own "NR Secondary Cell Details" card instead of the NR Neighbors table, where it was indistinguishable from a real neighbor. [#136](https://github.com/christianrowlands/android-network-survey/issues/136) * Fix the Streaming Queue Limit setting ignoring an explicit `0`. A value of `0` now means disabled (unbounded queue) as the setting description states, instead of being silently clamped up to the default. * Fix Bluetooth and Wi-Fi list rows collapsing or truncating text at large font and display sizes. Long company and device names now ellipsize, and the Wi-Fi vendor label wraps below the BSSID. * Fix the Provider Colors screen showing stale color overrides after colors were edited from the tower map. * Fix NS Analytics uploads stalling behind a batch that the server permanently rejects. Records past the retry cap are purged, and a retry only counts against the cap on a definitive server rejection, so outages, recoverable authorization states, and rate limiting can never cause records to be dropped. **NEW FEATURES**
More…
* Log and stream a new `connectionStatus` field on LTE and NR records (NS Messaging API 2.5.0), identifying the device's connection to each cell (`PRIMARY_SERVING`, `SECONDARY_SERVING`, `NEIGHBOR`). This lets downstream consumers tell the 5G NSA data leg apart from neighbor cells. In the CSV logs an unreported status is written as an empty cell (unlike the older `lteBandwidth` column, which writes the literal `UNKNOWN`; that column keeps its historical behavior). * Log and stream a new `cellBandwidthsKhz` field on LTE and NR records: the per-carrier bandwidths of the device's data connection at scan time, populated on actively used cells only. Two or more entries means carrier aggregation was active. In the CSV and GeoPackage logs the value is semicolon-joined kHz values (e.g. `20000;10000`). The LTE CSV version is now 0.6.0 and the NR CSV version is 0.5.0. * Redesign the cellular Network Technology card. It now leads with the technology actually in use (for example "NR · Standalone" or "LTE + NR · NSA", distinguishing 5G Standalone from Non-Standalone), with always-visible Voice, Data, and Branding pills, and shows carrier aggregation as per-carrier bandwidth chips with an aggregate summary. * Add networks to the Wi-Fi Watchlist directly from the Wi-Fi Network Details screen. The eye icon opens the Add to Watchlist sheet pre-filled with the network's SSID and BSSID, or jumps to the Watchlist screen if the network is already watched. * Fill in the 5G NR band from the NARFCN when the device does not report one, and keep the NR Secondary Cell card visible with an Idle badge and a "last seen" time when the NR leg detaches. The idle card hides after two minutes or when the serving cell changes. **IMPROVEMENTS** * Redesign the SSID Exclusion List and Provider Colors screens to match the Watchlist UI, with bottom sheets in place of the add dialogs and a confirmation before removing an entry. * Update the Bluetooth company identifiers and member UUIDs to the latest Bluetooth SIG data. * Update Kotlin to 2.4.10, and update Compose, Hilt, gRPC, Firebase, MapLibre, and Vico to the latest versions. --- ### NS Messaging API This release runs on NS Messaging API version 2.5.0. --- ### APK Downloads Each variant is built as per-architecture APKs for smaller download sizes. **Most users should download the `arm64-v8a` APK** (almost all modern Android phones). If unsure, use the `universal` APK which works on all devices but is larger. | Suffix | Architecture | Devices | |--------|-------------|---------| | `arm64-v8a` | 64-bit ARM | Most modern phones/tablets | | `armeabi-v7a` | 32-bit ARM | Older phones | | `x86_64` | 64-bit x86 | Some tablets, Chromebooks, emulators | | `x86` | 32-bit x86 | Older emulators | | `universal` | All | Works everywhere (larger file size) | The **regular-release** APK is the same as what can be found on the Google Play Store which contains the tracking library Google Analytics. The **cdr-release** APK is the same as the regular-release APK, but with full CDR support (See README.md for more details) and it also does NOT contain ANY tracking libraries such as Google Analytics. **Full Changelog**: https://github.com/christianrowlands/android-network-survey/compare/v1.56...v1.57 - Jul 3, 2026 1.56## What's Changed **BUG FIXES** * Fix duplicate Mission IDs within a single survey session, where phone state records could be assigned an earlier Mission ID than the other records in the same session. **NEW FEATURES** * Add a Wi-Fi Watchlist. Save networks by SSID and/or BSSID, get alerted when a watched network is seen during a survey, and browse a history of past sightings with a per-sighting details screen showing the sighting locations on a map. * Import a watchlist from a shared link, with a confirmation preview that merges the imported networks into your existing list without deleting or overwriting anything. * Stream the Wi-Fi Watchlist over MQTT. Publish a match event whenever a watched network is seen, plus the full watchlist as a snapshot on connect and on every change. A Watchlist stream toggle (on by default) lives in the Watchlist settings and can be controlled by MDM. * Add a display filter to the Wi-Fi network list, with SSID/BSSID search and band selection opened from the app bar, and an "Excluded" tag on rows and groups for networks that are on the SSID Exclusion List.
More…
* Display the timing advance (TA) for 5G NR. * Add a Chinese (Simplified) translation. [#75](https://github.com/christianrowlands/android-network-survey/issues/75) (Thanks [zhengyang3552](https://github.com/zhengyang3552)) **IMPROVEMENTS** * Default NS Analytics uploads to allowed unless explicitly blocked by MDM, with a clearer upload-status message when uploads are disabled by policy. * Migrate all dialogs to a shared Jetpack Compose dialog system for a consistent look and feel, and consolidate the three sequential startup permission rationale dialogs into a single screen. --- ### NS Messaging API This release runs on NS Messaging API version 2.4.0. --- ### APK Downloads Each variant is built as per-architecture APKs for smaller download sizes. **Most users should download the `arm64-v8a` APK** (almost all modern Android phones). If unsure, use the `universal` APK which works on all devices but is larger. | Suffix | Architecture | Devices | |--------|-------------|---------| | `arm64-v8a` | 64-bit ARM | Most modern phones/tablets | | `armeabi-v7a` | 32-bit ARM | Older phones | | `x86_64` | 64-bit x86 | Some tablets, Chromebooks, emulators | | `x86` | 32-bit x86 | Older emulators | | `universal` | All | Works everywhere (larger file size) | The **regular-release** APK is the same as what can be found on the Google Play Store which contains the tracking library Google Analytics. The **cdr-release** APK is the same as the regular-release APK, but with full CDR support (See README.md for more details) and it also does NOT contain ANY tracking libraries such as Google Analytics. ## What's Changed * Add Chinese translation by @zhengyang3552 in https://github.com/christianrowlands/android-network-survey/pull/134 ## New Contributors * @zhengyang3552 made their first contribution in https://github.com/christianrowlands/android-network-survey/pull/134 **Full Changelog**: https://github.com/christianrowlands/android-network-survey/compare/v1.55...v1.56 - Jun 3, 2026 1.55## What's Changed **BUG FIXES** * Fix ann error when a survey's CSV logging is toggled off before any record is written. **NEW FEATURES** * Roll the Mission ID per survey session instead of once per app lifetime, and surface it to users with a copyable Dashboard card (with help dialog) and a copyable Mission ID row on the Survey Monitor Status tab. * Add a "Last Updated" filter to the tower map to hide towers older than 6mo / 1yr / 2yr / 5yr, applied server-side and persisted across launches. [#131](https://github.com/christianrowlands/android-network-survey/issues/131) * Pause NS Analytics uploads when a workspace quota is exceeded, with an "uploads paused" notification and an in-app banner showing quota usage and a manage-subscription link.
More…
**IMPROVEMENTS** * Move the OpenCelliD/BeaconDB Upload card to the bottom of the Dashboard to avoid confusion between the NS Analytics and Upload Start buttons. --- ### NS Messaging API This release runs on NS Messaging API version 2.3.0. --- ### APK Downloads Each variant is built as per-architecture APKs for smaller download sizes. **Most users should download the `arm64-v8a` APK** (almost all modern Android phones). If unsure, use the `universal` APK which works on all devices but is larger. | Suffix | Architecture | Devices | |--------|-------------|---------| | `arm64-v8a` | 64-bit ARM | Most modern phones/tablets | | `armeabi-v7a` | 32-bit ARM | Older phones | | `x86_64` | 64-bit x86 | Some tablets, Chromebooks, emulators | | `x86` | 32-bit x86 | Older emulators | | `universal` | All | Works everywhere (larger file size) | The **regular-release** APK is the same as what can be found on the Google Play Store which contains the tracking library Google Analytics. The **cdr-release** APK is the same as the regular-release APK, but with full CDR support (See README.md for more details) and it also does NOT contain ANY tracking libraries such as Google Analytics. **Full Changelog**: https://github.com/christianrowlands/android-network-survey/compare/v1.54...v1.55 - May 15, 2026 1.54## What's Changed **BUG FIXES** * Fix CSV survey log files appending to the same file across logging toggle cycles instead of rotating. * Fix a nav drawer resource-not-found crash by converting the remaining drawer PNG icons to vector drawables. * Fix the tower map empty state when filtered to the serving cell only, showing "No serving cell tower found" and correctly flagging the empty result when there is no serving cell to look up. **NEW FEATURES** * Add a PLMN Lookup screen for searching MCC/MNC operators by identifier, MCC, MNC, country, brand, or operator, with sortable results, a details screen, and an info bottom sheet explaining PLMN, MCC/MNC, brand vs operator, and TADIG. * Add an OUI Lookup screen for searching MAC address manufacturers.
More…
**IMPROVEMENTS** * Reorganize the navigation drawer into labeled "Streaming & Cloud", "Reference Tools", and "Help & Resources" sections. * Bump targetSdkVersion and compileSdk to 37 (Android 17) and request ACCESS_LOCAL_NETWORK for the gRPC and MQTT connection workflows. --- ### APK Downloads Each variant is built as per-architecture APKs for smaller download sizes. **Most users should download the `arm64-v8a` APK** (almost all modern Android phones). If unsure, use the `universal` APK which works on all devices but is larger. | Suffix | Architecture | Devices | |--------|-------------|---------| | `arm64-v8a` | 64-bit ARM | Most modern phones/tablets | | `armeabi-v7a` | 32-bit ARM | Older phones | | `x86_64` | 64-bit x86 | Some tablets, Chromebooks, emulators | | `x86` | 32-bit x86 | Older emulators | | `universal` | All | Works everywhere (larger file size) | The **regular-release** APK is the same as what can be found on the Google Play Store which contains the tracking library Google Analytics. The **cdr-release** APK is the same as the regular-release APK, but with full CDR support (See README.md for more details) and it also does NOT contain ANY tracking libraries such as Google Analytics. **Full Changelog**: https://github.com/christianrowlands/android-network-survey/compare/v1.53...v1.54 - Apr 28, 2026 1.53## What's Changed **BUG FIXES** * Fix a resource not found crash on certain devices by replacing additional PNG icons (bug, calculator) with vector drawables. **NEW FEATURES** * Redesign the Wi-Fi list and Wi-Fi Network Details UIs in Jetpack Compose. The list now defaults to grouping rows by SSID. * Resolve manufacturer names for Wi-Fi BSSIDs and Bluetooth MAC addresses via an OUI lookup service. Adds a Bluetooth manufacturer card that reconciles Company ID, UUID vendor, and OUI sources, with a new "Network lookups" settings toggle (MDM-overridable) and an offline cache. * Add long-press copy on the SSID and BSSID in the Wi-Fi list and Network Details UIs.
More…
**IMPROVEMENTS** * Replace the expandable help card on the gRPC Connection screen with an app bar help icon, matching the MQTT screen pattern. * Tighten dashboard spacing and shorten the OpenCelliD/BeaconDB upload description. * Switch the per-ABI versionCodeOverride to the F-Droid splitabi convention. [#127](https://github.com/christianrowlands/android-network-survey/issues/127) Runs on NS Messaging API version to 2.3.0 --- ### APK Downloads Each variant is built as per-architecture APKs for smaller download sizes. **Most users should download the `arm64-v8a` APK** (almost all modern Android phones). If unsure, use the `universal` APK which works on all devices but is larger. | Suffix | Architecture | Devices | |--------|-------------|---------| | `arm64-v8a` | 64-bit ARM | Most modern phones/tablets | | `armeabi-v7a` | 32-bit ARM | Older phones | | `x86_64` | 64-bit x86 | Some tablets, Chromebooks, emulators | | `x86` | 32-bit x86 | Older emulators | | `universal` | All | Works everywhere (larger file size) | The **regular-release** APK is the same as what can be found on the Google Play Store which contains the tracking library Google Analytics. The **cdr-release** APK is the same as the regular-release APK, but with full CDR support (See README.md for more details) and it also does NOT contain ANY tracking libraries such as Google Analytics. **Full Changelog**: https://github.com/christianrowlands/android-network-survey/compare/v1.52...v1.53 - Apr 8, 2026 1.52## What's Changed **BUG FIXES** * Fix the MQTT dashboard toggle not showing the connecting status immediately when toggling the connection on. **NEW FEATURES** * Encrypt MQTT credentials and the OpenCelliD API key with the Android Keystore using AES-256-GCM, including a one-time migration of existing plain-text credentials to encrypted storage. * Add a PLMN field to preserve MNC leading zeros across the app, including GeoPackage tables, CSV exports, protobuf messages, and the UI display. **IMPROVEMENTS**
More…
* Migrate the Dashboard from Fragment to Jetpack Compose with a full MVVM architecture using per-card StateFlows for efficient recomposition. * Use string MCC/MNC across the app to preserve leading zeros, including the tower cache database, tower map API, and cell search. --- ### APK Downloads Each variant is built as per-architecture APKs for smaller download sizes. **Most users should download the `arm64-v8a` APK** (almost all modern Android phones). If unsure, use the `universal` APK which works on all devices but is larger. | Suffix | Architecture | Devices | |--------|-------------|---------| | `arm64-v8a` | 64-bit ARM | Most modern phones/tablets | | `armeabi-v7a` | 32-bit ARM | Older phones | | `x86_64` | 64-bit x86 | Some tablets, Chromebooks, emulators | | `x86` | 32-bit x86 | Older emulators | | `universal` | All | Works everywhere (larger file size) | The **regular-release** APK is the same as what can be found on the Google Play Store which contains the tracking library Google Analytics. The **cdr-release** APK is the same as the regular-release APK, but with full CDR support (See README.md for more details) and it also does NOT contain ANY tracking libraries such as Google Analytics. **Full Changelog**: https://github.com/christianrowlands/android-network-survey/compare/v1.51...v1.52 - Mar 19, 2026 1.51## What's Changed **BUG FIXES** * Fix the uploaded records count in the upload progress status UI. * Fix the JSON creation for the Bluetooth message by updating the protobuf to have UNKNOWN as the default value instead of PUBLIC. **NEW FEATURES** * Add an auto-upload setting for the OpenCelliD and BeaconDB survey along with an option to only auto-upload over wifi (to prevent cellular data use). [#112](https://github.com/christianrowlands/android-network-survey/issues/112) * Add a user setting to disable the creation of cellular neighbor cell records, so only serving cell records are included in log files, MQTT/gRPC streaming, NS Analytics upload, and UI display. [#124](https://github.com/christianrowlands/android-network-survey/issues/124) * Generate APKs per ABI to reduce the download size for each processor architecture. [#117](https://github.com/christianrowlands/android-network-survey/issues/117)
More…
* Display a badge with the count of operators/providers on each tower in the tower map view. [#95](https://github.com/christianrowlands/android-network-survey/issues/95) **IMPROVEMENTS** * Rework the Location Card UI to be more compact — replace the card with a status row, with click-through for full location details. Also removed from the Cellular Details UI. [#61](https://github.com/christianrowlands/android-network-survey/issues/61) * Migrate kapt to KSP, remove Jetifier, and clean up build warnings. * Update to v3 of the Vico charts library. * Upgrade AGP to version 9.1.0 and Gradle to version 9.3.1. --- ### APK Downloads Each variant is built as per-architecture APKs for smaller download sizes. **Most users should download the `arm64-v8a` APK** (almost all modern Android phones). If unsure, use the `universal` APK which works on all devices but is larger. | Suffix | Architecture | Devices | |--------|-------------|---------| | `arm64-v8a` | 64-bit ARM | Most modern phones/tablets | | `armeabi-v7a` | 32-bit ARM | Older phones | | `x86_64` | 64-bit x86 | Some tablets, Chromebooks, emulators | | `x86` | 32-bit x86 | Older emulators | | `universal` | All | Works everywhere (larger file size) | The **regular-release** APK is the same as what can be found on the Google Play Store which contains the tracking library Google Analytics. The **cdr-release** APK is the same as the regular-release APK, but with full CDR support (See README.md for more details) and it also does NOT contain ANY tracking libraries such as Google Analytics. **Full Changelog**: https://github.com/christianrowlands/android-network-survey/compare/v1.50...v1.51 - Mar 4, 2026 1.50## What's Changed **BUG FIXES** * Prevent an edge case crash where the user removes the Bluetooth permission while a survey is ongoing. * Fix a location provider issue on de-googled OSs (e.g. GrapheneOS) where FUSED causes an error state when ALL is selected as the location provider. [#115](https://github.com/christianrowlands/android-network-survey/issues/115) * Fix an edge case crash on certain devices running older Android OS versions by switching from SwitchCompat to MaterialSwitch. * Fix an issue where the GeoPackage feature DAO cache was not cleared when turning off file logging. **NEW FEATURES** * Display multiple towers at the same location on the map with a tower list bottom sheet, replacing the old tower details dialog. [#95](https://github.com/christianrowlands/android-network-survey/issues/95)
More…
* Display a number badge indicating the tower count at each map location. * Add a color picker for selecting which color is used for each PLMN on the tower map for both tower icons and tower list colors. [#95](https://github.com/christianrowlands/android-network-survey/issues/95) * Use different colors in the tower list and tower icons on the map for different cellular providers to help visually differentiate them. * Display the eNB ID and Sector ID in the tower list and tower details bottom sheet for LTE towers. * Add the missionId and recordNumber fields to the CDR and device status messages. **IMPROVEMENTS** * Switch the default map layer to OpenFreeMap and fall back to OpenFreeMap if MapTiler is unavailable. * Remove the apply button from the tower map filter bottom sheet and instead apply changes on dismiss. * Increase the map view tower icon halo width for better visibility. * Upgrade AGP to version 9.0.1. * Update the MQTT library to version 1.2.0. * Reduce memory pressure by reusing the GeoPackage feature DAO instead of creating a new one for each record. * Update the Bluetooth Company Identifiers and member UUIDs. --- The regular-release apk is the same as what can be found on the Google Play Store which contains the tracking library Google Analytics. The cdr-release apk is the same as the regular-release apk, but with full CDR support (See README.md for more details) and it also does NOT contain ANY tracking libraries such as Google Analytics. **Full Changelog**: https://github.com/christianrowlands/android-network-survey/compare/v1.49...v1.50 - Feb 19, 2026 1.49## What's Changed **BUG FIXES** * Fix a race condition crash related to layout measurement by removing the focusable aspect of certain Compose components. * Fix the position of the C/N0 indicators on the GNSS Sky View meter bar when in landscape mode. * Fix resource not found crashes by replacing additional PNG icons with SVG versions. **NEW FEATURES** * Redesign the File Logging section of the Dashboard UI to be more user friendly, and rewrite it in Jetpack Compose. * Rework Phone State surveys to be independent of the cellular and device status surveys. Phone state surveys can now be started and stopped independently for file logging, MQTT streaming, NS Analytics uploads, and gRPC streaming. An auto-start setting ties phone state surveys to the cellular survey.
More…
* Add a custom landscape view for the GNSS Sky View to better fit the sky view, C/N0 meter, and legend on the screen. * Add links to the NS Analytics web app and analytics details screen from the app. **IMPROVEMENTS** * Improve the help dialogs for phone state, CDR, file vs MQTT, upload, and analytics to use a more modern UI approach. * Update the phone state icon. * Upgrade AGP to version 9.0.0. * Upgrade the Java version to 21 in the CI/CD pipeline. * Update all libraries and the Kotlin version to the latest. --- The regular-release apk is the same as what can be found on the Google Play Store which contains the tracking library Google Analytics. The cdr-release apk is the same as the regular-release apk, but with full CDR support (See README.md for more details) and it also does NOT contain ANY tracking libraries such as Google Analytics. **Full Changelog**: https://github.com/christianrowlands/android-network-survey/compare/v1.48...v1.49 - ## What's Changed **BUG FIXES** * Fix a bug where the second time the Details UI was opened the upload status UI was not being updated properly after an upload completed. * Disable focus on the compose components of the GNSS Sky View and Cellular Details UI to prevent an edge case crash when switching tabs rapidly. * Fixed an edge case crash with a fragment initialization race condition where the AndroidViewBinding inflates a layout containing FragmentContainerView and the fragment may not be attached to the FragmentManager yet. * Fix a resource not found crash on certain devices that can't load specific png files by replacing the settings and cancel icons with SVG only files. * Prevent a crash when centering the map on the user's location by using a local reference to the map just in case the map is no longer available when it completes. **NEW FEATURES**
More…
* Adds a user preference for switching between metric and imperial units in the various UIs. This does not change the unit of measurement written to the csv files, or sent over MQTT. [#118](https://github.com/christianrowlands/android-network-survey/issues/118) * Implements a max MQTT queue size user preference that pauses the survey once the limit is reached to prevent Out of Memory app crashes when the MQTT queue grows too large. Also applies to gRPC queue and the preference can be set via MDM or in the local settings. When set to 0 the old behavior is applied where the queue can grow until a crash occurs. **IMPROVEMENTS** * Display a proper failure message when the auto-upload is unsuccessful. * Added a location provider hint that is displayed if the location is not obtained in 15 seconds. This is to help address a bug where Android says a location provider is available, but it never provides a location. [#115](https://github.com/christianrowlands/android-network-survey/issues/115) * Improve the performance of loading towers in the map view. * Display an error dialog if the the MQTT settings is are too large to fit in the QR code. * Adds a basic monochrome launcher icon to support the icon theme setting for Android (need to add a better one later). [#100](https://github.com/christianrowlands/android-network-survey/issues/100) --- The regular-release apk is the same as what can be found on the Google Play Store which contains the tracking library Google Analytics. The cdr-release apk is the same as the regular-release apk, but with full CDR support (See README.md for more details) and it also does NOT contain ANY tracking libraries such as Google Analytics. **Full Changelog**: https://github.com/christianrowlands/android-network-survey/compare/v1.47...v1.48