Перейти к содержанию

Как отслеживаются приложения

Основы

Когда вы добавляете URL-адрес приложения в Obtainium, вы должны выбрать источник. Источники определяют, как информация о приложении и APK-файлы будут извлечены из введённого вами URL-адреса. В большинстве случаев Obtainium автоматически выбирает подходящий источник для использования - если это невозможно, появится выпадающий список "Переопределить источник".

Как минимум, источник должен предоставить следующие данные для своих приложений:

  • Версия приложения (или 'псевдоверсия' - идентификатор, который изменяется для каждой новой версии приложения)
  • Как минимум один URL-адрес загрузки APK, соответствующий предоставленной версии

Источники приложений также могут предоставлять другую информацию - это откроет дополнительные возможности или преимущества для интерфейса. Например:

  • Имя автора приложения
  • Идентификатор пакета приложения
  • Дата выпуска последней версии
  • Информация о предыдущих версиях или вариантах приложения

В идеальном мире каждый источник приложения предоставлял бы всю необходимую информацию простым способом - с одним приложением на данный URL со всей необходимой информацией в стандартном формате. Однако часто это не так - есть много разных способов предоставления выпусков приложений даже в рамках одного и того же источника, поэтому их невозможно обработать фиксированным набором шагов. По этой причине вам представлены различные дополнительные параметры при добавлении приложения, и с их помощью можно изменить способ извлечения информации о приложении. Хотя параметры по умолчанию работают для большинства приложений, вы можете захотеть разобраться в них, чтобы обработать крайние случаи - больше информации в разделе Источники приложений.

Примечание: Многие параметры фильтров в Obtainium (включая многие опциональные фильтры в зависимости от источника) используют регулярные выражения - вы должны быть знакомы с ними.

Обнаружение версий

Когда Obtainium отслеживает установленное приложение, он берёт версию приложения с Android и сравнивает её со строкой версии, предоставленной источником. Затем он решает, доступно ли обновление или изменился ли статус установки приложения. Это сравнение возможно только в том случае, когда две версии следуют одному и тому же формату, что не всегда так. Например, у вас могут быть следующие случаи:

  1. Obtainium из GitHub:

    • Версия приложения, согласно Android: 0.14.21
    • Версия, согласно источнику: v0.14.21-beta
  2. Cheogram из сервера SourceHut:

    • Версия приложения, согласно Android: 2.12.8-2+free
    • Версия, согласно источнику: 2.12.8-2
  3. Tor с официального сайта:

    • Версия приложения, согласно Android: 102.2.1-Release (12.5.6)
    • Версия, согласно источнику: отсутствует (строка версии не предоставлена этим источником HTML, поэтому хеш URL-адреса используется как 'псевдоверсия')
  4. Quotable из GitHub:

    • Версия приложения, согласно Android: 1
    • Версия, согласно источнику: v10

Obtainium хранит список "стандартных" форматов, которые он использует для этого сравнения (например, x.y.z или x.y). Если обе версии будут сравниваться с тем же форматом, то сравнение будет сделано. Иначе обнаружение версий будет отключено для этого приложения. В некоторых случаях Obtainium будет удалять лишние части с исходной строки, если это приведёт к стандартной версии (например, в случае с Obtainium v и -beta удаляются из v0.14.21-beta), тогда он может сделать сравнение. Мы никогда не пытаемся удалить части из "настоящей" версии, предоставляемой ОС.

Этот кусок кода определяет как генерируются различные "стандартные" форматы.

Всегда можно расширить этот код, чтобы добавить поддержку для большего количества форматов, но это требует тщательного рассмотрения. Например, если Android сообщает, что версия установленного приложения 1.2, но источник говорит, что последняя доступная версия этого приложения 1.2-4, должны ли мы убрать -4 и сказать, что они одинаковы (что означает отсутствие обновления)? Это может быть хорошо в некоторых контекстах (где -4 на самом деле не свидетельствует об изменении самого приложения), но не всегда. Так что поддерживать именно этот случай - не лучшая идея.

