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 .jar
s (filesystem order, and timestamps), and with some metadata (more timestamps).
However, all .aar
s 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