migrate android Tor and PT's to library/in-process model to avoid policy violation
Currently, TBA uses the legacy model of bundling and executing Tor and PT's used by Orbot at the time it was forked into TBA. This approach uses the NDK and gomobile tooling to build exec() binaries that masquerade as shared library ".so" inside the Android APK file.
As of Android Q, Android started to block calling exec() on any binaries in the app data folder, and indicated they may also block any future call of exec() as well: https://issuetracker.google.com/issues/128554619 https://android-review.googlesource.com/c/platform/system/sepolicy/+/804149https://www.reddit.com/r/androiddev/comments/b2inbu/psa_android_q_blocks_executing_binaries_in_your/
While it is still possible today to exec() the faux-so's from the nativeLib path, whether that is truly allowed within policy and how long that will continue to be supported is unknown. This is why Orbot/GP team developed the tor-android + TorService approach and IPtProxy libraries, which allow Tor, Obfs4, Snowflake, etc, to all in run in-process and fully in policy on Android. This work was based on the longtime requirement of doing this on Apple iOS operating systems, which never supported exec() of bundled binaries.
Tor-Android: https://gitlab.com/guardianproject/tor-android IPtProxy: https://gitlab.com/guardianproject/IPtProxy
The recent work on OnionShare for Android also uses tor-android and IPtProxy. Having Orbot, OnionShare, and TBA all using the same approach for mobile implementations of Tor and PT's makes a great deal of sense, and moving tor-android and IPtProxy to be officially supported by the Tor Project team is a goal under the TorVPN project.
An additional point about why IPtProxy is necessary = Android only allows one Go library at a time in an application, and thus IPtProxy exists to bundle all needed Go-based PT libraries (Meek, Obfs4, Snowflake, DNSTT) into one package, and provides the non exec/main() function interface to work with them.