Skip to content

Tejar 1.4.4 — in-app updates

Latest

Choose a tag to compare

@arsenii-cmd arsenii-cmd released this 26 Jul 19:34

Everything since 1.3.0, in one release. Based on Telegram 12.9.0.

Updating the app

Tejar lives outside any app store, so until now getting a new build meant noticing a release on GitHub and installing the APK by hand. This release makes the app take care of it.

Update button in the header. The main screen now has an update icon next to the search button, and it tints itself when a new version is waiting. It opens a new About app screen showing the installed version, a link to GitHub Releases, a manual Check for update button, and — when something newer exists — its version, changelog and an Update button with a download progress bar.

Background checks and notifications. The app checks for a new release roughly every six hours, on its own, and tells you when it finds one. The check survives reboots and only announces each release once. Tapping the notification opens the About app screen with the update ready to download. Previously a check only ever happened when the app was cold-started, so someone who never quits Telegram would simply never hear about a new build.

Downloads that survive being backgrounded. The download now runs under a foreground service, so leaving the app, turning the screen off or having battery saver enabled no longer stalls it partway through. Before, Android's Doze and App Standby throttling would quietly freeze the transfer as soon as the app lost focus.

Downloads remember where they got to. A dropped connection or a cancelled download no longer makes the app forget that an update exists. Previously any interruption wiped the discovered update entirely — the Update button vanished and it looked as though there were nothing to install. Now only a genuine signature mismatch discards a release; anything else leaves it in place so you can retry.

Only genuinely Tejar builds are installed. A downloaded APK's signing certificate is verified against the running app before installation is offered, so a tampered or substituted release asset is rejected rather than handed to the installer. HTTPS alone would not cover this — it protects the connection, not the identity of whatever served the bytes.

Versioning

Tejar's version is now its own, independent of the Telegram release the fork is built on. The About app screen shows both: the Tejar version at the top, and Based on Telegram 12.9.0 underneath. Previously the app reported the Telegram version as its own, which made it impossible to tell two Tejar builds apart if they shared an upstream base.

Branding

The app name reads Tejar consistently — on the main screen, on the About app screen and in the update dialog, including the German, Spanish, Italian and Brazilian Portuguese translations. Some of these places used to say "Telegram" even though the local resources were correct, because Telegram's downloaded language pack silently overrode them at runtime.

Fixes

Crash on launch. Certain builds crashed immediately at startup with a NoSuchMethodError. The release shrinker was removing a networking method it wrongly judged unreachable.

Wasted work during downloads. Progress is now reported once per whole percent rather than once per 16 KB — for a ~140 MB APK that is a hundred updates instead of several thousand, which stops the download from flooding the UI thread and the notification manager.

Security and reliability (from the 1.4 security review)

  • The local SOCKS5 proxy is no longer open on 127.0.0.1 to any app on the device — each session gets random credentials.
  • Subscription fetching enforces HTTPS and refuses redirects that would downgrade to plain HTTP.
  • Subscription URLs are stored encrypted, migrating any existing plaintext file.
  • Credentials in links are redacted before anything reaches logcat, and the server address no longer appears on the lock screen.
  • The VPN no longer reports Connected when the xray core never actually opened its SOCKS port.
  • A single corrupt entry in the config store no longer wipes every saved config.
  • Boot-time restore checks the real running-state flag, and its encrypted-storage I/O moved off the main thread.
  • The plaintext DNS fallback and a leftover unencrypted config.json write were removed; UDP is enabled for calls.
  • Shadowsocks link parsing handles plaintext user-info, no longer double-decodes URLs, and validates port ranges.
  • APP_ID / APP_HASH are read from local.properties at build time instead of being committed in source.

Install

Tejar-1.4.4-69729-arm64-standalone.apk — arm64 only. Signing certificate SHA-256: 435cb417636c38f763ed13753830bcc9f4e2d6912012f24876195a58aa0598d6.

Installs over any earlier Tejar build; your chats and VPN configs are kept.


Русская версия

Всё, что появилось с версии 1.3.0, одним релизом. Основано на Telegram 12.9.0.

Обновление приложения

Tejar живёт вне магазинов приложений, поэтому раньше получить новую сборку означало заметить релиз на GitHub и поставить APK вручную. В этой версии приложение берёт это на себя.

