Source Code Mapper AI
Android-приложение: открывает локальный репозиторий или клонирует его с GitHub, строит «полную картину» кода и формирует интерактивный HTML-отчёт из 4 столбцов со сворачиваемыми блоками.
Что делает
- Открыть локальный репозиторий — системный выбор папки (SAF, доступ только на чтение).
- Клонировать с GitHub —
owner/repoили полный URL; по умолчанию git clone (JGit), при ошибке — автоматический откат на скачивание ZIP (codeload.github.com). - Построить отчёт — гибридный конвейер:
- на устройстве: обход файлов → статический разбор (файлы, классы, функции, методы, свойства, UI-элементы, триггеры, ресурсы манифеста, маршруты) → эвристики безопасности;
- через AI: столбец 2 (описание) и столбец 4 (оценка), плюс обзор архитектуры;
- генерация HTML и показ в WebView с экспортом/шерингом.
- Express-отчёт — прогон одного и того же кода по всем настроенным моделям по очереди, затем сравнение результатов в супер-отчёт (согласие/расхождения моделей, мнения по каждому элементу, AI-разбор разногласий).
- AI-провайдеры — добавление, редактирование и удаление OpenAI-совместимых провайдеров, возврат к набору по умолчанию.
Правила анализа
- README,
*.md,*.txt, лицензии, changelog и прочая документация не анализируются — учитывается только реальный исполняемый код. - Комментарии в коде игнорируются: элементы строятся только по значимым строкам, комментарии и пустые строки в отчёт не попадают; при этом каждая строка кода находит место.
- Если AI не уверен в назначении участка, он обязан пометить строку уровнем уверенности (
Подтверждено / Вероятно / Не подтверждено) и указать краткое обоснование или причину, по которой подтвердить не удалось (столбец 4).
Отчёт: 4 столбца
| Колонка | Содержимое |
|---|---|
| 1. Наименование / имя / обозначение | Все элементы: файлы, классы, функции, методы, свойства, UI-элементы, триггеры и пр. Имя + краткое пояснение. В свёрнутом виде видна только эта суммаризация. |
| 2. Способ / технология / метод / тип / класс | Подробное описание (AI + статика). |
| 3. Конкретные строки | Номера строк и полное содержимое. Каждая строка файла попадает либо в свой элемент, либо в блок «Прочие строки» — покрытие 100%. |
| 4. Оценка кода | Уязвимость / Проблема / Предупреждение / Норма / Лучшая практика + пояснение. База — статические правила, уточняется AI. |
Всё свёрнуто по умолчанию: группа файла → строка элемента → 4-колоночная сетка. Любой текст, не вмещающийся в четверть ширины экрана (ячейка ~25%), получает кнопку ▸ / ▾. Есть поиск, фильтр по оценке, «Развернуть всё / Свернуть всё».
Языки интерфейса и отчёта
Английский — основной язык и язык по умолчанию. Русский и немецкий поддерживаются полностью: интерфейс, HTML-отчёт (заголовки, столбцы, уровни, супер-отчёт), статические описания элементов, сообщения и названия провайдеров. Выбор языка влияет и на язык ответов модели. Технический журнал анализа остаётся на английском (отладочная информация).
Провайдеры ИИ (Настройки)
| Провайдер | Base URL | Модель по умолчанию | Ключ |
|---|---|---|---|
| Ollama Cloud | https://ollama.com/v1 |
задаётся пользователем | API-ключ или OAuth device flow |
| OpenCode Go | https://opencode.ai/zen/go/v1 |
space-bunny-free |
sk-... |
| OpenCode Zen | https://opencode.ai/zen/v1 |
big-pickle |
sk-... |
Кнопка «Проверить соединение» дергает /models. Ollama OAuth: приложение открывает ollama.com/connect?... и опрашивает API до появления ключа.
Сборка
$env:JAVA_HOME="C:\Program Files\Microsoft\jdk-17.0.15.6-hotspot"
$env:ANDROID_HOME="C:\Android\Sdk"
.\gradlew.bat :app:assembleDebug
APK: app/build/outputs/apk/debug/app-debug.apk
Установка на эмулятор:
adb -s emulator-5554 install -r -t app/build/outputs/apk/debug/app-debug.apk
Стек
Kotlin (встроенный в AGP 9.1.1), Jetpack Compose (BOM 2024.09.00, Material3), coroutines, kotlinx-serialization-json, OkHttp, JGit, DocumentFile, Gradle 9.3.1, compileSdk 36 / minSdk 26.
Структура исходников
app/src/main/java/online/devhorizon/sourcecodemapper/
MainActivity.kt, MainViewModel.kt
model/Models.kt
i18n/Strings.kt # EN / RU / DE
data/Settings.kt # провайдеры, настройки, кэш
data/RepoAccess.kt # SAF + JGit + ZIP-фолбэк
analysis/Language.kt
analysis/Comments.kt # фильтр комментариев и пустых строк
analysis/StaticIndexer.kt # извлечение элементов + покрытие строк
analysis/SecurityRules.kt # правила столбца 4
analysis/Enricher.kt # AI для столбцов 2 и 4
analysis/ExpressMerger.kt # супер-отчёт по нескольким моделям
ai/AiClient.kt # 4 провайдера + Ollama OAuth
report/HtmlReport.kt # HTML: 4 колонки, сворачивание, поиск
ui/ # Compose-экраны
Ограничения
- Лимиты по умолчанию: 2000 файлов, 320 КБ на файл, 25 МБ текста (настраиваются).
- Скорость AI зависит от выбранной модели; результаты кэшируются по хэшу файла.
- Для приватных репозиториев нужен GitHub-токен.
CI
GitHub Actions собирает debug-APK при каждом пуше в main и в pull request (.github/workflows/android.yml). Пуш тега v* прикрепляет APK к GitHub Release.
Скриншоты
- Главный экран — источник репозитория: локальная папка через SAF, клон с GitHub (owner/repo, ветка, токен) либо встроенный пример; тут же выбор языка отчёта.

