140 Android is not reproducible
After fixing the license problem, I found another reproducibility problem.
I had to decompile the APK with apktool d, and I got these two different files (in smali_classes3/org/mozilla/experiments/nimbus):
From what I understand, the difference is the order in which a couple of values (this and a boolean value) are assigned to variables/registers (v0 and v1).
And, because of this v0 and v1 are also swapped in the following lines.
Initially, I thought it was generated code, since it includes Nimbus in its name, but after investigating a while, I started thinking it's a matter of optimization or something that needs to happen at runtime.
From obj-x86_64-unknown-linux-android/gradle/build/mobile/android/fenix/app/outputs/mapping/fenixBeta/mapping.txt:
# {"id":"sourceFile","fileName":"R8$$SyntheticClass"}
# {"id":"com.android.tools.r8.synthesized"}
[snip]
34:44:kotlin.Unit org.mozilla.experiments.nimbus.Nimbus$setFetchEnabled$1.invokeSuspend$lambda$0(org.mozilla.experiments.nimbus.Nimbus,boolean):266:266 -> invoke
45:47:kotlin.Unit org.mozilla.experiments.nimbus.Nimbus$setFetchEnabled$1.invokeSuspend$lambda$0(org.mozilla.experiments.nimbus.Nimbus,boolean):267:267 -> invoke
The only occurrence of setFetchEnabled I could find is in components/nimbus/android/src/main/java/org/mozilla/experiments/nimbus/Nimbus.kt in Application Services, but the artifacts of A-S are almost reproducible.
There are some problems with .jars (filesystem order, and timestamps), and with some metadata (more timestamps).
However, all .aars are exactly the same.
More docs about R8 and synthetic stuff:
- https://r8.googlesource.com/r8/+/refs/heads/main/doc/retrace.md (remaps)
- https://r8-docs.preemptive.com/ (unofficial docs with some parameters)
- https://medium.com/thoughts-overflow/effects-of-javas-synthetic-accessor-methods-in-android-bb67b3bac22e
- https://medium.com/@iateyourmic/synthetic-accessors-in-kotlin-a60184afd94e
At this point, I think I need someone more expert of Android stuff to have a look at this.
Unless we're lucky and we never hit this again