---
name: android-dev-setup-macos-tahoe
description: "Set of workarounds для Android-разработки на macOS Tahoe ARM (M-серия) — Maven mirror, JDK, NDK, cmdline-tools. Применять при ЛЮБОЙ Android-разработке на этой машине."
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 80dc2fd3-590d-4bea-bfd3-273ca9d44e37
---

Android-разработка на macOS Tahoe 26.x + Apple Silicon требует специфических настроек, которые установлены в этой системе и не должны меняться без причины.

**Why:** За сессию 2026-05-20 мы прошли через несколько последовательных гранат — каждая стоила 30+ минут отладки. Эти решения уже встроены в систему, повторно их искать не нужно.

**How to apply:** Перед началом любого нового Android/Wear OS/Kotlin проекта проверять что эти настройки на месте. Если новый проект ломается на одной из этих точек — решение уже здесь.

### 1. JDK 21 = JBR из Android Studio
`brew install --cask liberica-jdk21-full` ставится через .pkg installer и требует sudo (не работает в background). Вместо этого использовать JBR который идёт внутри Android Studio.app:
- Путь: `/Applications/Android Studio.app/Contents/jbr/Contents/Home` (это JDK 21.0.10)
- Прописано в `~/.gradle/gradle.properties`:
  - `org.gradle.java.home=...`
  - `org.gradle.java.installations.paths=...` (для toolchain auto-detection)
  - `org.gradle.java.installations.auto-download=false` (чтобы Gradle не пытался скачать другой через Foojay, который не имеет URL для MAC_OS aarch64)

### 2. Maven Central блокируется → Huawei mirror
Российский провайдер режет TLS-handshake к `repo.maven.apache.org`. Без mirror'ов ни один Gradle build не пройдёт. Настроено через `~/.gradle/init.d/mirrors.gradle` — добавляет Huawei + Aliyun mirrors на settings level (через `settingsEvaluated`), совместимо с `RepositoriesMode.FAIL_ON_PROJECT_REPOS`.

Для проектов БЕЗ `dependencyResolutionManagement` в settings.gradle (старая раскладка) — добавлять mirrors вручную в проектный settings.gradle/build.gradle.

То же для `dl.google.com` — иногда тоже режется, но обычно работает. Если упадёт — поможет VPN на сессию.

### 3. Cmdline-tools должны жить ВНУТРИ Android SDK
`brew install --cask android-commandlinetools` ставит в `/opt/homebrew/share/android-commandlinetools/`, но **avdmanager оттуда не видит system-images** в Studio SDK (`~/Library/Android/sdk/system-images/`) даже с `ANDROID_HOME=...`. Symlink тоже не помогает.

Правильный путь: установить через sdkmanager в Studio SDK:
```bash
sdkmanager --sdk_root=$HOME/Library/Android/sdk "cmdline-tools;latest"
```
И использовать `~/Library/Android/sdk/cmdline-tools/latest/bin/avdmanager` — оттуда видит все packages.

### 4. NDK на ARM Mac: history of pain
Native код, который использует разные C/C++/ASM хитрости (libyuv, libvpx, breakpad), плохо собирается на Apple Silicon:
- NDK r21.4 → ar-tool x86_64-only, через Rosetta падает с libc++abi crash
- NDK r25.2 → libvpx ASM генерирует Mach-O target (ELF expected) → "mach-o section specifier" errors
- NDK r26.3 → libyuv assembler не понимает `.hidden/.type/.size` GAS-directives

Установленные параллельно: 21.4.7075529, 25.2.9519653, 26.3.11579264.

Wear OS Compose-only проектам native код не нужен (только Kotlin + JVM). Polnyy форк DrKLO/Telegram на ARM Mac не собирается без патчей — нужен Docker или TDLib подход.

### 5. Galaxy Watch Ultra AVD
Создан AVD `GalaxyWatchUltra`:
- system-images: `android-34;android-wear;arm64-v8a` (Wear OS 5 native arm64)
- Device profile: `wearos_xl_round` (47mm circular)
- Запуск: `nohup ~/Library/Android/sdk/emulator/emulator -avd GalaxyWatchUltra -gpu host > /tmp/emulator.log 2>&1 & disown`
- Без `nohup`/`disown` shell-родитель убивает emulator при exit

### 6. Папка проекта
`~/Разработки/TelegramWatch/`:
- `Telegram/` — форк DrKLO/Telegram (1.4GB) — оставлен как референс для tgnet/MTProto code, **не собирается на ARM Mac**, не использовать как build base
- `wear-app/` — рабочая база на основе Google ComposeStarter (модифицировано: добавлены mirrors в settings.gradle, local.properties)

Связано с [[telegramwatch-wear-os-plan]] (общий план проекта).