Кнопка обновления в шапке. На главном экране рядом с поиском появилась иконка обновления, и она подсвечивается, когда доступна новая версия. По нажатию открывается новый экран «О приложении»: установленная версия, ссылка на GitHub Releases, кнопка ручной проверки, а если есть что ставить — версия, список изменений и кнопка обновления с полосой прогресса.

Проверка в фоне и уведомления. Приложение само проверяет наличие новой версии примерно раз в шесть часов и сообщает, когда находит. Проверка переживает перезагрузку телефона, а о каждом релизе сообщается один раз. Тап по уведомлению открывает экран «О приложении» с готовым к скачиванию обновлением. Раньше проверка происходила только при холодном запуске, так что человек, который никогда не закрывает Telegram, попросту не узнавал о новых сборках.

Скачивание не прерывается в фоне. Загрузка теперь идёт под foreground-сервисом, поэтому сворачивание приложения, выключенный экран и включённый режим энергосбережения больше не останавливают её на середине. До этого механизмы Doze и App Standby тихо замораживали передачу, как только приложение теряло фокус.

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

Ставятся только настоящие сборки Tejar. Подпись скачанного APK сверяется с подписью установленного приложения до того, как предложить установку, поэтому подменённый файл релиза будет отвергнут, а не передан установщику. Одного HTTPS для этого мало: он защищает соединение, но не подтверждает, кто именно отдал байты.

Версии

Версия Tejar теперь своя собственная и не зависит от версии Telegram, на которой собран форк. На экране «О приложении» показаны обе: версия Tejar сверху и строка «Based on Telegram 12.9.0» под ней. Раньше приложение выдавало версию Telegram за свою, и различить две сборки Tejar с одной и той же основой было невозможно.

Название

Приложение называется Tejar везде — на главном экране, на экране «О приложении» и в диалоге обновления, включая немецкий, испанский, итальянский и бразильский португальский переводы. В части этих мест раньше отображалось «Telegram», хотя локальные ресурсы были правильными: языковой пакет, который Telegram скачивает с серверов, незаметно перекрывал их во время работы.

Исправления

Краш при запуске. Некоторые сборки падали сразу при старте с ошибкой NoSuchMethodError. Оптимизатор релизной сборки вырезал сетевой метод, ошибочно посчитав его недостижимым.

Лишняя работа во время загрузки. Прогресс теперь сообщается раз на целый процент, а не на каждые 16 КБ: для APK объёмом около 140 МБ это сто обновлений вместо нескольких тысяч, и загрузка перестала перегружать интерфейс и менеджер уведомлений.

Безопасность и надёжность (по итогам ревью 1.4)

  • Локальный SOCKS5-прокси больше не открыт на 127.0.0.1 для любого приложения на устройстве: на каждую сессию выдаются случайные учётные данные.
  • Загрузка подписок работает только по HTTPS и отклоняет редиректы с понижением до обычного HTTP.
  • Ссылки на подписки хранятся в зашифрованном виде, старый незашифрованный файл переносится автоматически.
  • Учётные данные в ссылках вырезаются до попадания в logcat, а адрес сервера больше не показывается на экране блокировки.
  • VPN больше не рапортует «Подключено», если ядро xray на самом деле не открыло свой SOCKS-порт.
  • Одна повреждённая запись в хранилище конфигов больше не стирает все сохранённые конфиги.
  • Восстановление после перезагрузки проверяет реальный флаг работы, а обращения к зашифрованному хранилищу вынесены с главного потока.
  • Убраны незашифрованный DNS-фолбэк и оставшаяся запись открытого config.json; для звонков включён UDP.
  • Разбор Shadowsocks-ссылок понимает незашифрованную часть с логином, больше не декодирует URL дважды и проверяет диапазон портов.
  • APP_ID и APP_HASH читаются при сборке из local.properties, а не лежат в исходниках.

Установка

Tejar-1.4.4-69729-arm64-standalone.apk — только arm64. SHA-256 сертификата подписи: 435cb417636c38f763ed13753830bcc9f4e2d6912012f24876195a58aa0598d6.

Ставится поверх любой предыдущей сборки Tejar, переписки и конфиги VPN сохраняются.