The Android Framework provides access to raw GNSS measurements on several Android devices.
This article lists Android devices that support raw GNSS measurements as well as tools to log and analyze GNSS data. You can find the tools in the GPS Measurement Tools repo on GitHub, which includes the GNSS Logger APK, the GNSS Analysis app for Linux, Windows, macOS, and the Installation and User Manual.
Original equipment manufacturers (OEMs), developers, and researchers can make use of the tools in this page to test new phone designs, validate functionality, develop new algorithms, evaluate improvements to the GNSS system implementation as well as building value added apps.
SUPL Client Sample Code
Suplclient is sample code that accesses supl.google.com to obtain real time ephemeris. The SuplTester class provides an example on how to use the SUPL Client Project. The SuplTester sets up the SUPL TCP connection specifications, then at a given latitude and longitude sends an LPP SUPL request and prints the SUPL server response.
Android devices that support raw GNSS measurements
Before you can get any raw GNSS output, you need to make sure that you have a device that can capture such data. Most devices manufactured in 2016 or later and shipped with Android 7.0 or higher provide raw GNSS data.
Depending on the device, raw GNSS measurements can include all or some of the following data:
- Pseudorange and pseudorange rate.
- Navigation messages.
- Accumulated delta range or carrier.
- Hardware (HW) clock.
The table below lists devices that support raw GNSS measurements and the data they provide. This isn't a comprehensive list. Contact the manufacturer to make sure that a specific device supports raw GNSS measurements.
| Model | Android version | AGC | Nav messages | ADR (carrier phase) | L5 | Global systems |
|---|---|---|---|---|---|---|
| Xiaomi Mi 9 | 9.0 | yes | no | no | yes | GPS GLO GAL BDS QZS |
| Samsung Galaxy Note 10+ | 9.0 | yes | no | no | yes | GPS GLO GAL |
| Samsung Galaxy Note 10 | 9.0 | yes | no | no | yes | GPS GLO GAL |
| Samsung Galaxy S10e | 9.0 | yes | no | no | no | GPS GLO GAL |
| Samsung Galaxy S10+ | 9.0 | yes | no | no | no | GPS GLO |
| Samsung Galaxy S10 | 9.0 | yes | no | no | no | GPS GLO GAL |
| Huawei P30 Pro | 9.0 | no | no | yes | yes | GPS GLO GAL BDS |
| LG G8 ThinQ | 9.0 | yes | no | no | no | GPS GLO GAL |
| One Plus 7 Pro | 9.0 | yes | no | no | yes | GPS GLO GAL |
| One Plus 7 | 9.0 | yes | no | no | yes | GPS GLO GAL |
| Huawei Mate 20 X | 9.0 | no | yes | yes | yes | GPS GLO GAL QZS |
| Huawei Mate 20 RS (Porsche Design) | 9.0 | no | no | yes | yes | GPS GLO GAL BDS |
| Huawei Mate 20 Pro | 9.0 | no | no | yes | yes | GPS GLO GAL BDS |
| Huawei Mate 20 | 9.0 | no | no | yes | yes | GPS GLO GAL BDS |
| Huawei Mate RS (Porsche Design) | 8.1 | no | yes | yes | no | GPS GLO GAL |
| Pixel 3 XL | 9.0 | yes | no | no | no | GPS GLO GAL BDS |
| Pixel 3 | 9.0 | yes | no | no | no | GPS GLO GAL BDS |
| Vivo X21 | 9.0 | no | no | no | no | GPS GLO BDS |
| OPPO R15 Pro | 9.0 | no | no | no | no | GPS GLO GAL BDS |
| Xiaomi Mi 8 | 8.1 | no | yes | yes | yes | GPS GLO GAL BDS QZS |
| LG V40 ThinQ | 8.1 | no | no | no | no | GPS GLO GAL QZS |
| OnePlust 6T | 9.0 | no | no | no | no | GPS GLO GAL QZS |
| Samsung Note 9 | 8.1 | no | no | no | no | GPS GLO GAL QZS SBAS |
| LG G7 ThinQ | 8.0 | no | no | no | no | GPS GLO |
| Xiaomi Mix 2S | 9.0 | no | no | no | no | GPS GLO GAL SBAS |
| Huawei P20 | 8.1 | no | yes | yes | no | GPS GLO QZS |
| Samsung Galaxy S9 (Exynos)1 | 8.0 | no | yes | yes | no | GPS GLO GAL QZS |
| Samsung Galaxy S9+ | 8.0 | no | no | no | no | GPS GLO GAL |
| Sony Xperia XZ2 | 8.0 | no | no | no | no | GPS GLO GAL QZS |
| OPPO R15 | 9.0 | no | no | no | no | GPS GLO GAL BDS |
| HTC U11 Plus | 8.0 | no | no | no | no | GPS GLO |
| HTC U11 Life | 8.0 | no | no | no | no | GPS GLO |
| Huawei Mate 10 | 8.0 | no | yes | yes | no | GPS GLO |
| Huawei Mate 10 Pro | 8.0 | no | yes | yes | no | GPS GLO QZS |
| Google Pixel 2 XL | 8.0 | yes | no | no | no | GPS GLO GAL BDS QZS |
| Google Pixel 2 | 8.0 | yes | no | no | no | GPS GLO GAL BDS QZS |
| Sony Xperia XZ1 | 8.0 | no | no | no | no | GPS GLO GAL BDS |
| Samsung Note 8 (Exynos) | 7.1 | no | yes | yes | no | GPS GLO GAL BDS |
| Samsung Note 8 (QCOM) | 7.1 | no | no | no | no | GPS GLO GAL BDS |
| LG V30 | 7.1.2 | no | no | no | no | GPS GLO GAL |
| Moto X4 2017 | 7.1 | no | no | no | no | GPS GLO GAL |
| Essential PH-1 | 7.1 | no | no | no | no | GPS GLO |
| Moto Z2 | 7.1 | no | no | no | no | GPS GLO |
| HTC U11 | 7.1 | no | no | no | no | GPS GLO |
| OPPO R11 | 7.1 | no | no | no | no | GPS GLO GAL BDS |
| Huawei Honor 9 | 7.0 | no | yes | yes | no | GPS GLO |
| Samsung S8 (Exynos)2 | 7.0 | no | yes | yes | no | GPS GLO GAL BDS QZS |
| Samsung S8 (QCOM)3 | 7.0 | no | no | no | no | GPS |
| Huawei P10 | 7.0 | no | yes | yes | no | GPS GLO GAL BDS QZS |
| Huawei P10 Lite | 7.0 | no | no | no | no | GPS |
| Huawei Honor 8 | 7.0 | no | yes | yes | no | GPS GLO BDS |
| Huawei Mate 9 | 7.0 | no | yes | yes | no | GPS GLO BDS |
| Huawei P9 | 7.0 | no | yes | yes | no | GPS GLO BDS |
| Google Pixel XL | 7.0 | no | no | no | no | GPS |
| Google Pixel | 7.0 | no | no | no | no | GPS |
| Nexus 6P4 | 7.0 | no | no | no | no | GPS |
| Nexus 5X4 | 7.0 | no | no | no | no | GPS |
| Nexus 9 (non cellular version)5 | 7.1 | no | yes | yes | no | GPS GLO |
1 Exynos, EMEA devices, Models: G960F or G965F
2 Exynos, EMEA devices, Models: G950F or G955F
3 QCOM, USA devices, Models: G950U or G955U
4 Raw measurements are provided only when a GPS position is available.
5 No duty cycling. Works only on the non cellular version of Nexus 9.
For more information about the data provided by a device, see Global Navigation Satellite Systems.
Logging raw measurements
You can use Android Studio to build an app that captures raw GNSS measurements and logs them to a file. The GPS Measurement Tools project includes GNSS Logger, a sample app that shows how to log data related to Android location, including raw GNSS measurements.
Download the GNSS Logger APK to install the sample app in your device.
To get GNSS output with the sample app, your device must support raw GNSS measurements. For more information, see Android devices that support raw GNSS measurements.
Once you have captured the GNSS log using the GNSS Logger, you can copy the log files from the device to your computer for further analysis. From within the GNSS Logger you can send the files to yourself via email or save them to Google Drive. Alternatively, you can save the files using the file management app on the device, or you can use the Android Debug Bridge (ADB) as explained in Copy files to/from a device.
To browse the sample source code, see the
GNSSLogger
folder in the GPS Measurement
Tools repository on GitHub.
Analyzing raw measurements
The GNSS Analysis app reads the GPS/GNSS raw measurements collected by the GNSS Logger and uses them to analyze the GNSS receiver behavior, as shown in figure 1.
You can download the app for Linux Windows, and macOS systems, or download the Installation and User Manual.

