# Конвертор координат GPS → APRS, Maidenhead

## Описание проекта

Приложение Android для конвертации GPS координат в различные форматы:
- Десятичные координаты (широта/долгота)
- Градусы, минуты, секунды (DMS)
- APRS формат
- Maidenhead (QTH локатор)

**Технологии:**
- Kotlin
- Jetpack Compose (Material 3)
- Android SDK 34
- Min SDK: 21

---

## Структура проекта

```
vs2/
├── app/
│   ├── src/main/
│   │   ├── java/com/example/aprs/
│   │   │   ├── MainActivity.kt      # Основной экран
│   │   │   └── LocationUtils.kt     # Утилиты конвертации
│   │   ├── res/
│   │   │   ├── values/
│   │   │   │   ├── strings.xml
│   │   │   │   ├── themes.xml
│   │   │   │   └── ic_launcher_background.xml
│   │   │   └── mipmap-*/           # Иконки приложения
│   │   ├── AndroidManifest.xml
│   │   └── build.gradle.kts
│   └── build/outputs/apk/debug/    # Скомпилированный APK
├── build.gradle.kts
├── gradle.properties
├── settings.gradle.kts
└── gradlew                         # Gradle wrapper
```

---

## Требования к серверу

### Необходимое ПО:
- **Java JDK 17** (`/usr/lib/jvm/java-17-openjdk-amd64`)
- **Git** (опционально)
- **SSH доступ** с паролем или ключом

### Проверка окружения на сервере:
```bash
java -version
# Должно показать: openjdk version "17.x.x"
```

---

## Инструкция по компиляции на сервере

### 1. Подключение к серверу

```bash
# Подключение по SSH
ssh ua1zbe@192.168.1.46
# Введите пароль: ktdbycrbq1980
```

### 2. Загрузка проекта на сервер

#### Вариант A: Через rsync (рекомендуется)
```bash
# С локальной машины
rsync -avz -e ssh /home/ua1zbe/my_aprs_project/vs2/ ua1zbe@192.168.1.46:~/my_aprs_project/vs2/
```

#### Вариант B: Через git
```bash
# На сервере
cd ~
git clone <repository-url> my_aprs_project/vs2
```

### 3. Сборка APK

```bash
# Подключение к серверу
ssh ua1zbe@192.168.1.46

# Переход в директорию проекта
cd ~/my_aprs_project/vs2

# Установка JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

# Очистка и сборка
./gradlew clean assembleDebug

# Или только сборка (быстрее)
./gradlew assembleDebug
```

### 4. Результат сборки

APK файл будет создан в:
```
/home/ua1zbe/my_aprs_project/vs2/app/build/outputs/apk/debug/app-debug.apk
```

Размер: ~12-14 MB

### 5. Проверка сборки

```bash
# Проверка существования APK
ls -lh ~/my_aprs_project/vs2/app/build/outputs/apk/debug/app-debug.apk

# Информация о сборке
./gradlew buildEnvironment
```

---

## Установка на устройство

### Вариант A: Через ADB (USB)

```bash
# Скачать APK с сервера
scp ua1zbe@192.168.1.46:~/my_aprs_project/vs2/app/build/outputs/apk/debug/app-debug.apk /home/ua1zbe/my_aprs_project/vs2/

# Установить на устройство
adb install -r /home/ua1zbe/my_aprs_project/vs2/app-debug.apk
```

### Вариант B: Прямая установка с сервера

```bash
# На сервере (если есть ADB и подключено устройство)
adb install ~/my_aprs_project/vs2/app/build/outputs/apk/debug/app-debug.apk
```

### Вариант C: Через файловый менеджер

1. Скачать APK с сервера через SFTP/SCP
2. Передать на телефон
3. Установить через файловый менеджер

---

## Полезные команды Gradle

```bash
# Очистка сборки
./gradlew clean

# Сборка debug версии
./gradlew assembleDebug

# Сборка release версии
./gradlew assembleRelease

# Запуск тестов
./gradlew test

# Проверка зависимостей
./gradlew dependencies

# Остановка Gradle daemon
./gradlew --stop

# Сборка с логом
./gradlew assembleDebug --info
```

---

## Решение проблем

### Ошибка: "Could not connect to Kotlin compile daemon"
```bash
# Остановить Gradle и попробовать снова
./gradlew --stop
./gradlew clean assembleDebug
```

### Ошибка: "minSdkVersion cannot be smaller than version 21"
```bash
# Jetpack Compose требует API 21+
# Проверить app/build.gradle.kts:
# minSdk = 21
```

### Ошибка: "resource not found" для иконок
```bash
# Проверить наличие директорий mipmap
ls app/src/main/res/mipmap-*/

# Пересоздать иконки при необходимости
```

### Ошибка: "BUILD FAILED - Manifest merger failed"
```bash
# Очистить сборку
./gradlew clean
# Проверить AndroidManifest.xml на ошибки
```

### Долгая компиляция
```bash
# Использовать daemon (по умолчанию включён)
./gradlew assembleDebug --daemon

# Или увеличить память
export GRADLE_OPTS="-Xmx2g"
```

---

## Быстрая сборка (one-liner)

```bash
ssh ua1zbe@192.168.1.46 "cd ~/my_aprs_project/vs2 && export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 && ./gradlew assembleDebug" && scp ua1zbe@192.168.1.46:~/my_aprs_project/vs2/app/build/outputs/apk/debug/app-debug.apk /home/ua1zbe/my_aprs_project/vs2/ && adb install -r /home/ua1zbe/my_aprs_project/vs2/app-debug.apk
```

---

## Контакты

Автор: UA1ZBE
Дата: Март 2026
