External Publication
Visit Post

Understanding details of build environment

F-Droid Forum [Unofficial] February 27, 2026
Source

I am trying to understand a bug in the F-droid version of org.totschnig.myexpenses which seems caused by some details of the tool chain that are different from when I build the app locally.

The app crashes on Android 10 when using code from ktor-server library with

Caused by: java.lang.VerifyError: Verifier rejected class dd.a: void dd.a.E(int, int, byte[]) failed to verify: void dd.a.E(int, int, byte[]): [0x8] void dd.a.E(int, int, byte[]): [0x8] register v3 has type Precise Reference: byte[] but expected Reference: java.lang.Object[]

When I build the app locally with the Gradle command that is also used by F-droid (packageExternReleaseUniversalApk), the crash does not happen.

Looking at the log file (log: org.totschnig.myexpenses:834 - F-Droid Monitor), I could not find any conclusive difference:

  • It does not use the Gradle wrapper, but still uses the same Gradle version 9.3.1.
  • The log file does not print which version of the Android Gradle Plugin is used, so I guess, it respects the version from my catalogue: 9.0.1
  • It mentions Build tools version 36.0.0, which might be different from the one I would by default use locally (36.1.0), but even if add buildToolsVersion "36.0.0" to my local build, to force the same, my build still does not reproduce the issue.
  • The log file does not print very specific information about the Java version used, besides the mention of “Java compiler version 21”

So I am left wondering, what else could cause the F-Droid build to behave differently, for example pick up a different AGP or R8 version?

Discussion in the ATmosphere

Loading comments...