Aria2App icon indicating copy to clipboard operation
Aria2App copied to clipboard

F-Droid can't build

Open licaon-kter opened this issue 1 year ago • 11 comments

ref: https://monitor.f-droid.org/builds/log/com.gianlu.aria2app/230#site-footer

so I changed NDK to 26 but now it fails differently

In file included from main.cc:45:
In file included from ./MultiUrlRequestInfo.h:45:
In file included from ./DownloadResult.h:47:
In file included from ./RequestGroup.h:48:
In file included from ./Request.h:42:
In file included from ./TimerA2.h:43:
./a2functional.h:106:39: error: no template named 'binary_function' in namespace 'std'; did you mean '__binary_function'?
class LeastRecentAccess : public std::binary_function<T, T, bool> {
                                 ~~~~~^~~~~~~~~~~~~~~
                                      __binary_function
/opt/android-sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/include/c++/v1/__functional/binary_
function.h:49:1: note: '__binary_function' declared here
using __binary_function = __binary_function_keep_layout_base<_Arg1, _Arg2, _Result>;
^
In file included from AbstractAuthResolver.cc:37:
./a2functional.h:106:39: error: no template named 'binary_function' in namespace 'std'; did you mean '__binary_function'?
class LeastRecentAccess : public std::binary_function<T, T, bool> {
                                 ~~~~~^~~~~~~~~~~~~~~
                                      __binary_function
/opt/android-sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/include/c++/v1/__functional/binary_
function.h:49:1: note: '__binary_function' declared here
using __binary_function = __binary_function_keep_layout_base<_Arg1, _Arg2, _Result>;
^
In file included from AbstractCommand.cc:35:
In file included from ./AbstractCommand.h:44:
In file included from ./TimerA2.h:43:
./a2functional.h:106:39: error: no template named 'binary_function' in namespace 'std'; did you mean '__binary_function'?
class LeastRecentAccess : public std::binary_function<T, T, bool> {
                                 ~~~~~^~~~~~~~~~~~~~~
                                      __binary_function
/opt/android-sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/include/c++/v1/__functional/binary_function.h:49:1: note: '__binary_function' declared here
using __binary_function = __binary_function_keep_layout_base<_Arg1, _Arg2, _Result>;
^
1 error generated.
In file included from AbstractHttpServerResponseCommand.cc:35:
In file included from ./AbstractHttpServerResponseCommand.h:42:
In file included from ./TimerA2.h:43:
./a2functional.h:106:39: error: no template named 'binary_function' in namespace 'std'; did you mean '__binary_function'?
class LeastRecentAccess : public std::binary_function<T, T, bool> {
                                 ~~~~~^~~~~~~~~~~~~~~
                                      __binary_function
/opt/android-sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/include/c++/v1/__functional/binary_function.h:49:1: note: '__binary_function' declared here
using __binary_function = __binary_function_keep_layout_base<_Arg1, _Arg2, _Result>;
^
make[3]: *** [Makefile:2638: AbstractAuthResolver.lo] Error 1
make[3]: *** Waiting for unfinished jobs....
In file included from AbstractDiskWriter.cc:48:
In file included from ./util.h:59:
./a2functional.h:106:39: error: no template named 'binary_function' in namespace 'std'; did you mean '__binary_function'?
class LeastRecentAccess : public std::binary_function<T, T, bool> {
                                 ~~~~~^~~~~~~~~~~~~~~
                                      __binary_function
/opt/android-sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/include/c++/v1/__functional/binary_function.h:49:1: note: '__binary_function' declared here
using __binary_function = __binary_function_keep_layout_base<_Arg1, _Arg2, _Result>;
^
1 error generated.
make[3]: *** [Makefile:2638: AbstractDiskWriter.lo] Error 1
1 error generated.
make[3]: *** [Makefile:2622: main.o] Error 1
1 error generated.
make[3]: *** [Makefile:2638: AbstractHttpServerResponseCommand.lo] Error 1
1 error generated.
make[3]: *** [Makefile:2638: AbstractCommand.lo] Error 1
make[2]: *** [Makefile:2679: all-recursive] Error 1
make[1]: *** [Makefile:557: all-recursive] Error 1
make: *** [Makefile:468: all] Error 2
./bin/armeabi-v7a/bin/aria2c: ERROR: cannot stat `./bin/armeabi-v7a/bin/aria2c' (No such file or directory)

what am I missing?

/LE: fyi https://gitlab.com/fdroid/fdroiddata/-/commit/ab6788e9070a318a2b80c2a963aa5bc5a8a83bc8

licaon-kter avatar Sep 18 '24 09:09 licaon-kter

tried with NDK 25 locally and... it builds fine :shrug:

I've reenabled the build so it's retried in the next cycle: https://gitlab.com/fdroid/fdroiddata/-/commit/ba96949a3f28f23f6bb847aa2de1050a59d7b5c6

licaon-kter avatar Sep 18 '24 10:09 licaon-kter

Not sure what is breaking because in the first log you attached the binaries are built just fine:

./bin/armeabi-v7a/bin/aria2c: ELF 32-bit LSB pie executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /system/bin/linker, with debug_info, not stripped
./bin/arm64-v8a/bin/aria2c: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /system/bin/linker64, with debug_info, not stripped
./bin/x86/bin/aria2c: ELF 32-bit LSB pie executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /system/bin/linker, with debug_info, not stripped
./bin/x86_64/bin/aria2c: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /system/bin/linker64, with debug_info, not stripped
Done building aria2c binaries!

devgianlu avatar Sep 18 '24 18:09 devgianlu

It builds but the apk is very large. https://monitor.f-droid.org/builds/log/com.gianlu.aria2app/230#site-footer

> Task :aria2lib:stripFossReleaseDebugSymbols

[CXX1104] NDK from ndk.dir at /opt/android-sdk/ndk/25.0.8775105 had version [25.0.8775105] which disagrees with android.ndkVersion [26.1.10909125]

[CXX1104] NDK from ndk.dir at /opt/android-sdk/ndk/25.0.8775105 had version [25.0.8775105] which disagrees with android.ndkVersion [26.1.10909125]

[CXX1104] NDK from ndk.dir at /opt/android-sdk/ndk/25.0.8775105 had version [25.0.8775105] which disagrees with android.ndkVersion [26.1.10909125]

[CXX1104] NDK from ndk.dir at /opt/android-sdk/ndk/25.0.8775105 had version [25.0.8775105] which disagrees with android.ndkVersion [26.1.10909125]

Unable to strip the following libraries, packaging them as they are: libaria2c.so.

linsui avatar Sep 27 '24 15:09 linsui

ah, so I guess @devgianlu has NDK 26 (?) installed somewhere in the system, and that one does the stripping... but unknowingly

I tried to map the cases back in https://gitlab.com/fdroid/fdroidserver/-/issues/1207#note_1881935461

maybe I never tested to install ndk 26 via sdkmanager and keep ndk: as 25

licaon-kter avatar Sep 27 '24 16:09 licaon-kter

ah, so I guess @devgianlu has NDK 26 (?) installed somewhere in the system, and that one does the stripping... but unknowingly

The APKs for Google Play and FOSS are build with GH Actions: https://github.com/devgianlu/Aria2App/blob/master/.github/workflows/android.yml

devgianlu avatar Sep 27 '24 16:09 devgianlu

Those prebuilt libs are used in the action. F-Droid builds them from source.

linsui avatar Sep 29 '24 08:09 linsui

Yes, but the stripping should be done in that CI. The CI that built them does not strip: https://github.com/devgianlu/aria2-android/blob/master/.github/workflows/build.yml

devgianlu avatar Sep 29 '24 09:09 devgianlu

The prebuilt libs are about 5MB while our builds are about 50MB... So maybe we should just build the libs with an old NDK?

linsui avatar Sep 29 '24 09:09 linsui

Oh... I thought 5MB was already a lot, but it looks like they are indeed stripped:

Aria2App/aria2lib/src/main/jniLibs/arm64-v8a/libaria2c.so:   ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /system/bin/linker64, stripped
Aria2App/aria2lib/src/main/jniLibs/armeabi-v7a/libaria2c.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /system/bin/linker, stripped
Aria2App/aria2lib/src/main/jniLibs/x86/libaria2c.so:         ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /system/bin/linker, stripped
Aria2App/aria2lib/src/main/jniLibs/x86_64/libaria2c.so:      ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /system/bin/linker64, stripped

No idea where they have been stripped and not sure why your build is complaining about the NDK version which I haven't set anywhere explicitly.

devgianlu avatar Sep 29 '24 10:09 devgianlu

I also can't find the ndk version. And it seems you don't have any ndk installed when building the apk.

linsui avatar Sep 29 '24 11:09 linsui

The ndk version is from a default value of AGP. Can you set a valid value of ndkVersion? It seems 25.2.9519653 is the newest ndk version that can still build the lib and an older version may produce smaller libs.

linsui avatar Sep 29 '24 13:09 linsui