• Stars
    star
    1,945
  • Rank 23,832 (Top 0.5 %)
  • Language
    Java
  • License
    Other
  • Created over 13 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

📡 Lightweight GPS Logging Application For Android.

GPSLogger githubactions pgp Weblate

GPSLogger is an Android app that logs GPS information to various formats (GPX, KML, CSV, NMEA, Custom URL) and has options for uploading (SFTP, OpenStreetMap, Google Drive, Dropbox, Email). This app aims to be as battery efficient as possible.

Read about GPSLogger's features here

Download

You can find it on F-Droid

You can download directly from the releases.

Contribute

You can help with translations on Weblate.

You can also submit pull requests for bug fixes and new features.

I'm not very good at UIs, so any work with the layouts would be appreciated!

License and policy

Licensed under GPL v2 | Third party licenses | Privacy policy

Verifying

It's good practice to verify downloads. In recent releases, a PGP signature and an SHA256 checksum will accompany each .apk.

Import PGP Public Key from the Ubuntu Keyserver or just gpg --recv-key 6989CF77490369CFFDCBCD8995E7D75C76CBE9A9

To verify the integrity and signature:

$ gpg --verify ~/Downloads/gpslogger-71.apk.asc

To verify checksum:

$ sha256sum -c ~/Downloads/gpslogger-71.apk.SHA256

Setting up the code

The project is based on the Android build system plugin for Gradle. These instructions are for Ubuntu Linux with Android Studio, but for other OSes, it should be roughly similar.

Set up your Android Development Environment

Follow the instructions on the Android Developer Website to set up your computer for development.

