{"id":13397808,"url":"https://github.com/mendhak/gpslogger","last_synced_at":"2025-05-14T00:06:23.732Z","repository":{"id":37253446,"uuid":"1925457","full_name":"mendhak/gpslogger","owner":"mendhak","description":":satellite: Lightweight GPS Logging Application For Android. ","archived":false,"fork":false,"pushed_at":"2025-05-04T20:27:25.000Z","size":33968,"stargazers_count":2132,"open_issues_count":166,"forks_count":618,"subscribers_count":119,"default_branch":"master","last_synced_at":"2025-05-04T21:19:36.881Z","etag":null,"topics":["android","android-sdk","dropbox","gps","gpslogger","intellij","java","logging","satellite"],"latest_commit_sha":null,"homepage":"https://gpslogger.app","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mendhak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2011-06-20T19:49:42.000Z","updated_at":"2025-05-03T03:36:36.000Z","dependencies_parsed_at":"2024-01-12T17:29:49.094Z","dependency_job_id":"57a0b473-a4f8-4632-99d4-b78f99f4060f","html_url":"https://github.com/mendhak/gpslogger","commit_stats":{"total_commits":2872,"total_committers":145,"mean_commits":"19.806896551724137","dds":0.3972841225626741,"last_synced_commit":"ed47510c5e2a3e8f51185cdc8bf9f9b458ba41d1"},"previous_names":[],"tags_count":116,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mendhak%2Fgpslogger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mendhak%2Fgpslogger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mendhak%2Fgpslogger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mendhak%2Fgpslogger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mendhak","download_url":"https://codeload.github.com/mendhak/gpslogger/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254043502,"owners_count":22004962,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-sdk","dropbox","gps","gpslogger","intellij","java","logging","satellite"],"created_at":"2024-07-30T18:01:46.366Z","updated_at":"2025-05-14T00:06:23.713Z","avatar_url":"https://github.com/mendhak.png","language":"Java","readme":"GPSLogger  [![githubactions](https://github.com/mendhak/gpslogger/workflows/Android%20CI/badge.svg)](https://github.com/mendhak/gpslogger/actions) [![pgp](assets/pgp.png)](https://keyserver.ubuntu.com/pks/lookup?op=get\u0026search=0x95e7d75c76cbe9a9) [![Weblate](https://hosted.weblate.org/widgets/gpslogger/-/android/svg-badge.svg)](https://hosted.weblate.org/engage/gpslogger/)\n=========\n\nGPSLogger 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.\n\n[Read about GPSLogger's features here](https://gpslogger.app/)\n\n## Download\n\nYou can find it on [F-Droid](https://f-droid.org/en/packages/com.mendhak.gpslogger/) \n\nYou can download directly [from the releases](https://github.com/mendhak/gpslogger/releases).\n\n\n\n## Contribute\n\nYou can help with [translations](https://hosted.weblate.org/engage/gpslogger/) on Weblate.    \n\nYou can also submit [pull requests](https://help.github.com/articles/using-pull-requests) for bug fixes and new features.\n\nI'm not very good at UIs, so any work with the layouts would be appreciated!  \n\n\n## License and policy\n\n[Licensed under GPL v2](LICENSE.md) | [Third party licenses](assets/text/opensource.md) | [Privacy policy](assets/text/privacypolicy.md)\n\n\n\n## Verifying\n\nIt's good practice to verify downloads. A PGP signature, Cosign bundle, and an SHA256 checksum will accompany each `.apk`.\n\nTo verify the PGP integrity and signature:\n\n```bash\ngpg --recv-key 6989CF77490369CFFDCBCD8995E7D75C76CBE9A9\ngpg --verify gpslogger-132.apk.asc\n```\n\n(Experimental) To verify with [Sigstore Cosign](https://docs.sigstore.dev/cosign/system_config/installation), the command should be in the releases notes, it will look like this: \n\n```bash\ncosign verify-blob gpslogger-132.apk \\\n--bundle gpslogger-132.apk.cosign.bundle --new-bundle-format \\\n--cert-oidc-issuer https://token.actions.githubusercontent.com \\\n--cert-identity https://github.com/mendhak/gpslogger/.github/workflows/generate-release-apk.yml@refs/head/master\n```    \n\n\nTo verify the checksum:    \n    \n```bash\nsha256sum -c gpslogger-132.apk.SHA256\n```\n\n\n\nSetting up the code\n=========\n\n\nThe project is based on the [Android build system](http://tools.android.com/tech-docs/new-build-system/user-guide) plugin for Gradle.\nThese instructions are for Ubuntu Linux with Android Studio, but for other OSes, it should be roughly similar. \n\n### Set up your Android Development Environment\n\nFollow the instructions on the [Android Developer Website](http://developer.android.com/sdk/installing/index.html) to set up your computer for development.\n\nDownload and install [Android Studio](https://developer.android.com/studio/install#linux) (there's also a [snap](https://snapcraft.io/android-studio))\n\n\n### Clone the GPSLogger repository\n\n    git clone git://github.com/mendhak/gpslogger.git\n\n### Get the Android SDK extra repositories\n\nThis project uses certain Android libraries, you can install them using Google's poorly implemented [`sdkmanager`](https://developer.android.com/studio/command-line/sdkmanager.html):\n\n      echo y | $HOME/android-sdk/tools/bin/sdkmanager 'tools'\n      echo y | $HOME/android-sdk/tools/bin/sdkmanager 'platform-tools'\n      echo y | $HOME/android-sdk/tools/bin/sdkmanager 'build-tools;26.0.2'\n      echo y | $HOME/android-sdk/tools/bin/sdkmanager 'platforms;android-27'\n      echo y | $HOME/android-sdk/tools/bin/sdkmanager 'platforms;android-25'\n      echo y | $HOME/android-sdk/tools/bin/sdkmanager 'extras;google;m2repository'\n      echo y | $HOME/android-sdk/tools/bin/sdkmanager 'extras;android;m2repository'\n      echo y | $HOME/android-sdk/tools/bin/sdkmanager 'extras;google;google_play_services'\n\n\n### Create local.properties\n\nCreate a file called `local.properties`, pointing at your Android SDK directory.\n\n    cd gpslogger\n    echo \"sdk.dir=/home/mendhak/Programs/Android\" \u003e local.properties\n\n### Import the project\n\nOpen up Android Studio and choose to import a project.  Select the topmost `build.gradle` file under GPSLogger.\n\nIf you get an Import dialog, choose to *Import project from external model*\n\n![import](assets/import_1.png)\n\nOn the next screen, choose the defaults and proceed (default gradle wrapper)\n\n![import](assets/import_2.jpg)\n\nGive it a minute and Android Studio will configure the projects and download the various libraries.\n\n### OpenStreetMap Setup (Optional)\n\nSign up for an account with [OpenStreetMap](https://openstreetmap.org) and log in.\n\nClick on 'My Settings', then 'OAuth2 Applications'\n\nClick on 'Register your application'\n\nFill in the form with these details. Remember to uncheck the 'Confidential Application' checkbox, since this is a mobile app. \n\n![Oauth settings](assets/osm_oauth_settings.png)\n\nAfter registering the application, you will receive a Client ID.   \nPlace the Client ID in [OpenStreetMapManager#getOpenStreetMapClientID\\(\\)](gpslogger/src/main/java/com/mendhak/gpslogger/senders/osm/OpenStreetMapManager.java).   \nIf you used your own custom scheme, replace the value in [AndroidManifest.xml](gpslogger/src/main/AndroidManifest.xml) and [OpenStreetMapManager#getOpenStreetMapRedirect\\(\\)](gpslogger/src/main/java/com/mendhak/gpslogger/senders/osm/OpenStreetMapManager.java) \n\n\n### Dropbox Setup (Optional)\n\nSign up for an account with Dropbox.com\n\nGo to the [Dropbox Developers page](https://www.dropbox.com/developers/apps) and click on 'Create an App'\n\nUse these settings, but choose a unique name\n\n![Dropbox settings](assets/dropbox_settings_create.png)\n\nAfter creating the app, you will receive an app key and secret (the ones in the screenshot are fake)\n\n![Dropbox settings](assets/dropbox_settings.png)\n\nPlace the keys in your `~/.gradle/gradle.properties` like this:\n\n\n    GPSLOGGER_DROPBOX_APPKEY=abcdefgh\n    GPSLOGGER_DROPBOX_APPSECRET=1234123456\n\n\nReplace the Dropbox app key to your AndroidManifest.xml file\n\n    \u003c!-- Change this to be db- followed by your app key --\u003e\n    \u003cdata android:scheme=\"db-12341234\"/\u003e\n\n### Google Drive Setup (optional)\n\nSign up to [Google Cloud Platform](https://console.cloud.google.com/).  Create a new project. \n\nUnder APIs and Services, [enable the Google Drive API](https://console.cloud.google.com/apis/library/drive.googleapis.com).  \nNext, go to the [Oauth Consent Screen](https://console.cloud.google.com/apis/credentials/consent), going through the steps until you reach scopes. \nAdd the `https://www.googleapis.com/auth/drive.file` scope.  \n\n![scopes](assets/googledrive_scope.png)\n\n[Create some OAuth credentials](https://console.cloud.google.com/apis/credentials), of type Android.  \nUnder package name, use `com.mendhak.gpslogger`. For the SHA-1 Certificate fingerprint, get it using the `keytool -keystore ~/.android/debug.keystore -list -v` command.\n\n![oauth](assets/googledrive_oauthclient.png)\n\n\nOverview\n======\n\nGPSLogger is composed of a few main components;\n\n![design](assets/gpslogger_architecture.png)\n\n### Event Bus\n\nThe Event Bus is where all the cross communication happens.  Various components raise their events on the Event Bus,\nand other parts of the application listen for those events.  The most important one is when a location is obtained,\n it is placed on the event bus and consumed by many fragments.\n\n### GPS Logging Service\n\nGPSLoggingService is where all the work happens.  This service talks to the location providers (network and satellite).\nIt sets up timers and alarms for the next GPS point to be requested.  It passes location info to the various loggers\nso that they can write files.  It also invokes the auto-uploaders so that they may send their files to DropBox, OSM, etc.\n\nIt also passes information to the Event Bus.\n\n### GPS Main Activity\n\nThis is the main visible form in the app.   It consists of several 'fragments' - the simple view, detailed view and big view.\n\nIt takes care of the main screen, the menus and toolbars.\n\nThe fragments listen to the Event Bus for location changes and display it in their own way.\n\n### Session and AppSettings\n\nFloating about are two other objects.  `Session` contains various pieces of information related to the current GPSLogger run,\nsuch as current file name, the last known location, satellite count, and any other information which isn't static but is\nneeded for the current run of GPSLogger.\n\n`AppSettings` is a representation of the user's preferences.\n\nThese objects are visible throughout the application and can be accessed directly by any class, service, activity or fragment.\n\n\n## Assembling the APK for Github release\n\nThe 'assemble' Gradle task will build, and it also looks for a GPG key to sign the APK with. It needs some setup first:\n\nCreate `~/.gradle/gradle.properties` which contains the release store and its key details, as well as the GPG key details\n\n```\nRELEASE_STORE_FILE=/path/to/the.keystore\nRELEASE_STORE_PASSWORD=xxxxxxxxxxxxxxxxxx\nRELEASE_KEY_ALIAS=gpsloggerkey\nRELEASE_KEY_PASSWORD=xxxxxxxxxxxxxxxxxx\nsigning.gnupg.keyName=xxxxxxxxxxxxxxxxxx\nsigning.gnupg.passphrase=xxxxxxxxxxxxxxxxxx\n```\n\nEnsure that gpg2 is installed\n\n```bash\nsudo apt install gnupg2\n```\n\nAnd ensure that the above gnupg.keyname is in the gpg keystore, have a look using `gpg2 --list-secret-keys`\n\nOnce these pieces are in place, the 'assemble' task should build the APK, sign it, and create a checksum too.    \nIf it doesn't appear in the gpslogger folder, run 'copyFinalAPK' so that it copies the APK, ASC and SHA256 files to the gpslogger folder.  \nFinally upload to Github Releases.  \n\n## F-Droid release\n\nF-Droid watches the Github repository for tags, and will build those tags, and sign it using its own key. So, there isn't too much to do. \n\nEnsure that [gpslogger/build.gradle](gpslogger/build.gradle#L47-L48) `versionCode` and `versionName` contains the latest version number to be released. \n\nFinally tag the commit, \n\n```bash\ngit tag -s v128\ngit push origin master --tags\n```\n\n## Working notes for F-Droid\n\nUse the fdroidserver docker image.  Clone the fdroid metadata repo and make changes to the com.mendhak.gpslogger.yml file. \n\n    git clone https://gitlab.com/fdroid/fdroiddata.git\n    cd fdroiddata\n\n    # https://f-droid.org/en/docs/Submitting_to_F-Droid_Quick_Start_Guide/\n    # initialize the metadata repo\n    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\n    \n    # lint your metadata yml\n    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\n    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\n    \n    # see if the latest tag will get picked up. \n    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\n    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\n\n    # build\n    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\n    \n    \n","funding_links":[],"categories":["Java","Location tracking","Open Source Software, Tools and APIs"],"sub_categories":["Find My Device","Java"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmendhak%2Fgpslogger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmendhak%2Fgpslogger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmendhak%2Fgpslogger/lists"}