- Клонированный репозиторий — после клона: 38 файлов, 4756 строк, 203,7 КБ, разбивка по языкам (Kotlin 24 файла / 4200 строк, Text, BAT, XML, YAML, GITIGNORE, Properties, PRO) и кнопки «Build 4-column report» и «Express report (all models)».

- Настройки и провайдеры ИИ — язык отчёта (RU / DE / EN) и список OpenAI-совместимых провайдеров: DevHorizon (primary) без API-ключа, добавление и редактирование своих.
Скачать APK
app-debug.apk — 12,4 МБ, debug-сборка версии 1.0 (Android 8.0+, minSdk 26).
Страница релиза: v1.0-debug · исходники: github.com/sashok53011/SourceCodeMapperAI.
Обновление: приложение проверило свой собственный код — и почти все находки оказались ложными.
Первый прогон анализа на своём же репозитории дал 21 находку. Разобрал их по файлам и строкам: оказалось, что сканер находил совпадения в собственных определениях правил, в объявлениях пространств имён XML и в скриптах сборки. Исправил.
Было — 21 находка:
- 7 «уязвимостей» в
analysis/SecurityRules.kt: правилоtrust_allнаходило собственный регекс;addJavascriptInterface×4 — это своё же правило и три строки его перевода (en/ru/de); «выполнение команд ОС» и «небезопасная десериализация» — тоже собственные регексы правилcommand_execиunsafe_deser; - 2 предупреждения «Unfinished work marker (TODO/FIXME/HACK)» — в регексе правила перечислены сами эти слова;
- 4 предупреждения «Plain HTTP URL — traffic is not encrypted»: это
xmlns:android=" http://schemas.android.com/apk/res/android"в манифесте, в drawable и в двух mipmap-файлах, то есть объявление пространства имён, а не сетевой адрес; - 3 предупреждения по манифесту:
allowBackup="true"иusesCleartextTraffic="true"— замечания по делу, они исправлены; «Exported component — reachable by other apps» на launcher-активити — это требование Android 12+, а не дефект; - 5 строк «Best practice: Uses HTTPS» в скриптах
gradlewиgradlew.bat— просто шум.
Что исправлено в анализаторе и приложении:
- механизм самоисключения в сканере: файловый маркер
scm-scan:ignore-fileи строчныйscm-scan:ignore— пакет правил носит маркер сам и больше не сканируется; - объявления пространств имён и доверенные URI (schemas.android.com, w3.org, apache.org, xml.org) больше не считаются «plain HTTP»;
exported="true"в манифесте, где объявленandroid.intent.category.LAUNCHER, теперь by design;- инструментальные скрипты Gradle исключены из анализа — в отчёте 36 файлов вместо 38;
- манифест усилен:
allowBackup="false",usesCleartextTraffic="false", убранrequestLegacyExternalStorage.
Стало — 0 находок: 0 уязвимостей, 0 предупреждений, 0 проблем. В отчёте 36 файлов, 1019 строк со статусом «OK» и 25 строк «Best practice». Правки в репозитории — коммит 0baac99.
Кадры ниже — отчёт после исправлений, снятый с телефона.
- Отчёт: шапка и файлы — «Security & quality findings: 0», разбивка по файлам.

- Отчёт: строки кода — столбцы «строка кода ↔ оценка», уровни OK и Best practice.
