Closed SomberNight closed 9 months ago
The differences look non-trivial and not localised to small sections.
Looking at libQt6Quick_arm64-v8a.so, it seems that there's mainly offset shifts of 8 or 16 bytes, leading to a large diff but with a single (or at least limited amount of) cause(s).
I tried a build with qt 6.5.3 and ndk 25c (803ec2bd978bc113d88b13dfd5e350cc2a5310f8), there only 3 files differ. These 3 are a subset of the original 7 files.
110c110
< e7da340b63a559771948f850a7ff1e76555c4f16ac3e5eb106cb11f4c3826902 ./lib/armeabi-v7a/libqml_QtQuick_Controls_Basic_qtquickcontrols2basicstyleplugin_armeabi-v7a.so
---
> a59b974888ebfd8e61159d38c090f42eb2d9186a9f5eee652ac2daccce4cda11 ./lib/armeabi-v7a/libqml_QtQuick_Controls_Basic_qtquickcontrols2basicstyleplugin_armeabi-v7a.so
114c114
< 6e9d94d66b9b138ea782f5f6552561640530a4b0734a9ac01bf27fbf607287b6 ./lib/armeabi-v7a/libqml_QtQuick_Controls_Material_impl_qtquickcontrols2materialstyleimplplugin_armeabi-v7a.so
---
> c86dc78d2efe7c7a959d57eaa20a11775aa6fad1a866de6c6b74dba1f97edf30 ./lib/armeabi-v7a/libqml_QtQuick_Controls_Material_impl_qtquickcontrols2materialstyleimplplugin_armeabi-v7a.so
130c130
< 7e445af4d0aa034413079c32e0bec97c3ccaf722f28dafc8519c67ca9d8bc3d6 ./lib/armeabi-v7a/libQt6QuickDialogs2QuickImpl_armeabi-v7a.so
---
> 9387f867f4b7b4784f73bafc8f9dfaf425e08cba0e2341ecd983fd2e7ba249bd ./lib/armeabi-v7a/libQt6QuickDialogs2QuickImpl_armeabi-v7a.so
I tried a build with qt 6.5.3 and ndk 25c (https://github.com/spesmilo/electrum/commit/803ec2bd978bc113d88b13dfd5e350cc2a5310f8), there only 3 files differ.
interesting. is there a way to build these files individually, without waiting for the entire build?
A bit of a tangent, but also a heads-up, I've wasted lots of hours due to missing this: https://github.com/SomberNight/python-for-android/commit/a35fa3a04c0979b466b1cb8f59607f8f8380a700 Hopefully I can prevent the same for you.
diff --git a/pythonforandroid/recipes/genericndkbuild/__init__.py b/pythonforandroid/recipes/genericndkbuild/__init__.py
index f114f080ef..f6eff79214 100644
--- a/pythonforandroid/recipes/genericndkbuild/__init__.py
+++ b/pythonforandroid/recipes/genericndkbuild/__init__.py
@@ -10,7 +10,7 @@ class GenericNDKBuildRecipe(BootstrapNDKRecipe):
url = None
depends = ['python3']
- conflicts = ['sdl2', 'qt5']
+ conflicts = ['sdl2', 'qt6']
def should_build(self, arch):
return True
This was causing ~non-deterministic build failures for me. Sometimes p4a's dependency graph-resolver (graph.py), to satisfy the "android" recipe, would pick "genericndkbuild" instead of "qt6".
To be specific, the "android" recipe specifies the following:
depends = [('sdl2', 'genericndkbuild', 'qt6'), 'pyjnius']
graph.py explores all possible ways to satisfy the dependencies of the requested recipes.
e.g. the "pyqt6" recipe specifies:
depends = ['qt6', 'pyjnius', 'setuptools', 'pyqt6sip', 'hostpython3', 'pyqt_builder']
So "qt6" would always get pulled in because of pyqt6. But for "android", graph.py would try both qt6 and genericndkbuild, in some order.
So graph.py would try both of these options:
Case 2 should not be valid as qt6 and genericndkbuild should not be picked together -- that results in build issues e.g. for the "pyjnius" recipe (due to e.g. conditional git patches, but AFAICT there are multiple potential ways it can fail based on the order of the other dependencies). This should be prevented by declaring the conflict in the recipes -- and p4a assumes that conflicts are consistently declared symmetrically.
graph.py picks case1 or case2 depending on the order the graph is explored, which depends on PYTHONHASHSEED
, which we set in contrib/android/Makefile.
For debug builds, PYTHONHASHSEED
is set to the current time,
for release builds, PYTHONHASHSEED
is set to the time of the last git commit.
So that means debug builds would just be failing randomly, independently for each build. But release builds would be failing consistently for a given commit, but completely independently of the code contents of that commit.
Because we are debugging reproducibility issues, I was building release builds, and making temp commits left-and-right. And I was getting the weirdest build failures that looked completely unrelated to what I just changed, and when I reverted to known good code and created a new commit for it, that code too would sometimes fail.
I actually considered hardware failure and ran memtest and looked at smartctl...
Note that the CI is building debug builds. i.e. there should be lots of random failures for the CI android build task. So I don't quite understand why that is not the case. Have you been manually restarting the randomly failed tasks until the current-time-based-PYTHONHASHSEED rolled lucky? :P I found at least e.g. https://cirrus-ci.com/task/6037980943482880 failed due to this.
(testing with https://github.com/sombernight/electrum/commit/6694ab9701f8f3a991ed5fee400dc65551dd4ccf, qt6.5.3)
The reason for libqml_QtQuick_Controls_Material_impl_qtquickcontrols2materialstyleimplplugin_armeabi-v7a.so
differing seems to be .cpp
(generated) "source" files differing. Specifically between two builds here, only qtquickcontrols2materialstyleimplplugin_RoundedElevationEffect_qml.cpp
differ:
$ a="/tmp/electrum_build/android2/fresh_clone/electrum/.buildozer/android" && b="/tmp/electrum_build/android3/fresh_clone/electrum/.buildozer/android" && for f in $(sudo find "$a" -name "*qtquickcontrols2materialstyleimplplugin*" | grep -v "\.so$" | cut -c70-); do sudo diff -qr "$a/$f" "$b/$f"; done
Files /tmp/electrum_build/android2/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/dists/Electrum/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/.rcc/qmlcache/qtquickcontrols2materialstyleimplplugin_RoundedElevationEffect_qml.cpp and /tmp/electrum_build/android3/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/dists/Electrum/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/.rcc/qmlcache/qtquickcontrols2materialstyleimplplugin_RoundedElevationEffect_qml.cpp differ
Files /tmp/electrum_build/android2/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/dists/Electrum/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/CMakeFiles/qtquickcontrols2materialstyleimplplugin.dir/.rcc/qmlcache/qtquickcontrols2materialstyleimplplugin_RoundedElevationEffect_qml.cpp.o and /tmp/electrum_build/android3/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/dists/Electrum/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/CMakeFiles/qtquickcontrols2materialstyleimplplugin.dir/.rcc/qmlcache/qtquickcontrols2materialstyleimplplugin_RoundedElevationEffect_qml.cpp.o differ
Files /tmp/electrum_build/android2/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/dists/Electrum/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/CMakeFiles/qtquickcontrols2materialstyleimplplugin.dir/.rcc/qmlcache/qtquickcontrols2materialstyleimplplugin_RoundedElevationEffect_qml.cpp.o and /tmp/electrum_build/android3/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/dists/Electrum/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/CMakeFiles/qtquickcontrols2materialstyleimplplugin.dir/.rcc/qmlcache/qtquickcontrols2materialstyleimplplugin_RoundedElevationEffect_qml.cpp.o differ
Files /tmp/electrum_build/android2/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/dists/Electrum/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/meta_types/qtquickcontrols2materialstyleimplplugin_json_file_list.txt.timestamp and /tmp/electrum_build/android3/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/dists/Electrum/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/meta_types/qtquickcontrols2materialstyleimplplugin_json_file_list.txt.timestamp differ
Files /tmp/electrum_build/android2/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/hostqt6/native-build/qtdeclarative/src/quickcontrols/material/impl/meta_types/qtquickcontrols2materialstyleimplplugin_json_file_list.txt.timestamp and /tmp/electrum_build/android3/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/hostqt6/native-build/qtdeclarative/src/quickcontrols/material/impl/meta_types/qtquickcontrols2materialstyleimplplugin_json_file_list.txt.timestamp differ
Files /tmp/electrum_build/android2/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/build/bootstrap_builds/qt6/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/.rcc/qmlcache/qtquickcontrols2materialstyleimplplugin_RoundedElevationEffect_qml.cpp and /tmp/electrum_build/android3/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/build/bootstrap_builds/qt6/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/.rcc/qmlcache/qtquickcontrols2materialstyleimplplugin_RoundedElevationEffect_qml.cpp differ
Files /tmp/electrum_build/android2/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/build/bootstrap_builds/qt6/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/CMakeFiles/qtquickcontrols2materialstyleimplplugin.dir/.rcc/qmlcache/qtquickcontrols2materialstyleimplplugin_RoundedElevationEffect_qml.cpp.o and /tmp/electrum_build/android3/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/build/bootstrap_builds/qt6/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/CMakeFiles/qtquickcontrols2materialstyleimplplugin.dir/.rcc/qmlcache/qtquickcontrols2materialstyleimplplugin_RoundedElevationEffect_qml.cpp.o differ
Files /tmp/electrum_build/android2/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/build/bootstrap_builds/qt6/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/CMakeFiles/qtquickcontrols2materialstyleimplplugin.dir/.rcc/qmlcache/qtquickcontrols2materialstyleimplplugin_RoundedElevationEffect_qml.cpp.o and /tmp/electrum_build/android3/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/build/bootstrap_builds/qt6/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/CMakeFiles/qtquickcontrols2materialstyleimplplugin.dir/.rcc/qmlcache/qtquickcontrols2materialstyleimplplugin_RoundedElevationEffect_qml.cpp.o differ
Files /tmp/electrum_build/android2/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/build/bootstrap_builds/qt6/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/meta_types/qtquickcontrols2materialstyleimplplugin_json_file_list.txt.timestamp and /tmp/electrum_build/android3/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/build/bootstrap_builds/qt6/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/meta_types/qtquickcontrols2materialstyleimplplugin_json_file_list.txt.timestamp differ
The parent folder contains a dozen cpp files, all start with a large inlined blob followed by some generated functions.
$ ls /tmp/electrum_build/android{2,3}/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/dists/Electrum/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/.rcc/qmlcache/ -la
/tmp/electrum_build/android2/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/dists/Electrum/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/.rcc/qmlcache/:
total 380
drwxr-xr-x 2 user user 4096 Dec 15 04:51 .
drwxr-xr-x 3 user user 4096 Dec 15 04:51 ..
-rw-r--r-- 1 user user 30940 Dec 15 04:51 qtquickcontrols2materialstyleimplplugin_BoxShadow_qml.cpp
-rw-r--r-- 1 user user 53747 Dec 15 04:51 qtquickcontrols2materialstyleimplplugin_CheckIndicator_qml.cpp
-rw-r--r-- 1 user user 21037 Dec 15 04:51 qtquickcontrols2materialstyleimplplugin_CursorDelegate_qml.cpp
-rw-r--r-- 1 user user 68956 Dec 15 04:51 qtquickcontrols2materialstyleimplplugin_ElevationEffect_qml.cpp
-rw-r--r-- 1 user user 7076 Dec 15 04:51 qtquickcontrols2materialstyleimplplugin_qmlcache_loader.cpp
-rw-r--r-- 1 user user 670 Dec 15 04:51 qtquickcontrols2materialstyleimplplugin_qml_loader_file_list.rsp
-rw-r--r-- 1 user user 21360 Dec 15 04:51 qtquickcontrols2materialstyleimplplugin_RadioIndicator_qml.cpp
-rw-r--r-- 1 user user 42871 Dec 15 04:51 qtquickcontrols2materialstyleimplplugin_RectangularGlow_qml.cpp
-rw-r--r-- 1 user user 9553 Dec 15 04:51 qtquickcontrols2materialstyleimplplugin_RoundedElevationEffect_qml.cpp
-rw-r--r-- 1 user user 30912 Dec 15 04:51 qtquickcontrols2materialstyleimplplugin_SliderHandle_qml.cpp
-rw-r--r-- 1 user user 68002 Dec 15 04:51 qtquickcontrols2materialstyleimplplugin_SwitchIndicator_qml.cpp
/tmp/electrum_build/android3/fresh_clone/electrum/.buildozer/android/platform/build-armeabi-v7a/dists/Electrum/jni/qt6/qtdeclarative/src/quickcontrols/material/impl/.rcc/qmlcache/:
total 380
drwxr-xr-x 2 user user 4096 Dec 15 05:41 .
drwxr-xr-x 3 user user 4096 Dec 15 05:41 ..
-rw-r--r-- 1 user user 30940 Dec 15 05:41 qtquickcontrols2materialstyleimplplugin_BoxShadow_qml.cpp
-rw-r--r-- 1 user user 53747 Dec 15 05:41 qtquickcontrols2materialstyleimplplugin_CheckIndicator_qml.cpp
-rw-r--r-- 1 user user 21037 Dec 15 05:41 qtquickcontrols2materialstyleimplplugin_CursorDelegate_qml.cpp
-rw-r--r-- 1 user user 68956 Dec 15 05:41 qtquickcontrols2materialstyleimplplugin_ElevationEffect_qml.cpp
-rw-r--r-- 1 user user 7076 Dec 15 05:41 qtquickcontrols2materialstyleimplplugin_qmlcache_loader.cpp
-rw-r--r-- 1 user user 670 Dec 15 05:41 qtquickcontrols2materialstyleimplplugin_qml_loader_file_list.rsp
-rw-r--r-- 1 user user 21360 Dec 15 05:41 qtquickcontrols2materialstyleimplplugin_RadioIndicator_qml.cpp
-rw-r--r-- 1 user user 42871 Dec 15 05:41 qtquickcontrols2materialstyleimplplugin_RectangularGlow_qml.cpp
-rw-r--r-- 1 user user 12115 Dec 15 05:41 qtquickcontrols2materialstyleimplplugin_RoundedElevationEffect_qml.cpp
-rw-r--r-- 1 user user 30912 Dec 15 05:41 qtquickcontrols2materialstyleimplplugin_SliderHandle_qml.cpp
-rw-r--r-- 1 user user 68002 Dec 15 05:41 qtquickcontrols2materialstyleimplplugin_SwitchIndicator_qml.cpp
However for this one cpp file, in one of two builds, only the inlined binary blob is present, the generated functions are missing:
Hopefully I can prevent the same for you.
Well, I've lost quite some hours on this as well in the past, until I added 'qt5' (and later 'qt6') to the other bootstrap recipes' conflict list. Since then, I've not seen these conflicts arise at all.
Since this worked for me, I haven't dug any further into graph.py. Thanks for your analysis, I think the proper fix would be for graph.py to exclude any recipes derived from BootstrapNDKRecipe
other than the one defined in the .spec file.
Note that the CI is building debug builds. i.e. there should be lots of random failures for the CI android build task. So I don't quite understand why that is not the case. Have you been manually restarting the randomly failed tasks until the current-time-based-PYTHONHASHSEED rolled lucky? :P I found at least e.g. https://cirrus-ci.com/task/6037980943482880 failed due to this.
I do keep a shell inside the build container open for long stretches of time, and run make_apk.sh directly for a build. Probably, once build-<arch>/dists/Electrum/dist_info.json
is present, the dependency graph is solidified.
I tried a build with qt 6.5.3 and ndk 25c (803ec2b), there only 3 files differ. These 3 are a subset of the original 7 files.
110c110 < e7da340b63a559771948f850a7ff1e76555c4f16ac3e5eb106cb11f4c3826902 ./lib/armeabi-v7a/libqml_QtQuick_Controls_Basic_qtquickcontrols2basicstyleplugin_armeabi-v7a.so --- > a59b974888ebfd8e61159d38c090f42eb2d9186a9f5eee652ac2daccce4cda11 ./lib/armeabi-v7a/libqml_QtQuick_Controls_Basic_qtquickcontrols2basicstyleplugin_armeabi-v7a.so
The basic style plugin can probably be excluded from the APK. There's no linker dependency from the Material style we use, unless it is loaded dynamically at runtime, but AFAIR this is not done.
When generating compiled resources using qmlcachegen
, the produced output is always different.
``` /home/user/wspace/electrum/.buildozer/android/platform/build-arm64-v8a/build/other_builds/hostqt6/native-build/install/libexec/qmlcachegen --bare --resource-path /qt-project.org/imports/QtQuick/Controls/Material/Button.qml -I /mnt/buildozer/.buildozer/android/platform/build-arm64-v8a/build/bootstrap_builds/qt6/jni/qt6/qtbase/./qml -I /mnt/buildozer/.buildozer/android/platform/build-arm64-v8a/build/bootstrap_builds/qt6/jni/qt6/qtbase/./qml -i /mnt/buildozer/.buildozer/android/platform/build-arm64-v8a/build/bootstrap_builds/qt6/jni/qt6/qtbase/qml/QtQuick/Controls/Material/qmldir --resource /mnt/buildozer/.buildozer/android/platform/build-arm64-v8a/build/bootstrap_builds/qt6/jni/qt6/qtdeclarative/src/quickcontrols2/material/.rcc/qmake_QtQuick_Controls_Material.qrc --resource /mnt/buildozer/.buildozer/android/platform/build-arm64-v8a/build/bootstrap_builds/qt6/jni/qt6/qtdeclarative/src/quickcontrols2/material/.rcc/qtquickcontrols2materialstyleplugin_raw_qml_0.qrc --resource /mnt/buildozer/.buildozer/android/platform/build-arm64-v8a/build/bootstrap_builds/qt6/jni/qt6/qtdeclarative/src/quickcontrols2/material/.rcc/qtquickcontrols2materialstyleplugin.qrc -o /mnt/buildozer/.buildozer/android/platform/build-arm64-v8a/build/bootstrap_builds/qt6/jni/qt6/qtdeclarative/src/quickcontrols2/material/.rcc/qmlcache/qtquickcontrols2materialstyleplugin_Button_qml.cpp /mnt/buildozer/.buildozer/android/platform/build-arm64-v8a/build/bootstrap_builds/qt6/jni/qt6/qtdeclarative/src/quickcontrols2/material/Button.qml ```
qmlcachegen
source code contains this
// Produce reliably the same output for the same input by disabling QHash's random seeding.
qSetGlobalQHashSeed(0);
.. and Qt claims to support the QT_HASH_SEED
environment var to do the same.
However, on each successive run, the output is different.
(this is with Qt6.4.3)
Edit: the hash seed hack used in the code for qmlcachegen
is an attempt to have deterministic ordering for items in a QHash
. This doesn't work in all cases, as the hash map for local variables is keyed to a pointer, which is probably why the ordering is not deterministic.
The cache generator is not generating code deterministicly, but I think I have a patch for qmlcachegen to produce deterministic output. I'll do a full compile first to see if nothing fell over.
Nice! Great find! So on qt6.4.3, that reduces the diff to:
< 3328acf272806ea1e347da98352fde4f8baf777899647fd5c1299aad6333d329 ./lib/armeabi-v7a/libQt6Quick_armeabi-v7a.so
---
> 7d5220988d5345ced028717a4823a7cd798761804d9c9947e36475f1ef97a634 ./lib/armeabi-v7a/libQt6Quick_armeabi-v7a.so
108c108
< 518841d88346449896ba32d1d24a76f946df8fffb9a6f390c7f0d94012727129 ./lib/armeabi-v7a/libQt6Multimedia_armeabi-v7a.so
---
> 182c15253cbb864a50824f2e2027efe975835bf1d23950b9362f7e0e0c78dcfc ./lib/armeabi-v7a/libQt6Multimedia_armeabi-v7a.so
130c130
< d111bbac5d346dc107ae71535e7ca8e188adc587a2dc268eff4510bdf7c6b6e0 ./lib/armeabi-v7a/libQt6QuickDialogs2QuickImpl_armeabi-v7a.so
---
> c208d6b55972d8617e234b12182f90b7010c2b238b01aa71824387bccfcd8188 ./lib/armeabi-v7a/libQt6QuickDialogs2QuickImpl_armeabi-v7a.so
(testing with 50d3c52dee2d2371c615dd0bd07935825b82281d)
With qt6.4.3, applying the patch for this bug from qt6.5: https://github.com/SomberNight/python-for-android/commit/80f6fcf99d8f04a00ec606873aabd5e2a19c23e0
The diff is now:
104c104
< 9bb68b4ca783c78488c5c876e5faeed8be9b9ffd7f514119203d3f4c5927058b ./lib/armeabi-v7a/libQt6Quick_armeabi-v7a.so
---
> 86b77e6f835eb0168e22e200b679d8fcaf1cd323324992d95a61d1ef9309f8a7 ./lib/armeabi-v7a/libQt6Quick_armeabi-v7a.so
108c108
< 2cc21633b844c5841d18d0c165d496b43afe243b3adaf50df3fab5a69f8ffef6 ./lib/armeabi-v7a/libQt6Multimedia_armeabi-v7a.so
---
> 56fb95ea876357c5e947f57770dcd6724a1f5eabd4cb58bd014d66c511c891bb ./lib/armeabi-v7a/libQt6Multimedia_armeabi-v7a.so
EDIT: Hmm, looks like (part of) the remaining diff is still caused by qsb non-determinicity:
When building with qt6.5.3, all qsb files are deterministic (none appear in diff in https://github.com/spesmilo/electrum/issues/8746#issuecomment-1857380714), so hopefully there is some other patch (and not a large refactor) that we could just "backport". libQt6Quick_armeabi-v7a.so
and libQt6Multimedia_armeabi-v7a.so
are built deterministicly in qt6.5.3 (however some other libs are not... - btw your patch from https://github.com/spesmilo/electrum/issues/8746#issuecomment-1857970418 cannot be applied at all as the relevant code was refactored).
Hmm, looks like (part of) the remaining diff is still caused by qsb non-determinicity When building with qt6.5.3, all qsb files are deterministic (none appear in diff in https://github.com/spesmilo/electrum/issues/8746#issuecomment-1857380714), so hopefully there is some other patch (and not a large refactor) that we could just "backport".
This is that patch, extracted from a large changeset merged into qt6.5.0: https://github.com/SomberNight/python-for-android/commit/01c6068791f44074e189e1a5d945cf50b02f4dcc
With that, I can now reproducibly build the full armeabi-v7a apk, with qt6.4.3.
EDIT: I only tested one arch, but hopefully master can now be built reproducibly, at https://github.com/spesmilo/electrum/commit/bf4934bb9f5f10f881c9e538f49962c7b6f74eaa.
qmlcachegen
source code contains this// Produce reliably the same output for the same input by disabling QHash's random seeding. qSetGlobalQHashSeed(0);
.. and Qt claims to support the
QT_HASH_SEED
environment var to do the same.
I wonder if we could just use QT_HASH_SEED
instead of the qshader patches.
thank both of you for fixing this so quickly
Building Android from the 4.5.0b0 tag (f4cddd7335e27b8e27190830a64eac7511b1e1ce), using
the apk is not reproducible.
The following files differ:
The differences look non-trivial and not localised to small sections.
related https://github.com/spesmilo/electrum/pull/8545