Figure 1. GNSS Logger collects the measurements that can be consumed by GNSS Analysis.
The GNSS Analysis app is built on MATLAB, but you don't need to have MATLAB to run it. The app is compiled into an executable that installs a copy of the MATLAB Runtime.
GNSS Analysis Control Panel
The GNSS Analysis control panel, shown in figure 2, lets you manage app features, such as:
- Select which satellites are displayed.
- Control the reference position, velocity, and time (PVT) used for calculating measurement errors.
- Generate analysis reports.
- Define a window in the data between start and end times.
)
Figure 2. GNSS Analysis control panel
GNSS Analysis interactive plots
The GNSS Analysis app provides interactive plots organized in radio frequency (RF), clocks, and measurements columns, as shown in figure 3.
)
Figure 3. GNSS Analysis app displaying interactive plots.
The RF column shows the following data:
- For each constellation, the four satellites with the strongest signals.
- For each satellite, the time plot of carrier to noise density (C/No).
- The skyplot of satellite positions.
The clock column shows the following data:
- The pseudoranges.
The offset frequency of the receiver clock, which is computed using one of the following reference positions:
- Automatically computed mean position.
- Latitude, longitude, and altitude entered by the user.
- National Marine Electronics Association (NMEA) file with truth reference PVT.
The offset of the standby clock that keeps time when the receiver resets the duty cycle of the primary oscillator.
The measurements column shows the following data:
- The weighted least squares position results obtained from the raw pseudoranges. The weighting is done using the reported uncertainty of each measurement, which is part of the raw measurement API spec.
- The errors of each pseudorange for each measurement.
The errors of each pseudorange rate for each measurement.
GNSS Analysis test report
GNSS Analysis can generate a test report, as shown in figure 4, that evaluates the API implementation, received signal, clock behavior, and measurement accuracy. For each case, the app reports whether the receiver passed or failed the test based on the performance measured against known benchmarks. The test report is useful for device manufacturers, who can use it as they iterate through the design and implementation of new devices. To generate the test report, click Make Report.

