GPSLogger — это приложение для Android, которое записывает данные GPS в различные форматы (GPX, KML, CSV, NMEA, пользовательский URL-адрес) и имеет возможности загрузки (SFTP, OpenStreetMap, Google Drive, Dropbox, электронная почта). Это приложение стремится максимально эффективно использовать заряд батареи.
Прочтите о возможностях GPSLogger здесь.
Вы можете найти его на F-Droid
Скачать можно прямо из релизов.
Вы можете помочь с переводами на Weblate.
Вы также можете отправлять запросы на исправление ошибок и новые функции.
Я не очень хорошо разбираюсь в пользовательском интерфейсе, поэтому любая работа с макетами будет оценена по достоинству!
Лицензия GPL v2 | Лицензии третьих лиц | Политика конфиденциальности
Хорошей практикой является проверка загрузок. Подпись PGP, пакет Cosign и контрольная сумма SHA256 будут сопровождать каждый .apk
.
Чтобы проверить целостность и подпись PGP:
gpg --recv-key 6989CF77490369CFFDCBCD8995E7D75C76CBE9A9
gpg --verify gpslogger-132.apk.asc
(Экспериментально) Для проверки с помощью Sigstore Cosign команда должна быть в примечаниях к выпуску, она будет выглядеть так:
cosign verify-blob gpslogger-132.apk
--bundle gpslogger-132.apk.cosign.bundle --new-bundle-format
--cert-oidc-issuer https://token.actions.githubusercontent.com
--cert-identity https://github.com/mendhak/gpslogger/.github/workflows/generate-release-apk.yml@refs/head/master
Чтобы проверить контрольную сумму:
sha256sum -c gpslogger-132.apk.SHA256
Проект основан на плагине системы сборки Android для Gradle. Эти инструкции предназначены для Ubuntu Linux с Android Studio, но для других ОС они должны быть примерно аналогичны.
Следуйте инструкциям на веб-сайте разработчиков Android, чтобы настроить компьютер для разработки.
Скачайте и установите Android Studio (есть еще оснастка)
git clone git://github.com/mendhak/gpslogger.git
В этом проекте используются определенные библиотеки Android, их можно установить с помощью плохо реализованного sdkmanager
от Google:
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'
Создайте файл с именем local.properties
, указывающий на каталог вашего Android SDK.
cd gpslogger
echo "sdk.dir=/home/mendhak/Programs/Android" > local.properties
Откройте Android Studio и выберите импорт проекта. Выберите самый верхний файл build.gradle
в разделе GPSLogger.
Если появится диалоговое окно «Импорт», выберите « Импортировать проект из внешней модели».
На следующем экране выберите значения по умолчанию и продолжайте (обертка Gradle по умолчанию).
Подождите минуту, и Android Studio настроит проекты и загрузит различные библиотеки.
Зарегистрируйте учетную запись в OpenStreetMap и войдите в систему.
Нажмите «Мои настройки», затем «Приложения OAuth2».
Нажмите «Зарегистрировать приложение»
Заполните форму с этими данными. Не забудьте снять флажок «Конфиденциальное приложение», поскольку это мобильное приложение.
После регистрации приложения вы получите Client ID.
Поместите идентификатор клиента в OpenStreetMapManager#getOpenStreetMapClientID().
Если вы использовали собственную схему, замените значение в AndroidManifest.xml и OpenStreetMapManager#getOpenStreetMapRedirect().
Зарегистрируйте аккаунт на Dropbox.com
Перейдите на страницу разработчиков Dropbox и нажмите «Создать приложение».
Используйте эти настройки, но выберите уникальное имя.
После создания приложения вы получите ключ и секрет приложения (те, что на скриншоте, поддельные).
Поместите ключи в ~/.gradle/gradle.properties
следующим образом:
GPSLOGGER_DROPBOX_APPKEY=abcdefgh
GPSLOGGER_DROPBOX_APPSECRET=1234123456
Замените ключ приложения Dropbox на файл AndroidManifest.xml.
<!-- Change this to be db- followed by your app key -->
<data android:scheme="db-12341234"/>
Зарегистрируйтесь в Google Cloud Platform. Создайте новый проект.
В разделе «API и службы» включите API Google Диска.
Затем перейдите на экран согласия Oauth, выполняя шаги, пока не дойдете до областей действия. Добавьте область https://www.googleapis.com/auth/drive.file
.
Создайте учетные данные OAuth типа Android.
Под именем пакета используйте com.mendhak.gpslogger
. Чтобы получить отпечаток сертификата SHA-1, используйте команду keytool -keystore ~/.android/debug.keystore -list -v
.
GPSLogger состоит из нескольких основных компонентов;
Шина событий — это место, где происходит все перекрестное взаимодействие. Различные компоненты передают свои события в шину событий, а другие части приложения прослушивают эти события. Самый важный из них — когда местоположение получено, оно помещается в шину событий и используется множеством фрагментов.
GPSLoggingService — это место, где происходит вся работа. Эта служба взаимодействует с провайдерами определения местоположения (сетевыми и спутниковыми). Он устанавливает таймеры и сигналы тревоги для запроса следующей точки GPS. Он передает информацию о местоположении различным регистраторам, чтобы они могли записывать файлы. Он также вызывает программы автоматической загрузки, чтобы они могли отправлять свои файлы в DropBox, OSM и т. д.
Он также передает информацию в шину событий.
Это основная видимая форма в приложении. Он состоит из нескольких «фрагментов» — простого вида, подробного вида и большого вида.
Он заботится о главном экране, меню и панелях инструментов.
Фрагменты прослушивают шину событий на предмет изменений местоположения и отображают их по-своему.
Вокруг плавают еще два объекта. Session
содержит различную информацию, связанную с текущим запуском GPSLogger, такую как текущее имя файла, последнее известное местоположение, количество спутников и любую другую информацию, которая не является статической, но необходима для текущего запуска GPSLogger.
AppSettings
— это представление предпочтений пользователя.
Эти объекты видны во всем приложении, и к ним может напрямую обращаться любой класс, служба, действие или фрагмент.
Задача Gradle «сборка» будет построена, а также ищет ключ GPG для подписи APK. Сначала требуется некоторая настройка:
Создайте ~/.gradle/gradle.properties
, который содержит хранилище релизов и его ключевые сведения, а также ключевые сведения GPG.
RELEASE_STORE_FILE=/path/to/the.keystore
RELEASE_STORE_PASSWORD=xxxxxxxxxxxxxxxxxx
RELEASE_KEY_ALIAS=gpsloggerkey
RELEASE_KEY_PASSWORD=xxxxxxxxxxxxxxxxxx
signing.gnupg.keyName=xxxxxxxxxxxxxxxxxx
signing.gnupg.passphrase=xxxxxxxxxxxxxxxxxx
Убедитесь, что gpg2 установлен.
sudo apt install gnupg2
И убедитесь, что указанный выше gnupg.keyname находится в хранилище ключей gpg, посмотрите, используя gpg2 --list-secret-keys
Как только эти части будут на месте, задача «сборки» должна собрать APK, подписать его, а также создать контрольную сумму.
Если он не отображается в папке gpslogger, запустите «copyFinalAPK», чтобы он скопировал файлы APK, ASC и SHA256 в папку gpslogger.
Наконец загрузите в релизы Github.
F-Droid отслеживает теги в репозитории Github, создает эти теги и подписывает их своим собственным ключом. Итак, делать особо нечего.
Убедитесь, что gpslogger/build.gradle versionCode
и versionName
содержат номер последней версии, которая будет выпущена.
Наконец, пометьте коммит,
git tag -s v128
git push origin master --tags
Используйте образ докера fdroidserver. Клонируйте репозиторий метаданных fdroid и внесите изменения в файл com.mendhak.gpslogger.yml.
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