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?