[Help wanted] How to create a reproducible build (FairEmail)

Ok, even then, can I get an APK to check?

/PS: you can even host the APK on https://www.faircode.eu/ as it won’t be downloaded often.

I don’t want to publish a public version, so please contact me, for example by email, or else via the contact form, for a download link, stating which version you want to have built.

Please PM me here, the fdroid APK for Release 1.2114 Vallibonavenatrix · M66B/FairEmail · GitHub :slight_smile:

Diffliog is huge that .so :frowning:
fair2114.log.7z.001.zip (3 MB)
fair2114.log.7z.002.zip (1.8 MB)
(remove .ZIP from name)

@linsui @obfusk fyi (I’ll provide APKs in private if needed)

Is the same NDK being used as specified in build.gradle?

With a bit of luck, this will solve the difference in the Manifest file:

Let’s fix them one by one. Maybe with the bugsnag id fixed other diff will disappear. :slight_smile:

Yes

recipe: metadata/eu.faircode.email.yml · 162d1b429d468698e00bdb2cb2997744b9420ea4 · F-Droid / Data · GitLab
vs
upstream: FairEmail/app/build.gradle at 1.2114 · M66B/FairEmail · GitHub

And the ABI filters?

The build-id is different. We need to remove it.

Will this work?

we include all 4 arches, yes, or did you mean something else?

See Reproducible Builds | F-Droid - Free and Open Source Android App Repository.

There are more than 4 possible architectures, and that could lead to differences I guess.

you can see the APK here: Artifacts · fdroid build (#5371903075) · Jobs · F-Droid / Data · GitLab

Do you know how I can specify --build-id=none for the F-Droid version only?

I thought you can put

    externalNativeBuild {
        cmake {
            version "3.22.1"
            path "CMakeLists.txt"
        }
    }

in flavor with different cmake file path.

I guess this will work:

I checked the generated manifest, and the dummy static Bugsnag ID is part of it. I’ve also checked if the --build-id=none to the C compiler.

I have sent you a new build via PM. So, you can compare again, and hopefully the builds will be closer to each other.

You can download a new test version, with the build-id suppressed, via the same link:

Downloaded

Rebuilt release 1.2114 + Added dummy Bugsnag ID for F-Droid build + Suppress build-id for F-Droid

  - versionName: '1.2114'
    versionCode: 2114
    commit: 49ab2ea16ad0d687529019b7399a28f5674730d7
    subdir: app
    submodules: true
    sudo:
      - apt-get update
      - apt-get install -y openjdk-17-jdk-headless
      - update-java-alternatives -a
    gradle:
      - fdroid
    patch:
      - 8c2689c2b19870d202f1702f7c1be7d2a7f67622.patch
      - decd57c460a12f1aca421b008cd25738d92297dc.patch
    prebuild:
      - sed -i -e '/keystoreProperties/d' build.gradle
      - sdkmanager 'cmake;3.22.1'
    scandelete:
      - app/lib
    ndk: r25c

diff log as big :frowning:
fair2114_2patches.log.7z.001.zip (3 MB)
fair2114_2patches.log.7z.002.zip (1.8 MB)
(remove .ZIP from name)

The manifest difference is resolved in any case.

The diff file might be big, but it looks like mostly offset differences. The symbols seem to be the same (obviously a checked a few only).

I have no idea what’s causing this. The CMAKE and NDK version are the same in any case.