Figure 4. GNSS Analysis test report
The Compare tab provides a side-by-side comparison, shown in figure 5, of C/No from several GNSS log files, which is useful when comparing the RF performance of several devices.

Figure 5. Side-by-side comparison of C/No data from several log files
Interested in the source code? The GPS Measurement Tool Project provides an open source MATLAB example that you can use to perform the following actions using GPS constellation signals:
- Read data captured with the GNSS Logger sample app.
- Compute and visualize pseudoranges.
- Compute weighted least squares position and velocity.
- View and analyze carrier phase.
GNSS Analysis app v3.0.3.0 release notes
GNSS Analysis app version 3.0.3.0 includes the following updates:
- Adds Plots:
- Kalman Filter position from WLS PVT
- WLS relative position from ADR (Carrier Phase)
- ADR (Carrier Phase) Single Difference Residual
- Adds Refresh Positions to regenerate position plots based on selected satellites.
- Adds Elevation Mask control.
- Optimized downloading of ephemeris files, uses native unzip inside Matlab runtime for all BKG *.gz ZIP files.
- Adds Device Position as an option for Reference PVT.
- Adds
CustomDataFilter.mcapability, filtering on any of the # Raw header values.
Provide feedback
We want to improve the support for GNSS on Android. Let us know about any issues with GNSS support on Android by using the GNSS issue tracker. Please check if your issue has already been addressed in the FAQ before posting it.
If you have used the GNSS Analysis tools, please provide feedback by answering a short survey. If you have other questions or a request for support, see Developer Support Resources.
You can find answers to frequently asked questions in the GNSS Analysis Tools FAQs.

