Skip to content

Conversation

@bitmold
Copy link
Collaborator

@bitmold bitmold commented Jan 16, 2026

This PR grabs a lot of the initial work from #3011 that pertained to the android project. Nothing in JavaScript is changed here from develop, so these changes shouldn't touch the iOS project and it should be identical to building the iOS project on develop.

Lots of the individual pieces that make up the mega 16kb alignment PR depend on this work, making this PR a foundation for a bunch of smaller incoming Android changes...

Non-code changes:

  • README updates from Intertwined Mobile Updates (Android 16KB Alignment, Necessary iOS changes, React Native 0.77) #3011
  • Android build scripts from Intertwined Mobile Updates (Android 16KB Alignment, Necessary iOS changes, React Native 0.77) #3011, including Google's script to check ELF alignment. Included my documentation for the weirder scripts
  • From Intertwined Mobile Updates (Android 16KB Alignment, Necessary iOS changes, React Native 0.77) #3011 Comment out android part of the top-level script to update tor binaries from Tor Browser releases - this breaks the 16KB Aligned binary I built for Quiet. Add some clarifying language for when it updates tor binaries on mac/linux/windows
  • Remove unused Guardian Project (formerly for GP's tor-android) and Jitpack (Github repo as Gradle DEP) gradle repositories from top-level Gradle project on Android
  • Significantly Cleaned up and Modernized build.gradle, settings.gradle and most importantly `app/build.gradle.
    • The broken Groovy syntax Quiet used was very inconsistent. The syntax is now uniform and similar to the modern Kotlin DSL language, which is what Google wants Android apps to use and will make upgrading sometime way easier. Google encourages people to make this change before modernizing their gradle projects.
    • Fixed/Removed a lot of deprecated Gradle features which give warnings today, but ultimately will give errors/be unsupported when a future release of the Android Gradle Plugin Quiet will be forced to upgrade to is released. With these changes, a lot less gradle stuff (if any) will need to be changed to keep the app building whenever AGP 10 is released. In Android Studio the scrollbar no longer has massive yellow blocks of warnings.
    • Minor: Fixed Kotlin/Java syntax, warnings
    • Bump to android gradle plugin 8.6.1 from 8.5.0, this is still pretty old, but is supported in modern Android Studios, when we upgrade to react native 0.77 we can opt for a much newer version...

Code Changes to App

Since there are no JavaScript changes, the iOS app should remain exactly as it was on develop. Everything hopefully ought to run the same as develop on Android - there's just newer release of Tor and various Android-only libs...

- mostly switch to away from a wild groovy syntax towards the now-default Kotlin DSL
  - lots of changes related to this will eventually become mandated in a future release of the android gradle plugin
  - bump android gradle plugin to 8.6.1, bump kotlin version, bump various andorid gradle dependencies
- removes other deprecated and soon to be unsupported features from Gradle scripts
- adds comments clarifying some obscure stuff, and TODOs for future work.
…epos as gradle dependencies, and The Guardian Project, which was previously used to get releases of tor-android, but unused anymore now that Quiet uses its own libtor.so on android
… is setup for ios and android work, a script to view quiet logs on android, and a README surrounding the ELF alignment checking scripts on android
…d/quiet_libtor_android, upgrading tor 0.4.8.17->0.4.8.21, bump zlib 1.3.1->1.3.1.2, openssl 3.5.0->3.5.4
… not updating to the latest tor, but whatevers in the latest tor browser, comment out calls to extract_android_binaries and install_android_binaries, for now, we are using our own 16kb aligned libtor.so
@bitmold
Copy link
Collaborator Author

bitmold commented Jan 16, 2026

On this branch, if we run packages/mobile/scripts/build_apk_and_test_alignment.sh we can see that this branch has the same aligned and unaligned android binaries as develop. Once this is merged, I'll open PRs based off work from #3011 which specifically deal with every part of this list.


Recursively analyzing ../android/app/build/outputs/apk/standard/debug/app-standard-debug.apk

NOTICE: Zip alignment check requires build-tools version 35.0.0-rc3 or higher.
  You can install the latest build-tools by running the below command
  and updating your $PATH:

    sdkmanager "build-tools;35.0.0-rc3"

=== ELF alignment ===
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_newarchdefaults.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libnode.so: \e[32mALIGNED\e[0m (2**14)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_uimanager.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_leakchecker.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreactperfloggerjni.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libgifimage.so: \e[32mALIGNED\e[0m (2**14)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libjsi.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_mapbuffer.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libnative-filters.so: \e[32mALIGNED\e[0m (2**14)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_scheduler.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_codegen_rncore.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/librrc_scrollview.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libssl.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libfbjni.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_mounting.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libjscinstance.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/librnscreens.so: \e[32mALIGNED\e[0m (2**14)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/librninstance.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libuimanagerjni.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libfabricjni.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libown-native-lib.so: \e[32mALIGNED\e[0m (2**14)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_utils.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreactnativeblob.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libevent_extra-2.1.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libcrypto.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libnative-imagetranscoder.so: \e[32mALIGNED\e[0m (2**14)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_config.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libtor.so: \e[32mALIGNED\e[0m (2**14)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libmapbufferjni.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libjsc.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libjserrorhandler.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libjsijniprofiler.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libjsinspector.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_runtimescheduler.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_element.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libglog.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_templateprocessor.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/librrc_textinput.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libimagepipeline.so: \e[32mALIGNED\e[0m (2**14)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_debug.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libglog_init.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libturbomodulejsijni.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/librrc_unimplementedview.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_telemetry.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/librrc_native.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/librrc_view.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libruntimeexecutor.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libfolly_runtime.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/librrc_text.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libc++_shared.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libsodium.so: \e[32mALIGNED\e[0m (2**14)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/liblogger.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_debug.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libhermesinstancejni.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libfb.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_attributedstring.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_graphics.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_imagemanager.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_componentregistry.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_textlayoutmanager.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_nativemodule_core.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libflipper.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_animations.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/librrc_root.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libjnidispatch.so: \e[32mALIGNED\e[0m (2**14)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libjscexecutor.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/librrc_legacyviewmanagerinterop.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libevent_core-2.1.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libevent-2.1.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreact_render_core.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libreactnativejni.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/librrc_image.so: \e[31mUNALIGNED\e[0m (2**12)
/var/folders/51/8996x1_x5bj3khs7h33_s6y40000gn/T/app-standard-debug_out_XXXXX.tjwfQ50Ipm/lib/arm64-v8a/libyoga.so: \e[31mUNALIGNED\e[0m (2**12)
\e[31mFound 63 unaligned libs (only arm64-v8a/x86_64 libs need to be aligned).\e[0m
=====================

@bitmold bitmold changed the title Android/Gradle Changes from the big 16KB Alignment PR Preliminary Android/Gradle Changes from the big 16KB Alignment PR Jan 16, 2026
@islathehut islathehut merged commit 23aa8c2 into develop Jan 22, 2026
41 of 42 checks passed
@bitmold bitmold deleted the base-android branch January 23, 2026 00:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants