Installer for Android, based on NDK #538
Closed
Comments
hugbug
added a commit
that referenced
this issue
Jun 13, 2018
hugbug
added a commit
that referenced
this issue
Jun 13, 2018
hugbug
added a commit
that referenced
this issue
Jun 13, 2018
hugbug
added a commit
that referenced
this issue
Jun 13, 2018
hugbug
added a commit
that referenced
this issue
Jun 13, 2018
Closed
hugbug
added a commit
that referenced
this issue
Jun 15, 2018
hugbug
added a commit
to nzbget/nzbget.github.io
that referenced
this issue
Jun 15, 2018
hugbug
added a commit
that referenced
this issue
Sep 1, 2018
isn’t necessary when building specifically for Android using Android NDK.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Android is based on Linux. That allowed us to use binaries compiled for Linux on Android. Unfortunately these binaries don't work in Android 8 anymore. We are going to fix this.
C libraries
POSIX defines API - a list of functions available for applications written in C (and other languages which can access C API). All these functions are usually implemented by platform vendors as standard C library. GNU/Linux has glibc which is used on server and desktop systems. There are also other C libraries such as uClibc or musl. C libraries contain high level functions such as for string manipulation but also low level system functions such as for file access. The latter rely on kernel functions to access device drivers or other hardware related manipulations.
Android has it's own C library called Bionic. Like other C libraries it needs to call kernel functions for low level things.
Restrictions in Android 8
In Android 8 an attempt was made to improve security by restricting third-party applications from accessing certain kernel functions. Android developers have built a list of kernel functions used in Bionic and declared it whitelist. All other kernel functions are not available for third-party applications.
NZBGet binaries included in installer for Linux are compiled using glibc and uClibc. It happened that glibc and uClibc do use certain kernel functions which Bionic doesn't use and which weren't added to whitelist. As a result nzbget binaries compiled for Linux are not working on Android 8 anymore.
Interesting fact: whitelist restrictions are applied to processes launched via Android UI. When launching nzbget from android debugger shell it (nzbget) works. That doesn't help us though as we need a way to launch nzbget from Android UI.
What to do?
A logical solution is to compile nzbget using Android's C library Bionic. That means:
build-nzbget
to work with NDK based toolchains;build-unpack
to work with NDK based toolchains;The text was updated successfully, but these errors were encountered: