Документация ReMandre v1.1

Библиотека-плагин для Android-плагинов: скачивает и безопасно загружает .so (API 29+), поднимает pip/cffi при необходимости и даёт централизованный доступ через ReLoad.loaded_modules.

Android API 29+

Безопасная загрузка библиотек с учетом жестких W^X-ограничений системы.

Bootstrap Deps

Самостоятельная установка pip, cffi и pycparser напрямую из wheel-файлов.

Access Storage

Единое защищенное хранилище всех загруженных модулей через синглтон.

2. Для кого и когда нужно

Используй ReMandre, если твой плагин попадает под следующие критерии:

  • Напрямую зависит от нативной библиотеки .so.
  • Должен сам скачать библиотеку, а не раздувать вес исходного APK/плагина.
  • Требует возможность отключать optional-модули в UI.
  • Должен стабильно работать на Android 10+ без критических падений.

3. Компоненты

ReMandreCore

Точка входа. Читает зависимости, инициирует загрузку и инъекцию в среду.

ReLoad

Синглтон. Надежно хранит loaded_modules и выбор пользователя.

ModuleGatekeeper

Осуществляет строгий контроль доступа по __id__ плагина.

NativeLinker

Продвинутый загрузчик через android_dlopen_ext или классический ctypes.

RePip

Модуль подготовки окружения, распаковки и установки зависимостей.

SafeDownloader

Отвечает за stream-download, проверку контрольных сумм и атомарную замену.

4. Интеграция в плагин

Для базовой интеграции достаточно объявить зависимости, инициировать ядро через initialize() и прочитать загруженный модуль.

5. Формат __ReqRements__

Каждая запись в словаре задаётся по строгому формату: "имя_модуля": "url - need|optional"

need

Критически обязательный модуль. Если скачивание не удалось, плагин вызывает ImportError и прекращает работу.

optional

Дополнительный функционал. Пользователь может отключить его загрузку — модуль будет проигнорирован системой.

6. Что происходит при initialize()

  1. Ожидание полной готовности подсистемы CFFI (проверка флага _CFFI_READY).
  2. Чтение и валидация конфигурации __ReqRements__ у целевого плагина.
  3. Вызов DependencyProgressSheet, если файлы отсутствуют локально.
  4. Безопасное скачивание через SafeDownloader (потоковая запись + атомарность).
  5. Линковка библиотек через NativeLinker и их сохранение в ReLoad._storage.

7. Файловая структура

📁files/remandre_modules/
📄libfoo.so
📄libbar.so
⚙️user_choices.json
📁pip_core/
📦wheels/
📁site-packages/

8. Работа в Safe Mode

Если ExteraConfig.pluginsSafeMode == true, ядро ReMandre блокирует все IO-операций:

  • NativeLinker.load() — блокирует загрузку нативного кода.
  • RePip.bootstrap() — отменяет установку pip/cffi.
  • ReMandreCore.initialize() — прерывает флоу без вывода ошибок.

9. Чек-лист разработчика

  • ✅ Импортировать ReMandre (через try/except).
  • ✅ Объявить __ReqRements__ на уровне класса.
  • ✅ Вызвать ReMandreCore.initialize(self).
  • ✅ Извлекать либы через ReLoad.get().loaded_modules.
  • ✅ Реализовать запасной вариант для Safe Mode.

10. Простыми словами

ReMandre — это продвинутый менеджер нативных зависимостей для Android-плагинов. Он берёт на себя всю грязную работу: от скачивания .so до обхода системных ограничений Android 10+ и выдачи готовой библиотеки в твой код.