Отключение обнаружения версий обычно не должно оказывать существенного влияния на повседневное использование. Если обнаружение версий отключено для приложения, вы можете иногда сталкиваться с несоответствиями между реальной версией приложения, установленного в вашей системе, и версией, показанной в интерфейсе Obtainium. Это должно произойти только в двух случаях:

  1. Версия приложения изменяется из-за действий вне Obtainium (например, обновление через Google Play)
  2. Obtainium не удаётся обновить приложение в фоне

В таких случаях Obtainium не сможет обнаружить, что реальная версия приложения в ОС изменилась, и поэтому он не будет обновлять свои внутренние записи соответствующим образом - вам нужно будет вручную исправить несоответствие.

Два дополнительных параметра для приложений могут влиять на то, как обрабатываются версии:

  • Использовать код версии приложения как версию, обнаруженную ОС: Когда включено, Obtainium будет использовать код версии Android (число) вместо строки названия версии при сравнении с источником. Это может разрешить несоответствия, когда источник предоставляет коды версий, но ОС сообщает названия версий, или наоборот.
  • Использовать дату выпуска в качестве версии: Этот переключатель, доступный для многих источников, рассматривает дату выпуска как псевдоверсию вместо строки версии из источника. Это полезно когда источник не предоставляет значимую информацию о версии, но дата выпуска надёжная.

Смотрите также: Комментарий к Obtainium Issue #946

Фоновые обновления

Obtainium проверяет наличие обновлений приложений в фоне на регулярной основе. Вы можете контролировать частоту этих задач по обновлению на странице настроек.

Фоновая проверка обновлений может проходить через один из двух механизмов:

  • WorkManager (по умолчанию): Использует стандартный планировщик фоновых задач Android. Это энергоэффективно, но может быть отложено политиками оптимизации батареи.
  • Приоритетная служба (опционально): Запускает постоянную службу с уведомлением. Это может быть более надёжно на устройствах, которые агрессивно ограничивают фоновую работу, ценой постоянного уведомления. Требует Android 11+.

Вы можете ограничить запуск фоновых проверок:

  • Только Wi-Fi: Проверять наличие обновлений только когда подключено к сети Wi-Fi.
  • Только при зарядке: Проверять наличие обновлений только когда устройство заряжается.

Вы можете также включить проверку наличия обновлений каждый раз при открытии Obtainium ("При запуске"), и/или каждый раз при просмотре информации о приложении.

Тихая установка

После завершения фоновой проверки обновлений, доступные обновления разделяются на две категории:

  1. Обновления, которые могут быть применены в фоне
  2. Обновления, которые не могут быть применены в фоне

Для того, чтобы обновление автоматически установилось в фоне («тихое обновление»), должны быть соблюдены следующие критерии:

  • Версия Android 12 или выше
  • Устанавливаемое приложение нацелено на недавний уровень Android API
  • Текущая версия приложения установлена Obtainium
  • Обновления в фоне включены в Obtainium (как глобально, так и для конкретного приложения - это включено по умолчанию)
  • Если доступно несколько APK для обновления, дополнительные параметры для этого приложения должны отфильтровать лишние варианты APK, чтобы остался только один.

Каждое доступное обновление загружается и устанавливается, если это возможно, и затем пользователю присылается уведомление о доступном обновлении или его фоновой установке.

По умолчанию Obtainium загружает и устанавливает обновления по одному. При включённых параллельных загрузках будут обрабатываться несколько обновлений одновременно, что может ускорить массовые обновления, но может больше нагружать сеть и систему.

Обратите внимание, что из-за технических ограничений обновления в фоне могут быть установлены только на асинхронной основе с наилучшими усилиями. Поэтому, если фоновое обновление не будет установлено, вы не будете уведомлены об ошибке.