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. Every It is not. LLD hashes the input to the link step, not the resulting file — Measured on An id that changes without the code changing is no use for debugging either: The flag lives in Behaviour did not change, so no new tests. Каждая Это не так. LLD хэширует вход линковки, а не итоговый файл: объектные файлы, Замер на Идентификатор, который меняется без изменения кода, бесполезен и для отладки: Флаг задан в Поведение не менялось, новых тестов нет.
Две нативные библиотеки больше не несут build id, который менялся при каждой
сборке: именно из-за него сборка F-Droid не совпадала с нашей байт в байт.
🇬🇧 English
🔧 Build — the linker no longer stamps a build id
.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.
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.
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.
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.
android/build.gradle.kts rather than in the F-Droid
recipe, because the catalogue builds this same project: one source covers both
sides.
🧪 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 — звучит так, будто
отпечаток считается от содержимого и потому стабилен.
отладочные данные, всё то, что в .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.