Репозиторий: github.com/vladon/morphe-patches-navi
Bytecode patches for Yandex Navigator (ru.yandex.yandexnavi), aligned with reverse‑engineering notes in the parent navi repo (AGENTS.md).
Приложение не качает патчи с «пустой» страницы репозитория — ему нужен GitHub Release с файлом patches-<версия>.mpp и актуальные patches-list.json / patches-bundle.json (см. шаблон Morphe Patches — Usage и документацию Morphe).
Добавить источник одной ссылкой (рекомендуется):
https://morphe.software/add-source?github=vladon/morphe-patches-navi&name=Yandex+Navigator+patches
Параметр name задаёт подпись в списке источников; без него Morphe показывает «Unnamed».
Открой эту ссылку в браузере на телефоне (или из README) — Morphe подхватит её как App Link. Не вставляй morphe.software/add-source?… в поле «URL пачки / patch bundle» внутри Morphe: для произвольных хостов приложение требует путь, оканчивающийся на .json, и покажет тост «Patch bundle URL must point to a .json file».
Если добавляешь источник вручную в Morphe (вставкой URL в настройках), укажи одно из значений:
https://github.com/vladon/morphe-patches-navi— репозиторий без лишнего пути (/releases,/tree/…не подходят для этого поля).- либо прямой raw-файл:
https://raw.githubusercontent.com/vladon/morphe-patches-navi/main/patches-bundle.json
Важно: Morphe Manager читает patches-bundle.json с ветки main через raw.githubusercontent.com, а не из GitHub Release. В этом файле на main должно быть заполнено поле download_url (указывает на .mpp в Releases). Workflow Manual publish MPP после релиза коммитит обновлённые patches-bundle.json и patches-list.json в main.
Поле created_at должно быть в виде YYYY-MM-DDTHH:mm:ss без суффикса Z (как в официальном morphe-patches). С …Z десериализация в приложении падает, и в тосте видно обрезанный JSON (Failed to download 'Unnamed': { "created_at": …).
Пока нет релиза с .mpp и актуального download_url на main, загрузка пачки не сработает — сначала опубликуй релиз (ниже).
Штатный release.yml при каждом push в main / dev гоняет Gradle-сборку патчей. Блок semantic-release (GPG, npm, тег, GitHub Release из .releaserc) выполняется только если в настройках репозитория задан секрет GPG_PRIVATE_KEY (и при необходимости GPG_PASSPHRASE, переменная GPG_FINGERPRINT). Без них workflow не падает — только проверка сборки. Публикацию .mpp без GPG по-прежнему делай через Manual publish MPP:
- На GitHub: Actions → Manual publish MPP → Run workflow → поле version (например
1.0.0, как вgradle.properties). - Дождись зелёной галочки.
- В репозитории появится Release
v1.0.0с артефактами:patches-1.0.0.mpp,patches-list.json,patches-bundle.json. - Снова открой ссылку add-source выше в браузере на устройстве (не вставляй её в поле URL пачки внутри приложения).
Повторный запуск с той же версией: сначала удали старый release/tag v… вручную на GitHub, либо увеличь версию в workflow.
Учётные данные для maven.pkg.github.com/MorpheApp/registry — в %USERPROFILE%\.gradle\gradle.properties (или переменные окружения GITHUB_ACTOR / GITHUB_TOKEN):
gpr.user=ТВОЙ_ЛОГИН_GITHUB
gpr.key=ghp_...Сборка MPP для Android:
cd morphe-patches-navi
.\gradlew.bat :patches:buildAndroid generatePatchesListАртефакт: patches\build\libs\patches-<version>.mpp.
| Patch | Effect |
|---|---|
| Enable debug panel | Forces ru.yandex.yandexmaps.debug.v0.c()Z and ru.yandex.yandexmaps.debug.m0.i()Z to always return true, unlocking the internal Maps‑shell debug drawer gate (28.6.5 / versionCode 739172520). |
| Bypass Passport signature mismatch crash | Removes the IllegalStateException / PassportRuntime block in com.yandex.passport.internal.c0 releaseRuntimeChecks so a Morphe‑signed APK can start past Passport init (fragile across versions). |
| Debuggable application manifest | Sets android:debuggable="true" on <application> so Passport takes the debuggable branch in the same checks (use only on a research device). |
Переподписанный Morphe‑сборкой Навигатор на основном пользователе часто не логинится, если другой пакет Яндекса уже зарегистрировал в системе тип аккаунта com.yandex.passport (типичный владелец — «Яндекс с Алисой», com.yandex.aliceapp: в adb shell dumpsys account видно AuthenticatorDescription {type=com.yandex.passport} на …aliceapp…AuthenticationService). Тогда при входе возможна ошибка вроде authorizeByCookie / cannot explicitly add accounts of type: com.yandex.passport — это ограничение AccountManager, а не патча debuggable.
Проверенный обход: установить только патченый Навигатор в отдельном рабочем профиле (work profile / второй пользователь Android), куда не ставить приложение‑владелец com.yandex.passport с основного профиля. В таком профиле authenticator для com.yandex.passport принадлежит самому Навигатору, и вход проходит.
Подробнее: родительский репозиторий navi, файл AGENTS.md (раздел Morphe: Passport, dumpsys account, конфликт с Алисой).
Declared in Constants.kt: package ru.yandex.yandexnavi, ApkFileType.APKS, version 28.6.5, signing cert SHA‑256 from official Play base.apk.