Download and install Android Studio (there's also a snap)

Clone the GPSLogger repository

git clone git://github.com/mendhak/gpslogger.git

Get the Android SDK extra repositories

This project uses certain Android libraries, you can install them using Google's poorly implemented sdkmanager:

  echo y | $HOME/android-sdk/tools/bin/sdkmanager 'tools'
  echo y | $HOME/android-sdk/tools/bin/sdkmanager 'platform-tools'
  echo y | $HOME/android-sdk/tools/bin/sdkmanager 'build-tools;26.0.2'
  echo y | $HOME/android-sdk/tools/bin/sdkmanager 'platforms;android-27'
  echo y | $HOME/android-sdk/tools/bin/sdkmanager 'platforms;android-25'
  echo y | $HOME/android-sdk/tools/bin/sdkmanager 'extras;google;m2repository'
  echo y | $HOME/android-sdk/tools/bin/sdkmanager 'extras;android;m2repository'
  echo y | $HOME/android-sdk/tools/bin/sdkmanager 'extras;google;google_play_services'

Create local.properties

Create a file called local.properties, pointing at your Android SDK directory.

cd gpslogger
echo "sdk.dir=/home/mendhak/Programs/Android" > local.properties

Import the project

Open up Android Studio and choose to import a project. Select the topmost build.gradle file under GPSLogger.

If you get an Import dialog, choose to Import project from external model

import

On the next screen, choose the defaults and proceed (default gradle wrapper)

import

Give it a minute and Android Studio will configure the projects and download the various libraries.

OpenStreetMap Setup (Optional)

Sign up for an account with OpenStreetMap and log in.

Click on 'oauth settings'

Click on 'Register your application'

Fill in the form with these details

Oauth settings

After registering the application, you will receive a 'Consumer Key' and a 'Consumer Secret'.
Place the keys in OSMJob.java and OpenStreetMapManager.java.

Dropbox Setup (Optional)

Sign up for an account with Dropbox.com

Go to the Dropbox Developers page and click on 'Create an App'

Use these settings, but choose a unique name

Dropbox settings

After creating the app, you will receive an app key and secret (the ones in the screenshot are fake)

Dropbox settings

Place the keys in your ~/.gradle/gradle.properties like this:

GPSLOGGER_DROPBOX_APPKEY=abcdefgh
GPSLOGGER_DROPBOX_APPSECRET=1234123456

Replace the Dropbox app key to your AndroidManifest.xml file

<!-- Change this to be db- followed by your app key -->
<data android:scheme="db-12341234"/>

Google Drive Setup (optional)

Sign up to Google Cloud Platform. Create a new project.

Under APIs and Services, enable the Google Drive API.
Next, go to the Oauth Consent Screen, going through the steps until you reach scopes. Add the https://www.googleapis.com/auth/drive.file scope.

scopes

Create some OAuth credentials, of type Android.
Under package name, use com.mendhak.gpslogger. For the SHA-1 Certificate fingerprint, get it using the keytool -keystore ~/.android/debug.keystore -list -v command.

oauth

Overview

GPSLogger is composed of a few main components;

design

Event Bus

The Event Bus is where all the cross communication happens. Various components raise their events on the Event Bus, and other parts of the application listen for those events. The most important one is when a location is obtained, it is placed on the event bus and consumed by many fragments.

GPS Logging Service

GPSLoggingService is where all the work happens. This service talks to the location providers (network and satellite). It sets up timers and alarms for the next GPS point to be requested. It passes location info to the various loggers so that they can write files. It also invokes the auto-uploaders so that they may send their files to DropBox, OSM, etc.

It also passes information to the Event Bus.

GPS Main Activity

This is the main visible form in the app. It consists of several 'fragments' - the simple view, detailed view and big view.

It takes care of the main screen, the menus and toolbars.

The fragments listen to the Event Bus for location changes and display it in their own way.

Session and AppSettings

Floating about are two other objects. Session contains various pieces of information related to the current GPSLogger run, such as current file name, the last known location, satellite count, and any other information which isn't static but is needed for the current run of GPSLogger.

AppSettings is a representation of the user's preferences.

These objects are visible throughout the application and can be accessed directly by any class, service, activity or fragment.

Working notes for F-Droid

Use the fdroidserver docker image. Clone the fdroid metadata repo and make changes to the com.mendhak.gpslogger.yml file.

git clone https://gitlab.com/fdroid/fdroiddata.git
cd fdroiddata

# https://f-droid.org/en/docs/Submitting_to_F-Droid_Quick_Start_Guide/
# initialize the metadata repo
docker run --rm -v /home/mendhak/Android/Sdk:/opt/android-sdk -v $(pwd):/repo -e ANDROID_HOME:/opt/android-sdk registry.gitlab.com/fdroid/docker-executable-fdroidserver:master init -v

# lint your metadata yml
docker run --rm -v /home/mendhak/Android/Sdk:/opt/android-sdk -v $(pwd):/repo -e ANDROID_HOME:/opt/android-sdk registry.gitlab.com/fdroid/docker-executable-fdroidserver:master lint com.mendhak.gpslogger -v
docker run --rm -v /home/mendhak/Android/Sdk:/opt/android-sdk -v $(pwd):/repo -e ANDROID_HOME:/opt/android-sdk registry.gitlab.com/fdroid/docker-executable-fdroidserver:master readmeta

# see if the latest tag will get picked up. 
docker run --rm -v /home/mendhak/Android/Sdk:/opt/android-sdk -v $(pwd):/repo -e ANDROID_HOME:/opt/android-sdk registry.gitlab.com/fdroid/docker-executable-fdroidserver:master checkupdates --auto com.mendhak.gpslogger
docker run --rm -v /home/mendhak/Android/Sdk:/opt/android-sdk -v $(pwd):/repo -e ANDROID_HOME:/opt/android-sdk registry.gitlab.com/fdroid/docker-executable-fdroidserver:master rewritemeta com.mendhak.gpslogger

# build
docker run --rm -v /home/mendhak/Android/Sdk:/opt/android-sdk -v $(pwd):/repo -e ANDROID_HOME:/opt/android-sdk registry.gitlab.com/fdroid/docker-executable-fdroidserver:master build -v -l com.mendhak.gpslogger

More Repositories

1

docker-http-https-echo

Docker image that echoes request data as JSON; listens on HTTP/S, useful for debugging.
Shell
609
star
2

angular-intro.js

AngularJS directives for intro.js
JavaScript
503
star
3

waveshare-epaper-display

At-a-glance dashboard for Raspberry Pi with a Waveshare ePaper 7.5 Inch HAT. Date/Time, Weather, Alerts, Google/Outlook Calendar
Python
442
star
4

angular-performance

Directives for measuring and reporting perceived page performance
JavaScript
99
star
5

Airflow-MS-Teams-Operator

Airflow operator that can send messages to MS Teams
Python
78
star
6

teamcity-stash

TeamCity - Stash integration. Plugin for TeamCity which updates Stash with build statuses
Java
54
star
7

keepass-and-keeagent-setup

Security setup instructions for using KeePass with KeeAgent for SSH keypairs
47
star
8

grub-reboot-picker

Helps with dual booting. Ubuntu tray application to reboot into different OSes or UEFI/BIOS
Python
46
star
9

eleventy-satisfactory

Content-first eleventy blog template with basic layout and various features
JavaScript
21
star
10

docker-udp-listener

Python
18
star
11

Gradle-Travis-Colored-Output

Gradle script plugin which formats test output in a slightly colorful way (made for Travis CI but works in terminal)
16
star
12

xbox-controller-off

Shutdown script for XBox Wireless Controller for PCs
C#
15
star
13

Conscrypt-Provider

Conscrypt Provider app, which can be included from other applications (WIP)
Kotlin
13
star
14

trivy-template-output-to-sonarqube

Attempt at getting a Trivy output into Sonarqube's generic issue format
Smarty
13
star
15

selenium-grid-ecs

Selenium Grid in ECS using Fargate Spot Containers
HCL
13
star
16

Codeplex-Issues-Importer

This script imports issues (work items) from a Codeplex project into your github project
Python
11
star
17

teamcity-graphite

Teamcity plugin which sends various build, code and test metrics to Graphite.
Java
10
star
18

SeenFromSpace

A 'live' earth wallpaper which includes day/night phases, night lights, clouds and satellites in different projections
Python
10
star
19

gradle-crowdin-plugin

Build task plugin for downloading and uploading translations from Crowdin.com
Groovy
10
star
20

node-hashcat

hash, concat, minify, replace
JavaScript
9
star
21

bitbucket-all-pull-requests

Plugin to show all pull requests in Bitbucket Server.
Java
8
star
22

llm-cli-helper

CLI helper tool to lookup commands based on a description
Python
8
star
23

googledocs-upload-sample

Android sample code to authorize with OAuth2, upload a doc and update it.
Java
8
star
24

Kindle-Time-and-Weather

Time and Weather display for Kindle
Python
7
star
25

docker-openvpn-adblock

Docker containers setup with OpenVPN on TCP and UDP, with adblocking dnsmasq
Shell
6
star
26

docker-calibre-web-cloudflared

Example setup of a public facing Calibre Web server exposed through Cloudflare Tunnel
Python
6
star
27

Crowdin-Android-Importer

Python script to download translated language files from Crowdin.net and write to Android Project
Python
6
star
28

automated-wsl-dev-setup

Scripts to automate WSL, Ubuntu, Docker, Permissions/Tweaks setup
PowerShell
5
star
29

calibre-gdrive-fix

Script to fix broken Calibre paths caused by Google Drive
Python
5
star
30

aismapping

Places AIVDM NMEA data on Google Maps
Python
4
star
31

rpi-internet-radio

Internet radio using breadboard, mpc and mpd
Python
4
star
32

noodles

Instant Noodles 🍜 for the office (no cooking). Ratings and reviews.
HTML
3
star
33

Gradle-Github-Colored-Output

Colored test output for Github Actions when using Gradle
3
star
34

docker-arm32v6-influxdb

Influxdb image for Raspberry Pi Zero (ARM32v6)
Dockerfile
3
star
35

gpstracka

(Mirror) Windows Mobile 6.5 GPS Logging application
C#
3
star
36

mendhak.github.io

JavaScript
3
star
37

teambuildtray

Mirror for Team Build Tray
C#
2
star
38

raspberrypi-systeminfo

Python web page to display basic Raspberry Pi system info
Python
2
star
39

rhythmbox-gmusic-sync

Plugin to sync metadata from Rhythmbox to Google Music.
Python
2
star
40

gpsmapper

Java
2
star
41

docker-arm32v6-chronograf

Chronograf Docker image for Raspberry Pi Zero (ARM32v6)
Dockerfile
2
star
42

flickrsignature

Flickr signature generator with dynamic URLs. Currently on http://flkr.me
Python
2
star
43

firefox-flickr-new-tab

Firefox New Tab replacement, showcase mendhak photos from Flickr.
JavaScript
2
star
44

aws-elb-logster

Logster module for AWS Elastic Load Balancer access logs
Python
2
star
45

docs.fleetsearch.apiary.io

1
star
46

utils

Shell
1
star
47

angular-dynamic-configuration-with-auth0

Angular application. With dynamic configuration loaded from an API call. With Auth0 integration secured API requests.
TypeScript
1
star
48

flickrapi

Simple Python library for basic flickr method calls
Python
1
star
49

docker-unprivileged

WIP: Collection of unprivileged Docker samples for different languages and tools
1
star
50

expandable-textview-in-expandable-listview-problem

Demo code for https://github.com/Manabu-GT/ExpandableTextView/issues/25
Java
1
star
51

API-Gateway-Self-Hosted-Documentation

Sample repo for self hosted API Gateway documentation
HCL
1
star
52

javamail-android

[Mirror] Automatically exported from code.google.com/p/javamail-android
Java
1
star
53

docs.flightinternal.apiary.io

1
star
54

wintersmith-testing

CSS
1
star
55

android-gradle-test-sample

Sample test project created for http://stackoverflow.com/questions/23046259/is-there-a-way-to-only-run-a-specific-set-of-tests-in-an-android-gradle-project
Shell
1
star
56

curiosityfeeds

Google App Engine project for MSL Curiosity feeds
Python
1
star
57

hammer-api

1
star
58

gpslogger-support-files

Shell
1
star
59

android-file-dialog

Fork of original android-file-dialog from https://code.google.com/p/android-file-dialog
Java
1
star
60

GSF-archive

Bintray mirror for https://bintray.com/mendhak/maven/gpslogger-support-files
1
star
61

smashtest-tutorial

Sample repo for the writeup at
1
star
62

AskUbuntu-Dark-Theme

CSS
1
star
63

flickrbackground

View flickr photos on any color/magic background, or full browser width.
JavaScript
1
star
64

docker-spark-experimental

Experimental Spark master and worker with spark-shell and pyspark
1
star
65

Sheepy-Horn-Old

Productivity tool to assist with joke telling by playing the 'wah wah waah' sound.
Java
1
star
66

automated-wsl2-dev-setup

PowerShell
1
star
67

flickrsig.net

.NET version of flickrsignature - very old
JavaScript
1
star
68

steam-github-profile-status

Set your Github profile status with the game currently being played on Steam. Available as Docker image, Github Action or script.
JavaScript
1
star
69

buildbunny

Mirror of TeamCity Nabaztag plugin
Java
1
star