github Leadaxe/LxBox v2.20.3
LxBox v2.20.3

latest releases: v2.25.21, v2.25.20, v2.25.19...
3 months ago

L×Box v2.20.3

Nothing changes for you — the app behaves exactly as v2.20.1 and v2.20.2 do.
Two native libraries no longer carry a build id that changed on every build,
which is what kept the F-Droid build from matching ours byte for byte.

Для вас ничего не меняется — приложение работает ровно как v2.20.1 и v2.20.2.
Две нативные библиотеки больше не несут build id, который менялся при каждой
сборке: именно из-за него сборка F-Droid не совпадала с нашей байт в байт.

🇬🇧 English

🔧 Build — the linker no longer stamps a build id

Every .so normally carries a .note.gnu.build-id section: twenty bytes that
identify the build. The NDK asks for the sha1 variant, which sounds
content-derived and therefore stable.

It is not. LLD hashes the input to the link step, not the resulting file —
object files, debug data, things that never reach the .so. Two builds of the
same code in different environments get different ids while producing
identical libraries.

Measured on libdartjni.so, comparing the F-Droid build of v2.20.1 with ours:
the two files differ by exactly twenty bytes, at offset 0x2e0. That is the
build id itself. Section tables, .text, .rodata — everything else is
identical.

An id that changes without the code changing is no use for debugging either:
it cannot lead you to the right symbols. So the Android build now passes
--build-id=none to every subproject that compiles native code through CMake,
dropping the section entirely — the same thing other ZXing-based apps in the
F-Droid catalogue do.

The flag lives in android/build.gradle.kts rather than in the F-Droid
recipe, because the catalogue builds this same project: one source covers both
sides.

🧪 Tests

Behaviour did not change, so no new tests. flutter analyze and the existing
suite pass; llvm-readelf -n confirms the section is gone from both
libdartjni.so and libflutter_zxing.so.

🇷🇺 Русский

🔧 Сборка — линкер больше не штампует build id

Каждая .so обычно несёт секцию .note.gnu.build-id: двадцать байт,
опознающих сборку. NDK запрашивает вариант sha1 — звучит так, будто
отпечаток считается от содержимого и потому стабилен.

Это не так. LLD хэширует вход линковки, а не итоговый файл: объектные файлы,
отладочные данные, всё то, что в .so не попадает. Две сборки одного кода в
разных окружениях получают разные идентификаторы при побайтово одинаковых
библиотеках.

Замер на libdartjni.so, сборка F-Droid против нашей (v2.20.1): файлы
различаются ровно на двадцать байт по смещению 0x2e0. Это и есть build id.
Таблицы секций, .text, .rodata — всё остальное идентично.

Идентификатор, который меняется без изменения кода, бесполезен и для отладки:
по нему не выйти на нужные символы. Поэтому Android-сборка теперь передаёт
--build-id=none всем подпроектам, компилирующим нативный код через CMake, —
секция убирается целиком, как это делают и другие приложения каталога
F-Droid, собранные на ZXing.

Флаг задан в android/build.gradle.kts, а не в рецепте F-Droid: каталог
собирает этот же проект, поэтому один источник покрывает обе стороны.

🧪 Тесты

Поведение не менялось, новых тестов нет. flutter analyze и существующий
набор проходят; llvm-readelf -n подтверждает, что секции нет ни в
libdartjni.so, ни в libflutter_zxing.so.


Install / Установка

adb install -r LxBox-v2.20.3-arm64-v8a.apk

Без uninstall! Поверх существующей установки. Настройки и подписки сохранятся.

No uninstall needed — install over the existing one. Settings and
subscriptions are preserved.


Previous release / Предыдущий релиз: v2.20.2.

Don't miss a new LxBox release

NewReleases is sending notifications on new releases.