From 4c4ba11d810b8973c35b079b18d1d1001fa2906d Mon Sep 17 00:00:00 2001 From: Andrey Prokopyuk Date: Wed, 9 Sep 2026 14:04:52 +0300 Subject: [PATCH] Make release profiles reproducible --- app/build.gradle.kts | 8 ++++++-- docs/en/releases.md | 5 +++++ docs/ru/releases.md | 5 +++++ fastlane/metadata/android/en-US/changelogs/4.txt | 1 + fastlane/metadata/android/ru-RU/changelogs/4.txt | 1 + 5 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/4.txt create mode 100644 fastlane/metadata/android/ru-RU/changelogs/4.txt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 293ac2e..ceff620 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -31,8 +31,8 @@ android { applicationId = "life.andre.message487" minSdk = 26 targetSdk = 36 - versionCode = 3 - versionName = "0.0.3" + versionCode = 4 + versionName = "0.0.4" buildConfigField("String", "GIT_COMMIT_HASH", "\"$gitCommitHash\"") } signingConfigs { @@ -83,6 +83,10 @@ kotlin { compilerOptions { jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) } } +tasks.configureEach { + if (name.contains("ArtProfile")) enabled = false +} + dependencies { implementation(platform("androidx.compose:compose-bom:2025.01.01")) implementation("androidx.activity:activity-compose:1.10.0") diff --git a/docs/en/releases.md b/docs/en/releases.md index 14cec0a..97d4f80 100644 --- a/docs/en/releases.md +++ b/docs/en/releases.md @@ -92,3 +92,8 @@ use JDK 21, and compare against the versioned GitHub release APK with the expect signing certificate. Keep dependency metadata disabled for both APKs and bundles. A successful GitHub build alone does not establish reproducibility: the F-Droid build and binary comparison must pass before marking that verification complete. + +Android baseline/startup profile tasks are disabled because AGP generated different +profile contents for identical DEX code in GitHub and F-Droid builds. Android still +optimizes the app through its normal runtime profiling; initial launches do not get +the bundled profile optimization. See the [F-Droid reproducibility guidance](https://f-droid.org/docs/Reproducible_Builds/#bug-baselineprof-not-deterministic). diff --git a/docs/ru/releases.md b/docs/ru/releases.md index 9fc8d65..8c8f1da 100644 --- a/docs/ru/releases.md +++ b/docs/ru/releases.md @@ -94,3 +94,8 @@ Play не настроены. Архив нативных символов из с проверкой ожидаемого сертификата подписи. Метаданные зависимостей должны оставаться выключенными для APK и App Bundle. Успешной GitHub-сборки недостаточно для заявления о воспроизводимости: должны пройти сборка F-Droid и сравнение бинарных файлов. + +Генерация baseline/startup-профилей Android отключена: AGP создавал разное +содержимое профилей при одинаковом DEX-коде в сборках GitHub и F-Droid. Android +по-прежнему оптимизирует приложение по мере использования; первые запуски +не получают оптимизацию из встроенного профиля. См. [рекомендации F-Droid](https://f-droid.org/docs/Reproducible_Builds/#bug-baselineprof-not-deterministic). diff --git a/fastlane/metadata/android/en-US/changelogs/4.txt b/fastlane/metadata/android/en-US/changelogs/4.txt new file mode 100644 index 0000000..97a0247 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/4.txt @@ -0,0 +1 @@ +Make release APKs reproducible by disabling nondeterministic Android baseline profiles. App version, commit hash and privacy policy link remain available in the interface. diff --git a/fastlane/metadata/android/ru-RU/changelogs/4.txt b/fastlane/metadata/android/ru-RU/changelogs/4.txt new file mode 100644 index 0000000..2e32223 --- /dev/null +++ b/fastlane/metadata/android/ru-RU/changelogs/4.txt @@ -0,0 +1 @@ +Обеспечена воспроизводимость APK: отключены недетерминированные профили оптимизации Android. Версия, хеш коммита и ссылка на политику конфиденциальности доступны в интерфейсе.