diff --git a/README.md b/README.md index e770c5e..65eb487 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,84 @@ -# [Traccar Client for Android](https://www.traccar.org/client) +# traccar-client-android (форк) -[![Get it on Google Play](http://www.tananaev.com/badges/google-play.svg)](https://play.google.com/store/apps/details?id=org.traccar.client) [![Get it on F-Droid](http://www.tananaev.com/badges/f-droid.svg)](https://f-droid.org/repository/browse/?fdid=org.traccar.client) +Android-приложение Traccar Client — GPS-трекер, который снимает координаты устройства и отправляет их на сервер Traccar по протоколу OsmAnd (HTTP GET с параметрами). Работает фоновой службой, накапливает точки в локальной SQLite-очереди и досылает их при появлении сети. -## Overview +Форк сделан как резервная копия официального репозитория [traccar/traccar-client-android](https://github.com/traccar/traccar-client-android) (автор — Anton Tananaev) в самохостовом Gitea: приложение используется вместе со своим сервером Traccar, и наличие независимой копии исходников гарантирует возможность пересобрать APK даже без доступа к GitHub. -Traccar Client is an Android GPS tracking application. It can work with Traccar open source server software. +Документация оригинала (ссылки на Google Play/F-Droid, команда, лицензия Apache 2.0) сохранена в [README.upstream.md](README.upstream.md). -## Team +## Отличия от оригинала -- Anton Tananaev ([anton@traccar.org](mailto:anton@traccar.org)) +Изменений нет. Все 438 коммитов принадлежат авторам оригинала (386 + 19 — Anton Tananaev, остальные — внешние контрибьюторы через pull request'ы). Собственных правок владельца форка в истории нет. Форк взят как резервная копия. -## License +## Стек - Apache License, Version 2.0 +- Kotlin 1.8.0, Android SDK (compileSdk/targetSdk 33, minSdk 16) +- Gradle 7.5.1 + Android Gradle Plugin 7.4.1 +- AndroidX: `core-ktx` 1.9.0, `preference-ktx` 1.2.0, `multidex` 2.0.1, Material Components 1.6.1 +- `com.github.judemanutd:autostarter` 1.1.0 и `dev.doubledot.doki` — обход агрессивного энергосбережения вендоров (DKMA) +- Flavor `google`: Firebase BOM 28.2.1 (Analytics, Crashlytics), Play Services Location 21.0.1, Play Core +- SQLite (`SQLiteOpenHelper`) — буфер непереданных позиций +- Тесты: JUnit 4.13.2, Robolectric 4.7.3 +- Локализация: Transifex (48 каталогов `values-*`) - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +## Структура - http://www.apache.org/licenses/LICENSE-2.0 +| Путь | Назначение | +|---|---| +| `app/src/main/java/org/traccar/client/MainActivity.kt`, `MainFragment.kt` | Экран настроек (PreferenceFragment), запуск/остановка трекинга, запрос разрешений на геолокацию и отключение энергосбережения | +| `app/src/main/java/org/traccar/client/TrackingService.kt`, `TrackingController.kt` | Foreground-служба и логика цикла: получить позицию → записать в БД → отправить → удалить | +| `app/src/main/java/org/traccar/client/PositionProvider.kt`, `AndroidPositionProvider.kt` | Источник координат на системном `LocationManager` | +| `app/src/{regular,google,hidden}/java/.../PositionProviderFactory.kt` | Выбор источника позиций по flavor: системный или Google Fused Location | +| `app/src/main/java/org/traccar/client/ProtocolFormatter.kt` | Формирование URL запроса к серверу (протокол OsmAnd) | +| `app/src/main/java/org/traccar/client/RequestManager.kt`, `NetworkManager.kt` | HTTP-отправка и отслеживание состояния сети | +| `app/src/main/java/org/traccar/client/DatabaseHelper.kt` | SQLite-очередь позиций | +| `app/src/main/java/org/traccar/client/AutostartReceiver.kt`, `BatteryOptimizationHelper.kt`, `WakefulBroadcastReceiver.kt` | Автозапуск после перезагрузки, wake lock, борьба с убийством процесса | +| `app/src/main/java/org/traccar/client/ShortcutActivity.kt`, `DialLaunchReceiver.kt` | Ярлыки старт/стоп и запуск по набору кода в звонилке | +| `app/src/main/java/org/traccar/client/StatusActivity.kt` | Журнал событий приложения | +| `app/src/main/res/xml/preferences.xml` | Описание всех пользовательских настроек | +| `app/src/main/res/xml/network_security_config.xml` | Разрешён HTTP-трафик, доверие пользовательским CA (для HTTPS-прокси) | +| `app/src/test/java/...` | Unit-тесты форматтера URL, БД и отправки запросов | +| `translate.py` | Выгрузка переводов из Transifex (проект `traccar`, ресурс `client`) в `res/values-*` | +| `.github/` | Только CONTRIBUTING, FUNDING и шаблоны issue. CI-workflow в репозитории нет | - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +## Как собрать/запустить + +```bash +./gradlew assembleRegularDebug # сборка без сервисов Google +./gradlew assembleRegularRelease +./gradlew assembleGoogleRelease # вариант с Firebase и Fused Location +./gradlew assembleHiddenRelease # скрытый вариант (applicationId org.traccar.client.hidden) +./gradlew test # unit-тесты (JUnit + Robolectric) +``` + +Три product flavor'а: `regular` (по умолчанию), `google`, `hidden`. Для сборки `google`-варианта задача `copyJson` копирует `google-services.json` из внешнего каталога `../../environment/google-services/traccar-client-android.json` — этого каталога в репозитории нет, для своей сборки нужен собственный файл Firebase либо использование flavor `regular`. + +Обновление переводов: `./translate.py -t ` (требуется пакет `transifex-python`). + +## Конфигурация + +Настройки задаются в самом приложении и хранятся в SharedPreferences (`app/src/main/res/xml/preferences.xml`): + +| Ключ | Назначение | +|---|---| +| `status` | Переключатель «служба запущена» | +| `id` | Идентификатор устройства; генерируется автоматически при первом запуске, должен совпадать с идентификатором в Traccar | +| `url` | Адрес сервера, куда шлются позиции (http:// или https://) | +| `accuracy` | Точность: high / medium / low | +| `interval` | Период опроса, секунды (по умолчанию 300) | +| `distance` | Минимальное смещение для отправки, метры (0 — выключено) | +| `angle` | Минимальное изменение курса, градусы (0 — выключено) | +| `buffer` | Буферизация точек при отсутствии сети | +| `wakelock` | Удержание процессора | + +Сборочные параметры: `applicationId org.traccar.client` (у flavor `hidden` — `org.traccar.client.hidden`), `versionCode 81`, `versionName 7.0`, `gradle.properties` содержит только `android.useAndroidX=true`. + +Секретов в репозитории нет: ключи Firebase и токен Transifex в коде отсутствуют и подставляются извне. + +## Состояние + +Рабочий, но копия устаревшая: 438 коммитов, последний — 05.04.2023 (Anton Tananaev, «Non nullable fields»), версия приложения 7.0 (versionCode 81). Оригинальный проект с тех пор развивается дальше, форк с ним не синхронизировали. Собственных коммитов владельца форка нет, поэтому дата последней своей правки отсутствует. + +## Что не доделано + +Меток TODO/FIXME и заглушек в коде нет — это релизная версия официального приложения. Применительно к самому форку не хватает только синхронизации с upstream: копия отстаёт от оригинала более чем на три года. diff --git a/README.upstream.md b/README.upstream.md new file mode 100644 index 0000000..e770c5e --- /dev/null +++ b/README.upstream.md @@ -0,0 +1,27 @@ +# [Traccar Client for Android](https://www.traccar.org/client) + +[![Get it on Google Play](http://www.tananaev.com/badges/google-play.svg)](https://play.google.com/store/apps/details?id=org.traccar.client) [![Get it on F-Droid](http://www.tananaev.com/badges/f-droid.svg)](https://f-droid.org/repository/browse/?fdid=org.traccar.client) + +## Overview + +Traccar Client is an Android GPS tracking application. It can work with Traccar open source server software. + +## Team + +- Anton Tananaev ([anton@traccar.org](mailto:anton@traccar.org)) + +## License + + Apache License, Version 2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.