i'm on Mac and could not found a way to build .so file for android. any solution?
You can use our Java example to build the library for Android yourself. It could be used almost without modifications. You can also download prebuilt Android library available at http://core.telegram.org/tdlib/tdlib.zip.
I follow the instruction but it's not generate .so file. i want to know how to get .so file from this library like the prebuilt Android library at http://core.telegram.org/tdlib/tdlib.zip.
i try on ubuntu and get libtdjni.so but it's size is about 18mb.
What instructions you have followed?
this one example/java
To build TDLib for Android you need to use Android NDK. You can use JNI bindings from Java example, but CMakeLists.txt should be adopted to build everything using NDK.
can you give me a instruction to how to do it?
We will publish example project later.
I tried to use prebuilt Android library available at http://core.telegram.org/tdlib/tdlib.zip, but for some reason I always received error: "File "/td.binlog" can't be opened/created for reading and writing"
Could you please tell me what's the problem?
You haven't specified databaseDirectory available for writing in setTdlibPatameters.
Lion, I got to this meat. Which compilation flags will you recommend? (in files Android.mk, Application.mk)
../android-sdk/ndk-bundle# ./ndk-build NDK_PROJECT_PATH=testproj
../android-sdk/ndk-bundle/build/core/setup-app.mk:81: Android NDK: Application targets deprecated ABI(s): mips64 armeabi mips
../android-sdk/ndk-bundle/build/core/setup-app.mk:82: Android NDK: Support for these ABIs will be removed in a future NDK release.
[arm64-v8a] Compile++ : tdjni <= td_json_client.cpp
[arm64-v8a] SharedLibrary : libtdjni.so
testproj/obj/local/arm64-v8a/objs/tdjni/td/telegram/td_json_client.o: In function `ClientJson':
../prog/android-sdk/ndk-bundle/testproj/jni/td/telegram/ClientJson.h:24: undefined reference to `td::Client::Client()'
testproj/obj/local/arm64-v8a/objs/tdjni/td/telegram/td_json_client.o: In function `~ClientJson':
../prog/android-sdk/ndk-bundle/testproj/jni/td/telegram/ClientJson.h:24: undefined reference to `td::Client::~Client()'
testproj/obj/local/arm64-v8a/objs/tdjni/td/telegram/td_json_client.o: In function `Slice':
../prog/android-sdk/ndk-bundle/testproj/jni/td/utils/Slice.h:142: undefined reference to `td::verbosity_level'
../prog/android-sdk/ndk-bundle/testproj/jni/td/utils/Slice.h:142: undefined reference to `td::verbosity_level'
../prog/android-sdk/ndk-bundle/testproj/jni/td/utils/Slice.h:142: undefined reference to `td::log_interface'
../prog/android-sdk/ndk-bundle/testproj/jni/td/utils/Slice.h:142: undefined reference to `td::log_interface'
../prog/android-sdk/ndk-bundle/testproj/jni/td/utils/Slice.h:142: undefined reference to `td::Logger::Logger(td::LogInterface&, int, td::Slice, int, td::Slice, bool)'
../prog/android-sdk/ndk-bundle/testproj/jni/td/utils/Slice.h:142: undefined reference to `td::Logger::~Logger()'
testproj/obj/local/arm64-v8a/objs/tdjni/td/telegram/td_json_client.o: In function `td_json_client_send':
../prog/android-sdk/ndk-bundle/testproj/jni/td/telegram/td_json_client.cpp:26: undefined reference to `td::ClientJson::send(td::Slice)'
testproj/obj/local/arm64-v8a/objs/tdjni/td/telegram/td_json_client.o: In function `td_json_client_receive':
../prog/android-sdk/ndk-bundle/testproj/jni/td/telegram/td_json_client.cpp:30: undefined reference to `td::ClientJson::receive(double)'
testproj/obj/local/arm64-v8a/objs/tdjni/td/telegram/td_json_client.o: In function `Slice':
../prog/android-sdk/ndk-bundle/testproj/jni/td/utils/Slice.h:142: undefined reference to `td::verbosity_level'
../prog/android-sdk/ndk-bundle/testproj/jni/td/utils/Slice.h:142: undefined reference to `td::verbosity_level'
../prog/android-sdk/ndk-bundle/testproj/jni/td/utils/Slice.h:142: undefined reference to `td::log_interface'
../prog/android-sdk/ndk-bundle/testproj/jni/td/utils/Slice.h:142: undefined reference to `td::log_interface'
../prog/android-sdk/ndk-bundle/testproj/jni/td/utils/Slice.h:142: undefined reference to `td::Logger::Logger(td::LogInterface&, int, td::Slice, int, td::Slice, bool)'
../prog/android-sdk/ndk-bundle/testproj/jni/td/utils/Slice.h:142: undefined reference to `td::Logger::~Logger()'
testproj/obj/local/arm64-v8a/objs/tdjni/td/telegram/td_json_client.o: In function `td_json_client_execute':
../prog/android-sdk/ndk-bundle/testproj/jni/td/telegram/td_json_client.cpp:39: undefined reference to `td::ClientJson::execute(td::Slice)'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [testproj/obj/local/arm64-v8a/libtdjni.so] Error 1
We recommend to use CMake for Android builds, which automatically will manage all dependencies.
Lion
It seems to me that it remains to understand why one does not see in one namespace
../prog/android-sdk/ndk-bundle/testproj/jni/td/telegram/ClientJson.h:24: undefined reference to `td::Client::Client()'
I can be mistaken, but if you know how to correct, then tell me :)
td_json_client_create() - managed to collect
the rest is not yet clear
You need to link against tdclient, tdutils and other libraries.
Good. Yesterday I came to this.
tdtl was successful
I continue to dance with a tambourine
cmake(ndk) log
jnibuild# /home/user/prog/Android/Sdk/cmake/3.6.4111459/bin/cmake -DANDROID_ABI=armeabi-v7a -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=/home/user/prog/Android/Sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_NATIVE_API_LEVEL=23 -DANDROID_TOOLCHAIN=gcc -DOPENSSL_INCLUDE_DIR=/home/user/prog/Android/Sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/ -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/home/user/proj/tdlib/td/jnibuild/ ..
-- The CXX compiler identification is GNU 4.9.0
-- The C compiler identification is GNU 4.9.0
-- Check for working CXX compiler: /home/user/prog/Android/Sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++
-- Check for working CXX compiler: /home/user/prog/Android/Sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Check for working C compiler: /home/user/prog/Android/Sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
-- Check for working C compiler: /home/user/prog/Android/Sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found ccache
-- Found OpenSSL: /home/user/prog/Android/Sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/libssl.so;/home/user/prog/Android/Sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/libcrypto.so
-- Found OpenSSL: /home/user/prog/Android/Sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a /home/user/prog/Android/Sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/libssl.so;/home/user/prog/Android/Sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/libcrypto.so
-- Performing Test HAVE_STD14
-- Performing Test HAVE_STD14 - Success
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - found
-- Found Threads: TRUE
-- Performing Test HAVE_CXX_FLAG_WALL
-- Performing Test HAVE_CXX_FLAG_WALL - Success
-- Performing Test HAVE_CXX_FLAG_WEXTRA
-- Performing Test HAVE_CXX_FLAG_WEXTRA - Success
-- Performing Test HAVE_CXX_FLAG_WIMPLICIT_FALLTHROUGH_2
-- Performing Test HAVE_CXX_FLAG_WIMPLICIT_FALLTHROUGH_2 - Failed
-- Performing Test HAVE_CXX_FLAG_WPOINTER_ARITH
-- Performing Test HAVE_CXX_FLAG_WPOINTER_ARITH - Success
-- Performing Test HAVE_CXX_FLAG_WCAST_QUAL
-- Performing Test HAVE_CXX_FLAG_WCAST_QUAL - Success
-- Performing Test HAVE_CXX_FLAG_WSIGN_COMPARE
-- Performing Test HAVE_CXX_FLAG_WSIGN_COMPARE - Success
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_BRANCHES
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_BRANCHES - Failed
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_COND
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_COND - Failed
-- Performing Test HAVE_CXX_FLAG_WALLOC_ZERO
-- Performing Test HAVE_CXX_FLAG_WALLOC_ZERO - Failed
-- Performing Test HAVE_CXX_FLAG_WLOGICAL_OP
-- Performing Test HAVE_CXX_FLAG_WLOGICAL_OP - Success
-- Performing Test HAVE_CXX_FLAG_WTAUTOLOGICAL_COMPARE
-- Performing Test HAVE_CXX_FLAG_WTAUTOLOGICAL_COMPARE - Failed
-- Performing Test HAVE_CXX_FLAG_WVLA
-- Performing Test HAVE_CXX_FLAG_WVLA - Success
-- Performing Test HAVE_CXX_FLAG_WNON_VIRTUAL_DTOR
-- Performing Test HAVE_CXX_FLAG_WNON_VIRTUAL_DTOR - Success
-- Performing Test HAVE_CXX_FLAG_WUNUSED_PARAMETER
-- Performing Test HAVE_CXX_FLAG_WUNUSED_PARAMETER - Success
-- Performing Test HAVE_CXX_FLAG_WCONVERSION
-- Performing Test HAVE_CXX_FLAG_WCONVERSION - Success
-- Performing Test HAVE_CXX_FLAG_WSIGN_CONVERSION
-- Performing Test HAVE_CXX_FLAG_WSIGN_CONVERSION - Success
-- Performing Test HAVE_CXX_FLAG_WCXX14_COMPAT_PEDANTIC
-- Performing Test HAVE_CXX_FLAG_WCXX14_COMPAT_PEDANTIC - Failed
-- Performing Test HAVE_CXX_FLAG_QUNUSED_ARGUMENTS
-- Performing Test HAVE_CXX_FLAG_QUNUSED_ARGUMENTS - Failed
-- Performing Test HAVE_CXX_FLAG_WODR
-- Performing Test HAVE_CXX_FLAG_WODR - Failed
-- Performing Test HAVE_CXX_FLAG_FLTO_ODR_TYPE_MERGING
-- Performing Test HAVE_CXX_FLAG_FLTO_ODR_TYPE_MERGING - Failed
-- Found ZLIB: /home/user/prog/Android/Sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/libz.so (found version "1.2.3")
-- Found ZLIB: /home/user/prog/Android/Sdk/ndk-bundle/sysroot/usr/include /home/user/prog/Android/Sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/libz.so
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/prog/td/jnibuild
It's time to rejoice. But it's too early.
/home/user/prog/Android/Sdk/cmake/3.6.4111459/bin/cmake --build .
Scanning dependencies of target git_commit
[ 0%] Generate git_commit.h
[ 0%] Built target git_commit
Scanning dependencies of target tdutils
[ 1%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/Fd.cpp.o
[ 1%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/FileFd.cpp.o
[ 1%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/IPAddress.cpp.o
[ 2%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/path.cpp.o
[ 2%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/ServerSocketFd.cpp.o
[ 3%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/signals.cpp.o
[ 3%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/sleep.cpp.o
[ 4%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/SocketFd.cpp.o
[ 4%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/Stat.cpp.o
[ 4%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/thread_local.cpp.o
[ 5%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/wstring_convert.cpp.o
[ 5%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/detail/Epoll.cpp.o
[ 6%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/detail/EventFdBsd.cpp.o
[ 6%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/detail/EventFdLinux.cpp.o
[ 7%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/detail/EventFdWindows.cpp.o
[ 7%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/detail/KQueue.cpp.o
[ 8%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/detail/Poll.cpp.o
[ 8%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/detail/Select.cpp.o
[ 8%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/detail/ThreadIdGuard.cpp.o
[ 9%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/port/detail/WineventPoll.cpp.o
make[2]: *** Нет правила для сборки цели «../tdutils/generate/auto/mime_type_to_extension.cpp», требуемой для «tdutils/CMakeFiles/tdutils.dir/generate/auto/mime_type_to_extension.cpp.o». Останов.
CMakeFiles/Makefile2:473: ошибка выполнения рецепта для цели «tdutils/CMakeFiles/tdutils.dir/all»
make[1]: *** [tdutils/CMakeFiles/tdutils.dir/all] Ошибка 2
Makefile:138: ошибка выполнения рецепта для цели «all»
make: *** [all] Ошибка 2
gperf and readline? :)
@isopen you need to run native build first with
cmake --build . --target prepare_cross_compiling
to generate some source files.
@levlam Many thanks. Now there is no error.
jnibuild# /home/user/prog/android-sdk/cmake/3.6.4111459/bin/cmake -DANDROID_ABI=armeabi-v7a -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=/home/user/prog/android-sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_NATIVE_API_LEVEL=23 -DANDROID_TOOLCHAIN=gcc -DOPENSSL_ROOT_DIR=/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/ -DOPENSSL_INCLUDE_DIR=/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/include/ -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/home/user/proj/td/jnibuild/ -DANDROID=ON ..
-- The CXX compiler identification is GNU 4.9.0
-- The C compiler identification is GNU 4.9.0
-- Check for working CXX compiler: /home/user/prog/android-sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++
-- Check for working CXX compiler: /home/user/prog/android-sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Check for working C compiler: /home/user/prog/android-sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
-- Check for working C compiler: /home/user/prog/android-sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found ccache
-- Found OpenSSL: /home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/libssl.so;/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/libcrypto.so (found version "1.0.0a")
-- Found OpenSSL: /home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/include /home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/libssl.so;/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/libcrypto.so
-- Performing Test HAVE_STD14
-- Performing Test HAVE_STD14 - Success
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - found
-- Found Threads: TRUE
-- Performing Test HAVE_CXX_FLAG_WALL
-- Performing Test HAVE_CXX_FLAG_WALL - Success
-- Performing Test HAVE_CXX_FLAG_WEXTRA
-- Performing Test HAVE_CXX_FLAG_WEXTRA - Success
-- Performing Test HAVE_CXX_FLAG_WIMPLICIT_FALLTHROUGH_2
-- Performing Test HAVE_CXX_FLAG_WIMPLICIT_FALLTHROUGH_2 - Failed
-- Performing Test HAVE_CXX_FLAG_WPOINTER_ARITH
-- Performing Test HAVE_CXX_FLAG_WPOINTER_ARITH - Success
-- Performing Test HAVE_CXX_FLAG_WCAST_QUAL
-- Performing Test HAVE_CXX_FLAG_WCAST_QUAL - Success
-- Performing Test HAVE_CXX_FLAG_WSIGN_COMPARE
-- Performing Test HAVE_CXX_FLAG_WSIGN_COMPARE - Success
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_BRANCHES
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_BRANCHES - Failed
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_COND
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_COND - Failed
-- Performing Test HAVE_CXX_FLAG_WALLOC_ZERO
-- Performing Test HAVE_CXX_FLAG_WALLOC_ZERO - Failed
-- Performing Test HAVE_CXX_FLAG_WLOGICAL_OP
-- Performing Test HAVE_CXX_FLAG_WLOGICAL_OP - Success
-- Performing Test HAVE_CXX_FLAG_WTAUTOLOGICAL_COMPARE
-- Performing Test HAVE_CXX_FLAG_WTAUTOLOGICAL_COMPARE - Failed
-- Performing Test HAVE_CXX_FLAG_WVLA
-- Performing Test HAVE_CXX_FLAG_WVLA - Success
-- Performing Test HAVE_CXX_FLAG_WNON_VIRTUAL_DTOR
-- Performing Test HAVE_CXX_FLAG_WNON_VIRTUAL_DTOR - Success
-- Performing Test HAVE_CXX_FLAG_WUNUSED_PARAMETER
-- Performing Test HAVE_CXX_FLAG_WUNUSED_PARAMETER - Success
-- Performing Test HAVE_CXX_FLAG_WCONVERSION
-- Performing Test HAVE_CXX_FLAG_WCONVERSION - Success
-- Performing Test HAVE_CXX_FLAG_WSIGN_CONVERSION
-- Performing Test HAVE_CXX_FLAG_WSIGN_CONVERSION - Success
-- Performing Test HAVE_CXX_FLAG_WCXX14_COMPAT_PEDANTIC
-- Performing Test HAVE_CXX_FLAG_WCXX14_COMPAT_PEDANTIC - Failed
-- Performing Test HAVE_CXX_FLAG_QUNUSED_ARGUMENTS
-- Performing Test HAVE_CXX_FLAG_QUNUSED_ARGUMENTS - Failed
-- Performing Test HAVE_CXX_FLAG_WODR
-- Performing Test HAVE_CXX_FLAG_WODR - Failed
-- Performing Test HAVE_CXX_FLAG_FLTO_ODR_TYPE_MERGING
-- Performing Test HAVE_CXX_FLAG_FLTO_ODR_TYPE_MERGING - Failed
-- Found ZLIB: /home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/libz.so (found version "1.2.3")
-- Found ZLIB: /home/user/prog/android-sdk/ndk-bundle/sysroot/usr/include /home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/libz.so
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/prog/td/jnibuild
jnibuild# cmake --build . --target prepare_cross_compiling
make: *** Нет правила для сборки цели «prepare_cross_compiling». Останов.
(If this is done after the usual `cmake ..` then everything is fine)
jnibuild# /home/user/prog/Android/Sdk/cmake/3.6.4111459/bin/cmake --build .
[ 15%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/JsonBuilder.cpp.o
/home/user/prog/td/tdutils/td/utils/JsonBuilder.cpp:431:10: warning: multi-character character constant [-Wmultichar]
case '16':
^
/home/user/prog/td/tdutils/td/utils/JsonBuilder.cpp:434:74: warning: multi-character character constant [-Wmultichar]
[](char c) { return c == '-' || ('0' <= c && c <= '9') || c == '16' || c == 'e' || c == 'E' || c == '+' || c == '.'; });
^
/home/user/prog/td/tdutils/td/utils/JsonBuilder.cpp:541:10: warning: multi-character character constant [-Wmultichar]
case '16':
^
/home/user/prog/td/tdutils/td/utils/JsonBuilder.cpp:544:74: warning: multi-character character constant [-Wmultichar]
[](char c) { return c == '-' || ('0' <= c && c <= '9') || c == '16' || c == 'e' || c == 'E' || c == '+' || c == '.'; });
^
/home/user/prog/td/tdutils/td/utils/JsonBuilder.cpp: In function 'td::Result<td::JsonValue> td::do_json_decode(td::Parser&, td::int32)':
/home/user/prog/td/tdutils/td/utils/JsonBuilder.cpp:431:10: warning: case label value exceeds maximum value for type
case '16':
^
/home/user/prog/td/tdutils/td/utils/JsonBuilder.cpp: In lambda function:
/home/user/prog/td/tdutils/td/utils/JsonBuilder.cpp:434:71: warning: comparison is always false due to limited range of data type [-Wtype-limits]
[](char c) { return c == '-' || ('0' <= c && c <= '9') || c == '16' || c == 'e' || c == 'E' || c == '+' || c == '.'; });
^
/home/user/prog/td/tdutils/td/utils/JsonBuilder.cpp: In function 'td::Status td::do_json_skip(td::Parser&, td::int32)':
/home/user/prog/td/tdutils/td/utils/JsonBuilder.cpp:541:10: warning: case label value exceeds maximum value for type
case '16':
^
/home/user/prog/td/tdutils/td/utils/JsonBuilder.cpp: In lambda function:
/home/user/prog/td/tdutils/td/utils/JsonBuilder.cpp:544:71: warning: comparison is always false due to limited range of data type [-Wtype-limits]
[](char c) { return c == '-' || ('0' <= c && c <= '9') || c == '16' || c == 'e' || c == 'E' || c == '+' || c == '.'; });
^
[ 15%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/logging.cpp.o
/home/user/prog/td/tdutils/td/utils/logging.cpp:44:29: error: td::Logger::__emutls_t._ZN2td6Logger4tag_E causes a section type conflict with td::Logger::tag_
TD_THREAD_LOCAL const char *Logger::tag_ = nullptr;
^
/home/user/prog/td/tdutils/td/utils/logging.cpp:44:29: note: 'td::Logger::tag_' was declared here
/home/user/prog/td/tdutils/td/utils/logging.cpp:45:29: error: td::Logger::__emutls_t._ZN2td6Logger5tag2_E causes a section type conflict with td::Logger::tag2_
TD_THREAD_LOCAL const char *Logger::tag2_ = nullptr;
^
/home/user/prog/td/tdutils/td/utils/logging.cpp:45:29: note: 'td::Logger::tag2_' was declared here
tdutils/CMakeFiles/tdutils.dir/build.make:878: ошибка выполнения рецепта для цели «tdutils/CMakeFiles/tdutils.dir/td/utils/logging.cpp.o»
make[2]: *** [tdutils/CMakeFiles/tdutils.dir/td/utils/logging.cpp.o] Ошибка 1
CMakeFiles/Makefile2:473: ошибка выполнения рецепта для цели «tdutils/CMakeFiles/tdutils.dir/all»
make[1]: *** [tdutils/CMakeFiles/tdutils.dir/all] Ошибка 2
Makefile:138: ошибка выполнения рецепта для цели «all»
make: *** [all] Ошибка 2
md5-504c38553dcaa0d8ed00c827caab6b12
[ 18%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/StringBuilder.cpp.o
/home/user/prog/td/tdutils/td/utils/StringBuilder.cpp:22:19: error: no member named 'snprintf' in namespace 'std'; did you mean simply 'snprintf'?
current_ptr_ += std::snprintf(current_ptr_, reserved_size, "%d", x);
^~~~~~~~~~~~~
snprintf
/home/user/prog/android-sdk/ndk-bundle/sysroot/usr/include/stdio.h:252:5: note: 'snprintf' declared here
int snprintf(char* __buf, size_t __size, const char* __fmt, ...)
^
/home/user/prog/td/tdutils/td/utils/StringBuilder.cpp:30:19: error: no member named 'snprintf' in namespace 'std'; did you mean simply 'snprintf'?
current_ptr_ += std::snprintf(current_ptr_, reserved_size, "%u", x);
^~~~~~~~~~~~~
snprintf
/home/user/prog/android-sdk/ndk-bundle/sysroot/usr/include/stdio.h:252:5: note: 'snprintf' declared here
int snprintf(char* __buf, size_t __size, const char* __fmt, ...)
^
/home/user/prog/td/tdutils/td/utils/StringBuilder.cpp:38:19: error: no member named 'snprintf' in namespace 'std'; did you mean simply 'snprintf'?
current_ptr_ += std::snprintf(current_ptr_, reserved_size, "%ld", x);
^~~~~~~~~~~~~
snprintf
/home/user/prog/android-sdk/ndk-bundle/sysroot/usr/include/stdio.h:252:5: note: 'snprintf' declared here
int snprintf(char* __buf, size_t __size, const char* __fmt, ...)
^
/home/user/prog/td/tdutils/td/utils/StringBuilder.cpp:46:19: error: no member named 'snprintf' in namespace 'std'; did you mean simply 'snprintf'?
current_ptr_ += std::snprintf(current_ptr_, reserved_size, "%lu", x);
^~~~~~~~~~~~~
snprintf
/home/user/prog/android-sdk/ndk-bundle/sysroot/usr/include/stdio.h:252:5: note: 'snprintf' declared here
int snprintf(char* __buf, size_t __size, const char* __fmt, ...)
^
/home/user/prog/td/tdutils/td/utils/StringBuilder.cpp:54:19: error: no member named 'snprintf' in namespace 'std'; did you mean simply 'snprintf'?
current_ptr_ += std::snprintf(current_ptr_, reserved_size, "%lld", x);
^~~~~~~~~~~~~
snprintf
/home/user/prog/android-sdk/ndk-bundle/sysroot/usr/include/stdio.h:252:5: note: 'snprintf' declared here
int snprintf(char* __buf, size_t __size, const char* __fmt, ...)
^
/home/user/prog/td/tdutils/td/utils/StringBuilder.cpp:62:19: error: no member named 'snprintf' in namespace 'std'; did you mean simply 'snprintf'?
current_ptr_ += std::snprintf(current_ptr_, reserved_size, "%llu", x);
^~~~~~~~~~~~~
snprintf
/home/user/prog/android-sdk/ndk-bundle/sysroot/usr/include/stdio.h:252:5: note: 'snprintf' declared here
int snprintf(char* __buf, size_t __size, const char* __fmt, ...)
^
/home/user/prog/td/tdutils/td/utils/StringBuilder.cpp:95:19: error: no member named 'snprintf' in namespace 'std'; did you mean simply 'snprintf'?
current_ptr_ += std::snprintf(current_ptr_, reserved_size, "%p", ptr);
^~~~~~~~~~~~~
snprintf
/home/user/prog/android-sdk/ndk-bundle/sysroot/usr/include/stdio.h:252:5: note: 'snprintf' declared here
int snprintf(char* __buf, size_t __size, const char* __fmt, ...)
^
/home/user/prog/td/tdutils/td/utils/StringBuilder.cpp:106:13: error: no member named 'vsnprintf' in namespace 'std'; did you mean simply 'vsnprintf'?
int len = std::vsnprintf(current_ptr_, left, fmt, list);
^~~~~~~~~~~~~~
vsnprintf
/home/user/prog/android-sdk/ndk-bundle/sysroot/usr/include/stdio.h:256:5: note: 'vsnprintf' declared here
int vsnprintf(char* __buf, size_t __size, const char* __fmt, va_list __args)
^
8 errors generated.
tdutils/CMakeFiles/tdutils.dir/build.make:1022: ошибка выполнения рецепта для цели «tdutils/CMakeFiles/tdutils.dir/td/utils/StringBuilder.cpp.o»
make[2]: *** [tdutils/CMakeFiles/tdutils.dir/td/utils/StringBuilder.cpp.o] Ошибка 1
CMakeFiles/Makefile2:473: ошибка выполнения рецепта для цели «tdutils/CMakeFiles/tdutils.dir/all»
make[1]: *** [tdutils/CMakeFiles/tdutils.dir/all] Ошибка 2
Makefile:138: ошибка выполнения рецепта для цели «all»
make: *** [all] Ошибка 2
md5-dd600efc51688af5a67bff7d07310612
[ 58%] Building CXX object CMakeFiles/tdcore.dir/td/telegram/MessagesManager.cpp.o
/home/user/prog/td/td/telegram/MessagesManager.cpp:15708:100: warning: lambda capture 'file_id' is not used [-Wunused-lambda-capture]
PromiseCreator::lambda([this, dialog_id, secret_input_media = std::move(secret_input_media), file_id,
^
/home/user/prog/td/td/telegram/MessagesManager.cpp:15709:31: warning: lambda capture 'thumbnail_file_id' is not used [-Wunused-lambda-capture]
thumbnail_file_id](Result<Message *> result) mutable {
[ 58%] Building CXX object CMakeFiles/tdcore.dir/td/telegram/misc.cpp.o
...
[ 71%] Building CXX object CMakeFiles/tdcore.dir/td/telegram/Td.cpp.o
...
/home/user/prog/td/tdutils/td/utils/crypto.cpp::250
error: undefined reference to 'AES_ige_encrypt'
/home/user/prog/td/tdutils/td/utils/logging.cpp::[149, 152, 155, 158, 161]
error: undefined reference to '__android_log_write'
While it is not clear what is this stuff. I commented the lines. Continued build...
...
[100%] Built target all_tests
Did not appear libtdjson.so(joke). Perhaps it's warnings and errors in the assembly.
Especially the last full meat :) Perhaps it is in openssl...
libtdjson.so(weight 150mb) appeared in the /home/user/proj/td/jnibuild/
But I'm not sure about this meat ...
Something wrong with yours TDLib source code. There is no c == '16' on this line:
https://github.com/tdlib/td/blob/6c706f45e7a73c936b9f2f267785092c8a73348f/tdutils/td/utils/JsonBuilder.cpp#L433
as there is no line
case '16':
For Android it is better to use ANDROID_STL=c++_static additionally to ANDROID_TOOLCHAIN=clang.
Yes '16' is just not a critical warning(it does not apply to your code). I'm sorry my girlfriend added this. I'll try to explain to her about the type char.
i try -DANDROID_STL=c++_static
Maybe there will not be this
[ 18%] Building CXX object tdutils/CMakeFiles/tdutils.dir/td/utils/StringBuilder.cpp.o
/home/user/prog/td/tdutils/td/utils/StringBuilder.cpp:22:19: error: no member named 'snprintf' in namespace 'std'; did you mean simply 'snprintf'?
current_ptr_ += std::snprintf(current_ptr_, reserved_size, "%d", x);
...
This is not very critical.:))
That's what I'm interested:
if (TD_ENABLE_JNI AND NOT ANDROID) # jni is available by default on AndroidFound JNI: /usr/lib/jvm/java-8-openjdk-amd64/lib
Found JNI: /home/user/prog/android-sdk/ndk-bundle/sysroot/usr/include;/usr/lib/jvm/java-8-openjdk-amd64/include;/usr/lib/jvm/java-8-openjdk-amd64/include /usr/lib/jvm/java-8-openjdk-amd64/lib;/usr/lib/jvm/java-8-openjdk-amd64/jre/lib
/home/user/prog/td/td/telegram/MessagesManager.cpp:15708:100: warning: lambda capture 'file_id' is not used [-Wunused-lambda-capture]
PromiseCreator::lambda([this, dialog_id, secret_input_media = std::move(secret_input_media), file_id,
^
/home/user/prog/td/td/telegram/MessagesManager.cpp:15709:31: warning: lambda capture 'thumbnail_file_id' is not used [-Wunused-lambda-capture]
thumbnail_file_id](Result<Message *> result) mutable {
Good.
(1) This is not about the current manual :)
CMakeLists.txt
It turns out that this condition is redundant(those. not always like this).
if (TD_ENABLE_JNI AND NOT ANDROID) # jni is available by default on Android
if (TD_ENABLE_JNI)
if (NOT JNI_FOUND)
find_package(JNI REQUIRED)
endif()
message(STATUS "Found JNI: ${JNI_INCLUDE_DIRS} ${JNI_LIBRARIES}")
target_include_directories(tdcore PUBLIC ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
target_link_libraries(tdcore PUBLIC ${JAVA_JVM_LIBRARY})
endif()
/home/user/prog/android-sdk/cmake/3.6.4111459/bin/cmake -DANDROID_ABI=armeabi-v7a -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=/home/user/prog/android-sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_NATIVE_API_LEVEL=23 -DANDROID_TOOLCHAIN=clang -DOPENSSL_ROOT_DIR=/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/ -DOPENSSL_INCLUDE_DIR=/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/include/ -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/home/user/prog/td/jnibuild/ -DTD_ENABLE_JNI=ON -DJAVA_AWT_LIBRARY=/usr/lib/jvm/java-8-openjdk-i386/lib/i386/libawt.so -DJAVA_JVM_LIBRARY=/usr/lib/jvm/java-8-openjdk-i386/jre/lib/i386/server/libjvm.so -DJAVA_INCLUDE_PATH2=/usr/lib/jvm/java-8-openjdk-i386/include -DJAVA_AWT_INCLUDE_PATH=/usr/lib/jvm/java-8-openjdk-i386/include -DANDROID_STL=c++_static ..
-- Check for working CXX compiler: /home/user/prog/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++
-- Check for working CXX compiler: /home/user/prog/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Check for working C compiler: /home/user/prog/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
-- Check for working C compiler: /home/user/prog/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found ccache
-- Found OpenSSL: /home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/libssl.so;/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/libcrypto.so (found version "1.0.0a")
-- Found OpenSSL: /home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/include /home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/libssl.so;/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/libcrypto.so
-- Performing Test HAVE_STD14
-- Performing Test HAVE_STD14 - Success
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - found
-- Found Threads: TRUE
-- Performing Test HAVE_CXX_FLAG_WALL
-- Performing Test HAVE_CXX_FLAG_WALL - Success
-- Performing Test HAVE_CXX_FLAG_WEXTRA
-- Performing Test HAVE_CXX_FLAG_WEXTRA - Success
-- Performing Test HAVE_CXX_FLAG_WIMPLICIT_FALLTHROUGH_2
-- Performing Test HAVE_CXX_FLAG_WIMPLICIT_FALLTHROUGH_2 - Failed
-- Performing Test HAVE_CXX_FLAG_WPOINTER_ARITH
-- Performing Test HAVE_CXX_FLAG_WPOINTER_ARITH - Success
-- Performing Test HAVE_CXX_FLAG_WCAST_QUAL
-- Performing Test HAVE_CXX_FLAG_WCAST_QUAL - Success
-- Performing Test HAVE_CXX_FLAG_WSIGN_COMPARE
-- Performing Test HAVE_CXX_FLAG_WSIGN_COMPARE - Success
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_BRANCHES
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_BRANCHES - Failed
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_COND
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_COND - Failed
-- Performing Test HAVE_CXX_FLAG_WALLOC_ZERO
-- Performing Test HAVE_CXX_FLAG_WALLOC_ZERO - Failed
-- Performing Test HAVE_CXX_FLAG_WLOGICAL_OP
-- Performing Test HAVE_CXX_FLAG_WLOGICAL_OP - Failed
-- Performing Test HAVE_CXX_FLAG_WTAUTOLOGICAL_COMPARE
-- Performing Test HAVE_CXX_FLAG_WTAUTOLOGICAL_COMPARE - Success
-- Performing Test HAVE_CXX_FLAG_WVLA
-- Performing Test HAVE_CXX_FLAG_WVLA - Success
-- Performing Test HAVE_CXX_FLAG_WNON_VIRTUAL_DTOR
-- Performing Test HAVE_CXX_FLAG_WNON_VIRTUAL_DTOR - Success
-- Performing Test HAVE_CXX_FLAG_WUNUSED_PARAMETER
-- Performing Test HAVE_CXX_FLAG_WUNUSED_PARAMETER - Success
-- Performing Test HAVE_CXX_FLAG_WCONVERSION
-- Performing Test HAVE_CXX_FLAG_WCONVERSION - Success
-- Performing Test HAVE_CXX_FLAG_WSIGN_CONVERSION
-- Performing Test HAVE_CXX_FLAG_WSIGN_CONVERSION - Success
-- Performing Test HAVE_CXX_FLAG_WCXX14_COMPAT_PEDANTIC
-- Performing Test HAVE_CXX_FLAG_WCXX14_COMPAT_PEDANTIC - Success
-- Performing Test HAVE_CXX_FLAG_QUNUSED_ARGUMENTS
-- Performing Test HAVE_CXX_FLAG_QUNUSED_ARGUMENTS - Success
-- Performing Test HAVE_CXX_FLAG_WODR
-- Performing Test HAVE_CXX_FLAG_WODR - Success
-- Performing Test HAVE_CXX_FLAG_FLTO_ODR_TYPE_MERGING
-- Performing Test HAVE_CXX_FLAG_FLTO_ODR_TYPE_MERGING - Failed
-- Found ZLIB: /home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/libz.so (found version "1.2.3")
-- Found ZLIB: /home/user/prog/android-sdk/ndk-bundle/sysroot/usr/include /home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/libz.so
-- Found JNI: /usr/lib/jvm/java-8-openjdk-i386/lib/i386/libawt.so
-- Found JNI: /home/user/prog/android-sdk/ndk-bundle/sysroot/usr/include;/usr/lib/jvm/java-8-openjdk-i386/include;/usr/lib/jvm/java-8-openjdk-i386/include /usr/lib/jvm/java-8-openjdk-i386/lib/i386/libawt.so;/usr/lib/jvm/java-8-openjdk-i386/jre/lib/i386/server/libjvm.so
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/prog/td/jnibuild
How cool everything goes!
...
Nezhdanchik...
[ 79%] Built target tdclient
Scanning dependencies of target tdjson_private
make[2]: *** Нет правила для сборки цели «../td/generate/auto/td/telegram/td_api_json.cpp», требуемой для «CMakeFiles/tdjson_private.dir/td/generate/auto/td/telegram/td_api_json.cpp.o». Останов.
CMakeFiles/Makefile2:188: ошибка выполнения рецепта для цели «CMakeFiles/tdjson_private.dir/all»
make[1]: *** [CMakeFiles/tdjson_private.dir/all] Ошибка 2
Makefile:138: ошибка выполнения рецепта для цели «all»
make: *** [all] Ошибка 2
This error occurs if you do
cmake --build . --target prepare_cross_compiling
before assembly.
[ 82%] Linking CXX shared library libtdjson.so
/home/user/prog/android-sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: /usr/lib/jvm/java-8-openjdk-i386/jre/lib/i386/server/libjvm.so: incompatible target
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
CMakeFiles/tdjson.dir/build.make:132: ошибка выполнения рецепта для цели «libtdjson.so»
make[2]: *** [libtdjson.so] Ошибка 1
CMakeFiles/Makefile2:232: ошибка выполнения рецепта для цели «CMakeFiles/tdjson.dir/all»
make[1]: *** [CMakeFiles/tdjson.dir/all] Ошибка 2
Makefile:138: ошибка выполнения рецепта для цели «all»
make: *** [all] Ошибка 2
What to do?
"error: /usr/lib/jvm/java-8-openjdk-i386/jre/lib/i386/server/libjvm.so: incompatible target" is because you have removed check if (TD_ENABLE_JNI AND NOT ANDROID) # jni is available by default on Android and CMake has found wrong JNI libraries, instead of the correct one. To build for Android you should use CMake which is a part of Android NDK.
I'm using this CMake to build (It seems to be part of the NDK)
https://developer.android.com/ndk/guides/cmake.html
With this check does not see jni at all if (TD_ENABLE_JNI AND NOT ANDROID)
So I wrote down like this if (TD_ENABLE_JNI)
Next, I set the paths to jni (with great certainty that this jni would not work - It turned out to be true)
Please tell me where to get the right jni?
Correct JNI headers can be found inside Android NDK. I'm not sure that you need to link with JRE libraries on Android at all when JNI is used.
Can you drop the already prepared cmake(ndk) command with which you collected?
We built TDLib for Android inside Android Studio project. It is hard to drop the whole project, but we will be publish it in the future.
It's brilliant. Can you somehow pull out the build.gradle files?
Happened. The file is too large at the output.

jnibuild# /home/user/prog/android-sdk/cmake/3.6.4111459/bin/cmake -DANDROID_ABI=armeabi-v7a -DCMAKE_BUILD_TYPE=Release -G Ninja -DCMAKE_TOOLCHAIN_FILE=/home/user/prog/android-sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_NATIVE_API_LEVEL=23 -DANDROID_TOOLCHAIN=clang -DOPENSSL_ROOT_DIR=/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/ -DOPENSSL_INCLUDE_DIR=/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/include/ -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/home/user/prog/td/jnibuild/ -DTD_ENABLE_JNI=ON -DANDROID_STL=c++_static ..
-- Check for working CXX compiler: /home/user/prog/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++
-- Check for working CXX compiler: /home/user/prog/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Check for working C compiler: /home/user/prog/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
-- Check for working C compiler: /home/user/prog/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found ccache
-- Found OpenSSL: /home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/libssl.so;/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/libcrypto.so (found version "1.0.0a")
-- Found OpenSSL: /home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/include /home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/libssl.so;/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/libcrypto.so
-- Performing Test HAVE_STD14
-- Performing Test HAVE_STD14 - Success
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - found
-- Found Threads: TRUE
-- Performing Test HAVE_CXX_FLAG_WALL
-- Performing Test HAVE_CXX_FLAG_WALL - Success
-- Performing Test HAVE_CXX_FLAG_WEXTRA
-- Performing Test HAVE_CXX_FLAG_WEXTRA - Success
-- Performing Test HAVE_CXX_FLAG_WIMPLICIT_FALLTHROUGH_2
-- Performing Test HAVE_CXX_FLAG_WIMPLICIT_FALLTHROUGH_2 - Failed
-- Performing Test HAVE_CXX_FLAG_WPOINTER_ARITH
-- Performing Test HAVE_CXX_FLAG_WPOINTER_ARITH - Success
-- Performing Test HAVE_CXX_FLAG_WCAST_QUAL
-- Performing Test HAVE_CXX_FLAG_WCAST_QUAL - Success
-- Performing Test HAVE_CXX_FLAG_WSIGN_COMPARE
-- Performing Test HAVE_CXX_FLAG_WSIGN_COMPARE - Success
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_BRANCHES
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_BRANCHES - Failed
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_COND
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_COND - Failed
-- Performing Test HAVE_CXX_FLAG_WALLOC_ZERO
-- Performing Test HAVE_CXX_FLAG_WALLOC_ZERO - Failed
-- Performing Test HAVE_CXX_FLAG_WLOGICAL_OP
-- Performing Test HAVE_CXX_FLAG_WLOGICAL_OP - Failed
-- Performing Test HAVE_CXX_FLAG_WTAUTOLOGICAL_COMPARE
-- Performing Test HAVE_CXX_FLAG_WTAUTOLOGICAL_COMPARE - Success
-- Performing Test HAVE_CXX_FLAG_WVLA
-- Performing Test HAVE_CXX_FLAG_WVLA - Success
-- Performing Test HAVE_CXX_FLAG_WNON_VIRTUAL_DTOR
-- Performing Test HAVE_CXX_FLAG_WNON_VIRTUAL_DTOR - Success
-- Performing Test HAVE_CXX_FLAG_WUNUSED_PARAMETER
-- Performing Test HAVE_CXX_FLAG_WUNUSED_PARAMETER - Success
-- Performing Test HAVE_CXX_FLAG_WCONVERSION
-- Performing Test HAVE_CXX_FLAG_WCONVERSION - Success
-- Performing Test HAVE_CXX_FLAG_WSIGN_CONVERSION
-- Performing Test HAVE_CXX_FLAG_WSIGN_CONVERSION - Success
-- Performing Test HAVE_CXX_FLAG_WCXX14_COMPAT_PEDANTIC
-- Performing Test HAVE_CXX_FLAG_WCXX14_COMPAT_PEDANTIC - Success
-- Performing Test HAVE_CXX_FLAG_QUNUSED_ARGUMENTS
-- Performing Test HAVE_CXX_FLAG_QUNUSED_ARGUMENTS - Success
-- Performing Test HAVE_CXX_FLAG_WODR
-- Performing Test HAVE_CXX_FLAG_WODR - Success
-- Performing Test HAVE_CXX_FLAG_FLTO_ODR_TYPE_MERGING
-- Performing Test HAVE_CXX_FLAG_FLTO_ODR_TYPE_MERGING - Failed
-- Found ZLIB: /home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/libz.so (found version "1.2.3")
-- Found ZLIB: /home/user/prog/android-sdk/ndk-bundle/sysroot/usr/include /home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/libz.so
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/prog/td/jnibuild
jnibuild# /home/user/prog/android-sdk/cmake/3.6.4111459/bin/cmake --build .
[167/242] Building CXX object CMakeFiles/tdcore.dir/td/telegram/MessagesManager.cpp.o
/home/user/prog/td/td/telegram/MessagesManager.cpp:15708:100: warning: lambda capture 'file_id' is not used [-Wunused-lambda-capture]
PromiseCreator::lambda([this, dialog_id, secret_input_media = std::move(secret_input_media), file_id,
^
/home/user/prog/td/td/telegram/MessagesManager.cpp:15709:31: warning: lambda capture 'thumbnail_file_id' is not used [-Wunused-lambda-capture]
thumbnail_file_id](Result<Message *> result) mutable {
^
2 warnings generated.
[242/242] Linking CXX shared library libtdjni.so
For Android builds it is better to use MinSizeRel instead of Release.
You need to strip the file to reduce its size. Between, it will be automatically stripped before deploying to a device.
Thanks @levlam. Everything worked out.
As a material for thought:
If you collect through android-27 and found version openssl 1.0.2j for android then the assembly will hang here
MessagesManager.cpp:15709:31: warning: lambda capture 'thumbnail_file_id' is not used [-Wunused-lambda-capture]
thumbnail_file_id](Result<Message *> result) mutable {
^
2 warnings generated.
[240/242] Linking CXX shared library libtdjson.so
In fact, the files are already created and can be used. This is likely already on the side of android, but it still needs to be checked. It's worth waiting for some assembly is completed.
Instructions for those who have fun with openssl for android
http://doc.qt.io/qt-5/opensslsupport.html
dos2unix to convert the Setenv-android.sh file to Unix format
@isopen , Can you show the hierarchy of your project directory and the CMakeList.txt? I am trying to build Tdlib for my own project, and I just have little of knowledge about Cmake and NDK. :(
Download NDK and CMake for NDK. You can do this using android studio or upload via console.
Assemble openssl and load into the appropriate folder NDK.
The hierarchy of the project has not changed much https://github.com/tdlib/td/issues/77#issuecomment-373172529
You must use the current project java. It shows an example of building the required library. You can also take from it all the necessary links for CMakeList.txt (If possible read about Boost in CMake)
Example of an assembly command
/home/user/prog/android-sdk/cmake/3.6.4111459/bin/cmake -DANDROID_ABI=armeabi-v7a -DCMAKE_BUILD_TYPE=Release -G Ninja -DCMAKE_TOOLCHAIN_FILE=/home/user/prog/android-sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_NATIVE_API_LEVEL=23 -DANDROID_TOOLCHAIN=clang -DOPENSSL_ROOT_DIR=/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/ -DOPENSSL_INCLUDE_DIR=/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/include/ -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/home/user/prog/td/jnibuild/ -DTD_ENABLE_JNI=ON -DANDROID_STL=c++_static ..
Perhaps you will come across a lot of other plot events during the assembly process. Which will need to be addressed.
Let's wait for the solution of professionals.
It's nice of you to respond promptly. I'll give it a try.
@levlam, Can u give some hint or guide how to build TdJson lib for Android as I'm going to integrate it to a flutter project via platform channels. I want to use json interface on both iOS and Android, so I can write the same logic for both on flutter side.
@aaugmentum
You will need two things:
@aaugmentum This is, for example, the JNI wrapper: tdjsonjava.zip.
@aaugmentum Could you try these prebuilt libs:
tdlib.zip. They are supposed to contain TDLib 1.4.0 with implementation of org.drinkless.tdlib.JsonClient from the previous comment and provide TDLib's JSON interface for Android.
https://github.com/tdlib/td/issues/77#issuecomment-376562359
It definitely worked. Next, from the archive of Leo, you can copy the interface in Java.
There are androidx imports. You may have to transfer the project to it.
The most important thing is to openssl competently assemble.
@aaugmentum Could you try these prebuilt libs:
tdlib.zip. They are supposed to contain TDLib 1.4.0 with implementation of org.drinkless.tdlib.JsonClient from the previous comment and provide TDLib's JSON interface for Android.
Yeah, it worked! Thank you very much :)

The only problem was in library name in JsonClient.java.
tdjsonjava is the right name.
static {
try {
System.loadLibrary("tdjsonjava");
} catch (UnsatisfiedLinkError e) {
e.printStackTrace();
}
}
how the funk do I add the prebuilt tdlib for android to a project? just can't find any how
still can't setup a working copy of tdlib or telegram official cllient
@aaugmentum Could you try these prebuilt libs:
tdlib.zip. They are supposed to contain TDLib 1.4.0 with implementation of org.drinkless.tdlib.JsonClient from the previous comment and provide TDLib's JSON interface for Android.
There are any prebuilt libs for TDLib 1.5.0?
1.5 is deprecated. Need a newer version 1.6
@i-Naji Here is built for Android libtdjsonjava 1.5.1 (API compatible with 1.5.0):
tdlib.zip.
But also I have a question to @levlam
I've build lib and strip it with ndk, but the size of lib is almost 2 times bigger, than prebuilt, that you provided?
What more I can do it improve lib size?
@whyoleg Here are the CMakeLists.txt files I use to build TDLib for Android: libtdjsonjava and JNI.
The key part is likely to be
string(APPEND CMAKE_CXX_FLAGS " -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti")
string(APPEND CMAKE_SHARED_LINKER_FLAGS " -Wl,--gc-sections -Wl,--exclude-libs,ALL")
@levlam Thx! Will check in several hours
@levlam Big thx! It's work, cool, size even less, then in prebuilt version :)
@levlam Big thx! It's work, cool, size even less, then in prebuilt version :)
Could you please gimme detail on how to build libtdjson for Android. I tried this guide with CMakeLists.txt above from @levlam , but to no avail.
Thanks
@levlam Can you provide me prebuilt libtdjson.so of Android with the raw interface of something like this:
td_json_client_create
td_json_client_send
...
I plan to use Dart FFI to directly invoke C functions. Thanks.
I built Android libtdjson.so on macOS Catalina 10.15.5
HOMEBREW_VERSION: 2.3.0
ORIGIN: https://github.com/Homebrew/brew
HEAD: 77e09fc166f5fb7197b239d5e2727ddc0791c121
Last commit: 6 days ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: cb5db5351f92667cd892ae2403ebef699d731c78
Core tap last commit: 5 hours ago
HOMEBREW_PREFIX: /usr/local
HOMEBREW_MAKE_JOBS: 8
CPU: octa-core 64-bit haswell
Homebrew Ruby: 2.6.3 => /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby
Clang: 11.0 build 1103
Git: 2.24.3 => /Applications/Xcode.app/Contents/Developer/usr/bin/git
Curl: 7.64.1 => /usr/bin/curl
Java: 14.0.1
macOS: 10.15.5-x86_64
CLT: 1103.0.32.62
Xcode: 11.5
Android Studio 3.6.3
NDK:ndk/21.2.6472646
Build instruction: https://tdlib.github.io/td/#building
@levlam
Verbose log:
FAILED: : && ccache /Users/andrewtran2020/Library/Android/sdk/ndk/21.2.6472646/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=armv7-none-linux-androideabi16 --gcc-toolchain=/Users/andrewtran2020/Library/Android/sdk/ndk/21.2.6472646/toolchains/llvm/prebuilt/darwin-x86_64 --sysroot=/Users/andrewtran2020/Library/Android/sdk/ndk/21.2.6472646/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security -std=c++14 -fno-omit-frame-pointer -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -Wall -Wextra -Wpointer-arith -Wcast-qual -Wsign-compare -Wno-tautological-compare -Wpointer-arith -Wvla -Wnon-virtual-dtor -Wno-unused-parameter -Wconversion -Wno-sign-conversion -Wc++14-compat-pedantic -Wdeprecated -Qunused-arguments -Wodr -O0 -fno-limit-debug-info -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -Wl,--gc-sections -Wl,--exclude-libs,ALL -shared -Wl,-soname,libtdjson.so -o /Users/andrewtran2020/Dev/src/t4/build/app/intermediates/cmake/debug/obj/armeabi-v7a/libtdjson.so CMakeFiles/tdjson.dir/td/telegram/td_json_client.cpp.o CMakeFiles/tdjson.dir/td/telegram/td_log.cpp.o libtdjson_private.a libtdclient.a libtdcore.a tdnet/libtdnet.a /usr/local/opt/openssl/lib/libssl.dylib tddb/libtddb.a tdactor/libtdactor.a sqlite/libtdsqlite.a tdutils/libtdutils.a /usr/local/opt/openssl/lib/libcrypto.dylib -ldl -Wl,-Bstatic -lz -Wl,-Bdynamic -llog -latomic -lm && :
/Users/andrewtran2020/Library/Android/sdk/ndk/21.2.6472646/toolchains/llvm/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: /usr/local/opt/openssl/lib/libssl.dylib:1:1: invalid character
/Users/andrewtran2020/Library/Android/sdk/ndk/21.2.6472646/toolchains/llvm/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: /usr/local/opt/openssl/lib/libcrypto.dylib:1:1: invalid character
/Users/andrewtran2020/Dev/td/td/mtproto/crypto.cpp:41: error: undefined reference to 'BIO_new_mem_buf'
/Users/andrewtran2020/Dev/td/td/mtproto/crypto.cpp:49: error: undefined reference to 'PEM_read_bio_RSAPublicKey'
/Users/andrewtran2020/Dev/td/td/mtproto/crypto.cpp:57: error: undefined reference to 'RSA_size'
/Users/andrewtran2020/Dev/td/td/mtproto/crypto.cpp:67: error: undefined reference to 'RSA_get0_key'
/Users/andrewtran2020/Dev/td/td/mtproto/crypto.cpp:70: error: undefined reference to 'BN_dup'
/Users/andrewtran2020/Dev/td/td/mtproto/crypto.cpp:71: error: undefined reference to 'BN_dup'
/Users/andrewtran2020/Dev/td/td/mtproto/crypto.cpp:46: error: undefined reference to 'BIO_free'
/Users/andrewtran2020/Dev/td/td/mtproto/crypto.cpp:54: error: undefined reference to 'RSA_free'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:215: error: undefined reference to 'TLS_client_method'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:223: error: undefined reference to 'SSL_CTX_new'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:237: error: undefined reference to 'SSL_CTX_set_options'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:238: error: undefined reference to 'SSL_CTX_ctrl'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:281: error: undefined reference to 'SSL_CTX_set_default_verify_paths'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:291: error: undefined reference to 'SSL_CTX_load_verify_locations'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:297: error: undefined reference to 'SSL_CTX_set_verify'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:300: error: undefined reference to 'SSL_CTX_set_verify_depth'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:303: error: undefined reference to 'SSL_CTX_set_verify'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:308: error: undefined reference to 'SSL_CTX_set_cipher_list'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:312: error: undefined reference to 'SSL_new'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:322: error: undefined reference to 'SSL_get0_param'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:325: error: undefined reference to 'X509_VERIFY_PARAM_set_hostflags'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:326: error: undefined reference to 'X509_VERIFY_PARAM_set1_host'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:331: error: undefined reference to 'BIO_new'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:332: error: undefined reference to 'BIO_set_data'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:333: error: undefined reference to 'SSL_set_bio'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:337: error: undefined reference to 'SSL_ctrl'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:339: error: undefined reference to 'SSL_set_connect_state'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:202: error: undefined reference to 'OPENSSL_init_ssl'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:162: error: undefined reference to 'ERR_peek_error'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:150: error: undefined reference to 'ERR_get_error'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:152: error: undefined reference to 'ERR_error_string_n'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:122: error: undefined reference to 'X509_STORE_CTX_get_current_cert'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:122: error: undefined reference to 'X509_get_subject_name'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:122: error: undefined reference to 'X509_NAME_oneline'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:124: error: undefined reference to 'X509_STORE_CTX_get_error'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:125: error: undefined reference to 'X509_verify_cert_error_string'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:126: error: undefined reference to 'X509_STORE_CTX_get_error_depth'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:108: error: undefined reference to 'BIO_get_new_index'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:108: error: undefined reference to 'BIO_meth_new'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:109: error: undefined reference to 'BIO_meth_set_write'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:110: error: undefined reference to 'BIO_meth_set_read'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:111: error: undefined reference to 'BIO_meth_set_create'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:112: error: undefined reference to 'BIO_meth_set_destroy'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:113: error: undefined reference to 'BIO_meth_set_ctrl'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:512: error: undefined reference to 'BIO_get_data'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:514: error: undefined reference to 'BIO_clear_flags'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:501: error: undefined reference to 'BIO_get_data'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:503: error: undefined reference to 'BIO_clear_flags'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:506: error: undefined reference to 'BIO_set_flags'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:80: error: undefined reference to 'BIO_set_init'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:318: error: undefined reference to 'SSL_free'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:173: error: undefined reference to 'SSL_is_init_finished'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:177: error: undefined reference to 'SSL_set_quiet_shutdown'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:178: error: undefined reference to 'SSL_shutdown'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:228: error: undefined reference to 'SSL_CTX_free'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:194: error: undefined reference to 'SSL_free'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:196: error: undefined reference to 'SSL_CTX_free'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:385: error: undefined reference to 'SSL_read'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:463: error: undefined reference to 'SSL_get_error'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:484: error: undefined reference to 'ERR_peek_error'
/Users/andrewtran2020/Dev/td/tdnet/td/net/SslStream.cpp:376: error: undefined reference to 'SSL_write'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20316: error: undefined reference to 'EVP_get_cipherbyname'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20334: error: undefined reference to 'OPENSSL_init_crypto'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20396: error: undefined reference to 'RAND_bytes'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20405: error: undefined reference to 'HMAC_CTX_new'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20407: error: undefined reference to 'EVP_sha1'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20407: error: undefined reference to 'HMAC_Init_ex'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20408: error: undefined reference to 'HMAC_Update'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20409: error: undefined reference to 'HMAC_Update'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20410: error: undefined reference to 'HMAC_Final'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20411: error: undefined reference to 'HMAC_CTX_free'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20416: error: undefined reference to 'PKCS5_PBKDF2_HMAC_SHA1'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20422: error: undefined reference to 'EVP_CIPHER_CTX_new'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20424: error: undefined reference to 'EVP_CipherInit_ex'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20425: error: undefined reference to 'EVP_CIPHER_CTX_set_padding'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20426: error: undefined reference to 'EVP_CipherInit_ex'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20427: error: undefined reference to 'EVP_CipherUpdate'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20430: error: undefined reference to 'EVP_CipherFinal_ex'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20432: error: undefined reference to 'EVP_CIPHER_CTX_free'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20439: error: undefined reference to 'EVP_get_cipherbyname'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20447: error: undefined reference to 'EVP_CIPHER_nid'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20447: error: undefined reference to 'OBJ_nid2sn'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20451: error: undefined reference to 'EVP_CIPHER_key_length'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20455: error: undefined reference to 'EVP_CIPHER_iv_length'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20459: error: undefined reference to 'EVP_CIPHER_block_size'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20463: error: undefined reference to 'EVP_sha1'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20463: error: undefined reference to 'EVP_MD_size'
/Users/andrewtran2020/Dev/td/sqlite/sqlite/sqlite3.c:20297: error: undefined reference to 'RAND_add'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:75: error: undefined reference to 'BN_copy'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:87: error: undefined reference to 'BN_bin2bn'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:102: error: undefined reference to 'BN_dec2bn'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:111: error: undefined reference to 'BN_hex2bn'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:126: error: undefined reference to 'BN_set_flags'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:130: error: undefined reference to 'BN_num_bits'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:134: error: undefined reference to 'BN_num_bits'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:138: error: undefined reference to 'BN_set_bit'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:148: error: undefined reference to 'BN_is_bit_set'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:152: error: undefined reference to 'BN_is_prime_ex'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:158: error: undefined reference to 'BN_add_word'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:163: error: undefined reference to 'BN_sub_word'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:173: error: undefined reference to 'BN_div_word'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:178: error: undefined reference to 'BN_mod_word'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:185: error: undefined reference to 'BN_set_word'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:187: error: undefined reference to 'BN_set_word'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:193: error: undefined reference to 'BN_dup'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:206: error: undefined reference to 'BN_bn2bin'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:219: error: undefined reference to 'BN_bn2lebinpad'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:229: error: undefined reference to 'BN_bn2dec'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:232: error: undefined reference to 'CRYPTO_free'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:237: error: undefined reference to 'BN_rand'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:242: error: undefined reference to 'BN_add'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:249: error: undefined reference to 'BN_sub'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:254: error: undefined reference to 'BN_mul'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:259: error: undefined reference to 'BN_mod_add'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:265: error: undefined reference to 'BN_mod_sub'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:271: error: undefined reference to 'BN_mod_mul'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:277: error: undefined reference to 'BN_mod_inverse'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:289: error: undefined reference to 'BN_div'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:294: error: undefined reference to 'BN_mod_exp'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:300: error: undefined reference to 'BN_gcd'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:305: error: undefined reference to 'BN_cmp'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:27: error: undefined reference to 'BN_CTX_new'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:35: error: undefined reference to 'BN_CTX_free'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:51: error: undefined reference to 'BN_new'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/BigNum.cpp:61: error: undefined reference to 'BN_clear_free'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:135: error: undefined reference to 'OPENSSL_init_crypto'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:250: error: undefined reference to 'AES_set_encrypt_key'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:252: error: undefined reference to 'AES_set_decrypt_key'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:256: error: undefined reference to 'AES_ige_encrypt'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:273: error: undefined reference to 'AES_set_encrypt_key'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:275: error: undefined reference to 'AES_set_decrypt_key'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:279: error: undefined reference to 'AES_cbc_encrypt'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:319: error: undefined reference to 'AES_encrypt'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:357: error: undefined reference to 'SHA1'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:363: error: undefined reference to 'SHA256'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:369: error: undefined reference to 'SHA512'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:435: error: undefined reference to 'SHA256_Final'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:419: error: undefined reference to 'SHA256_Init'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:427: error: undefined reference to 'SHA256_Update'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:445: error: undefined reference to 'MD5'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:487: error: undefined reference to 'EVP_sha256'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:451: error: undefined reference to 'EVP_MD_size'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:479: error: undefined reference to 'PKCS5_PBKDF2_HMAC'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:491: error: undefined reference to 'EVP_sha512'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:497: error: undefined reference to 'EVP_sha256'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:497: error: undefined reference to 'HMAC'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:521: error: undefined reference to 'BIO_new_mem_buf'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:527: error: undefined reference to 'PEM_read_bio_PUBKEY'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:545: error: undefined reference to 'EVP_PKEY_CTX_new'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:553: error: undefined reference to 'EVP_PKEY_encrypt_init'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:556: error: undefined reference to 'RSA_pkey_ctx_ctrl'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:561: error: undefined reference to 'EVP_PKEY_encrypt'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:565: error: undefined reference to 'EVP_PKEY_encrypt'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:516: error: undefined reference to 'EVP_PKEY_base_id'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:308: error: undefined reference to 'AES_set_encrypt_key'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:524: error: undefined reference to 'BIO_vfree'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:532: error: undefined reference to 'EVP_PKEY_free'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/crypto.cpp:550: error: undefined reference to 'EVP_PKEY_CTX_free'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/Random.cpp:58: error: undefined reference to 'RAND_bytes'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/Random.cpp:67: error: undefined reference to 'RAND_bytes'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/Random.cpp:97: error: undefined reference to 'RAND_add'
/Users/andrewtran2020/Dev/td/tdutils/td/utils/Slice.cpp:25: error: undefined reference to 'OPENSSL_cleanse'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
@levlam I finally get it done. But libtdjson looks big, >200M. Is that normal?
Anyway I feel fairly satisfied with this latest combo: tdLib 1.6.6 + openssl .1.1.1g
Have you stripped it?
For ARM64 the size should be 15 MB.
I prepared scripts which can be used to build all flavours of TDLib for Android. You will need Bash, cmake, ninja, C++14 compatible compiler, PHP (optional, for documentation generation), Android NDK and system JDK preinstalled. Make sure that ANDROID_SDK_ROOT environment variable is correctly set before using the scripts.
You can build desired TDLib version using:
libtdjni.zip - native JNI wrapper for TDLib with autogenerated Java classes.
libtdjsonandroid.zip - TDLib JSON interface built for Android. All TDLib JSON interface methods have ordinary names prefixed with undescore, for example _td_json_client_create.
libtdjsonjava.zip - JNI wrapper for TDLib JSON interface.
You will need to unpack the desired archive to td/example directory. Then download the latest OpenSSL 1.1.1 source code as a .tar.gz archive from OpenSSL 1.1.1 release page and place it in the third_party/crypto subfolder. After that you need to adjust variables ANDROID_NDK and HOST_ARCH in third_party/crypto/build.sh and run third_party/crypto/build-all.sh script to build OpenSSL.
After that run the script export.sh in the unpacked archive top-level directory to build TDLib.
@levlam I managed to collect it. Too bad not in Real-time.
openssl https://github.com/KDAB/android_openssllibtdjni only works after building java example in jnibuild https://github.com/tdlib/td/tree/master/example/java.Have you stripped it?
For ARM64 the size should be 15 MB.
@levlam, It reminds that isopene has a sting up 14562568...
Have you stripped it?
For ARM64 the size should be 15 MB.
Gimme instructions on how to strip files. Thanks. @levlam
@AndrewTran2018 See https://github.com/tdlib/td/issues/77#issuecomment-640719893;
I prepared scripts which can be used to build all flavours of TDLib for Android. You will need Bash, cmake, ninja, C++14 compatible compiler, PHP (optional, for documentation generation), Android NDK and system JDK preinstalled. Make sure that
ANDROID_SDK_ROOTenvironment variable is correctly set before using the scripts.You can build desired TDLib version using:
libtdjni.zip - native JNI wrapper for TDLib with autogenerated Java classes.
libtdjsonandroid.zip - TDLib JSON interface built for Android. All TDLib JSON interface methods have ordinary names prefixed with undescore, for example_td_json_client_create.
libtdjsonjava.zip - JNI wrapper for TDLib JSON interface.You will need to unpack the desired archive to
td/exampledirectory. Then download the latest OpenSSL 1.1.1 source code as a .tar.gz archive from OpenSSL 1.1.1 release page and place it in thethird_party/cryptosubfolder. After that you need to adjust variablesANDROID_NDKandHOST_ARCHinthird_party/crypto/build.shand runthird_party/crypto/build-all.shscript to build OpenSSL.
After that run the scriptbuild-all.shin the unpacked archive top-level directory to build TDLib.
I wanna keep the same lib name and interface as the previous one. Update CMakeList.txt in libtdjsonandroid.zip? @levlam
@AndrewTran2018 You can edit provided scripts as you wish.
@levlam Ok, I got android libtdsjon to be stripped = 16-17M. That's nice. As for iOS build, how to strip libtdjson.dylib? It's 284M for now. That's so big. I looked at CMakeList.txt and it looks like you have put it under stripping process already, but it's still that big. Please explain this. Thanks.
iOS binaries are very big, because of their format and because they contains code for all architectures. Installed size will be much smaller that 284MB, but still times bigger than on Android.
iOS binaries are very big, because of their format and because they contains code for all arcitectures. Installed size will be much smaller that 284MB, but still times bigger than on Android.
Wow! Could you please help reduce its size? Many thanks @levlam
No. You can complain to Apple about binaries size on their platform.
Hi,
I'm trying to build for android, using JSON c++ interface, I've followed instructions, download libtdjsonandroid.zip and uncompress inside example folder. I can compile openssl libraries, but when I execute build-all.sh I get the error
'td/telegram/td_api.h' file not found
Any ideas? I attach the log
MACMINI:libtdjsonandroid sgomez$ ./build-all.sh
-- Check for working C compiler: /Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang
-- Check for working C compiler: /Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++
-- Check for working CXX compiler: /Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Could NOT find ccache (this is NOT an error)
-- Found OpenSSL: /Users/sgomez/Documents/td/example/libtdjsonandroid/third_party/crypto/arm64/lib/libcrypto.a (found version "1.1.1g")
-- Found OpenSSL: /Users/sgomez/Documents/td/example/libtdjsonandroid/third_party/crypto/arm64/include /Users/sgomez/Documents/td/example/libtdjsonandroid/third_party/crypto/arm64/lib/libssl.a;/Users/sgomez/Documents/td/example/libtdjsonandroid/third_party/crypto/arm64/lib/libcrypto.a
-- Performing Test HAVE_STD14
-- Performing Test HAVE_STD14 - Success
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - found
-- Found Threads: TRUE
-- Performing Test HAVE_CXX_FLAG_WALL
-- Performing Test HAVE_CXX_FLAG_WALL - Success
-- Performing Test HAVE_CXX_FLAG_WEXTRA
-- Performing Test HAVE_CXX_FLAG_WEXTRA - Success
-- Performing Test HAVE_CXX_FLAG_WIMPLICIT_FALLTHROUGH_2
-- Performing Test HAVE_CXX_FLAG_WIMPLICIT_FALLTHROUGH_2 - Failed
-- Performing Test HAVE_CXX_FLAG_WPOINTER_ARITH
-- Performing Test HAVE_CXX_FLAG_WPOINTER_ARITH - Success
-- Performing Test HAVE_CXX_FLAG_WCAST_QUAL
-- Performing Test HAVE_CXX_FLAG_WCAST_QUAL - Success
-- Performing Test HAVE_CXX_FLAG_WSIGN_COMPARE
-- Performing Test HAVE_CXX_FLAG_WSIGN_COMPARE - Success
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_BRANCHES
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_BRANCHES - Failed
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_COND
-- Performing Test HAVE_CXX_FLAG_WDUPLICATED_COND - Failed
-- Performing Test HAVE_CXX_FLAG_WALLOC_ZERO
-- Performing Test HAVE_CXX_FLAG_WALLOC_ZERO - Failed
-- Performing Test HAVE_CXX_FLAG_WLOGICAL_OP
-- Performing Test HAVE_CXX_FLAG_WLOGICAL_OP - Failed
-- Performing Test HAVE_CXX_FLAG_WTAUTOLOGICAL_COMPARE
-- Performing Test HAVE_CXX_FLAG_WTAUTOLOGICAL_COMPARE - Success
-- Performing Test HAVE_CXX_FLAG_WVLA
-- Performing Test HAVE_CXX_FLAG_WVLA - Success
-- Performing Test HAVE_CXX_FLAG_WNON_VIRTUAL_DTOR
-- Performing Test HAVE_CXX_FLAG_WNON_VIRTUAL_DTOR - Success
-- Performing Test HAVE_CXX_FLAG_WUNUSED_PARAMETER
-- Performing Test HAVE_CXX_FLAG_WUNUSED_PARAMETER - Success
-- Performing Test HAVE_CXX_FLAG_WCONVERSION
-- Performing Test HAVE_CXX_FLAG_WCONVERSION - Success
-- Performing Test HAVE_CXX_FLAG_WSIGN_CONVERSION
-- Performing Test HAVE_CXX_FLAG_WSIGN_CONVERSION - Success
-- Performing Test HAVE_CXX_FLAG_WCXX14_COMPAT_PEDANTIC
-- Performing Test HAVE_CXX_FLAG_WCXX14_COMPAT_PEDANTIC - Success
-- Performing Test HAVE_CXX_FLAG_WDEPRECATED
-- Performing Test HAVE_CXX_FLAG_WDEPRECATED - Success
-- Performing Test HAVE_CXX_FLAG_QUNUSED_ARGUMENTS
-- Performing Test HAVE_CXX_FLAG_QUNUSED_ARGUMENTS - Success
-- Performing Test HAVE_CXX_FLAG_WODR
-- Performing Test HAVE_CXX_FLAG_WODR - Success
-- Performing Test HAVE_CXX_FLAG_FLTO_ODR_TYPE_MERGING
-- Performing Test HAVE_CXX_FLAG_FLTO_ODR_TYPE_MERGING - Failed
-- Found ZLIB: /Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/lib/aarch64-linux-android/libz.a (found version "1.2.7")
-- Found ZLIB: /Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include /Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/lib/aarch64-linux-android/libz.a
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/sgomez/Documents/td/example/libtdjsonandroid/build-arm64-v8a
[2/320] Building CXX object td/CMakeFi...n.dir/td/telegram/td_json_client.cpp.o
FAILED: td/CMakeFiles/tdjson.dir/td/telegram/td_json_client.cpp.o
/Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=aarch64-none-linux-android23 --gcc-toolchain=/Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64 --sysroot=/Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Dtdjson_EXPORTS -Itd -I../../../ -I../../../td/generate/auto -I../../../tdutils -Itd/tdutils -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -std=c++14 -fno-omit-frame-pointer -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -Wall -Wextra -Wpointer-arith -Wcast-qual -Wsign-compare -Wno-tautological-compare -Wpointer-arith -Wvla -Wnon-virtual-dtor -Wno-unused-parameter -Wconversion -Wno-sign-conversion -Wc++14-compat-pedantic -Wdeprecated -Qunused-arguments -Wodr -Os -DNDEBUG -fPIC -MD -MT td/CMakeFiles/tdjson.dir/td/telegram/td_json_client.cpp.o -MF td/CMakeFiles/tdjson.dir/td/telegram/td_json_client.cpp.o.d -o td/CMakeFiles/tdjson.dir/td/telegram/td_json_client.cpp.o -c /Users/sgomez/Documents/td/td/telegram/td_json_client.cpp
In file included from /Users/sgomez/Documents/td/td/telegram/td_json_client.cpp:9:
In file included from ../../../td/telegram/ClientJson.h:9:
../../../td/telegram/Client.h:11:10: fatal error: 'td/telegram/td_api.h' file not found
#include "td/telegram/td_api.h"
^~~~~~~~~~~~~~~~~~~~~~
1 error generated.
[3/320] Building CXX object td/CMakeFi...c.dir/td/telegram/td_json_client.cpp.o
FAILED: td/CMakeFiles/tdjson_static.dir/td/telegram/td_json_client.cpp.o
/Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=aarch64-none-linux-android23 --gcc-toolchain=/Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64 --sysroot=/Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -DTDJSON_STATIC_DEFINE -Itd -I../../../ -I../../../td/generate/auto -I../../../tdutils -Itd/tdutils -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -std=c++14 -fno-omit-frame-pointer -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -Wall -Wextra -Wpointer-arith -Wcast-qual -Wsign-compare -Wno-tautological-compare -Wpointer-arith -Wvla -Wnon-virtual-dtor -Wno-unused-parameter -Wconversion -Wno-sign-conversion -Wc++14-compat-pedantic -Wdeprecated -Qunused-arguments -Wodr -Os -DNDEBUG -fPIC -MD -MT td/CMakeFiles/tdjson_static.dir/td/telegram/td_json_client.cpp.o -MF td/CMakeFiles/tdjson_static.dir/td/telegram/td_json_client.cpp.o.d -o td/CMakeFiles/tdjson_static.dir/td/telegram/td_json_client.cpp.o -c /Users/sgomez/Documents/td/td/telegram/td_json_client.cpp
In file included from /Users/sgomez/Documents/td/td/telegram/td_json_client.cpp:9:
In file included from ../../../td/telegram/ClientJson.h:9:
../../../td/telegram/Client.h:11:10: fatal error: 'td/telegram/td_api.h' file not found
#include "td/telegram/td_api.h"
^~~~~~~~~~~~~~~~~~~~~~
1 error generated.
[7/320] Building CXX object td/CMakeFi...ivate.dir/td/telegram/ClientJson.cpp.o
FAILED: td/CMakeFiles/tdjson_private.dir/td/telegram/ClientJson.cpp.o
/Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=aarch64-none-linux-android23 --gcc-toolchain=/Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64 --sysroot=/Users/sgomez/Documents/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -I../../../ -I../../../td/generate/auto -I../../../tdutils -Itd/tdutils -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -std=c++14 -fno-omit-frame-pointer -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -Wall -Wextra -Wpointer-arith -Wcast-qual -Wsign-compare -Wno-tautological-compare -Wpointer-arith -Wvla -Wnon-virtual-dtor -Wno-unused-parameter -Wconversion -Wno-sign-conversion -Wc++14-compat-pedantic -Wdeprecated -Qunused-arguments -Wodr -Os -DNDEBUG -fPIC -MD -MT td/CMakeFiles/tdjson_private.dir/td/telegram/ClientJson.cpp.o -MF td/CMakeFiles/tdjson_private.dir/td/telegram/ClientJson.cpp.o.d -o td/CMakeFiles/tdjson_private.dir/td/telegram/ClientJson.cpp.o -c /Users/sgomez/Documents/td/td/telegram/ClientJson.cpp
In file included from /Users/sgomez/Documents/td/td/telegram/ClientJson.cpp:7:
In file included from ../../../td/telegram/ClientJson.h:9:
../../../td/telegram/Client.h:11:10: fatal error: 'td/telegram/td_api.h' file not found
#include "td/telegram/td_api.h"
^~~~~~~~~~~~~~~~~~~~~~
1 error generated.
ninja: build stopped: subcommand failed.
@esegece-com
You need to run ./export.sh instead of ./build-all.sh. Thanks for pointing this out. I fixed the instructions.
@esegece-com
You need to run ./export.sh instead of ./build-all.sh. Thanks for pointing this out. I fixed the instructions.
Thanks for your quick response, now works as expected.
Hi
I build android libtdsjon and have a problem with td_json_client_receive, Why it's like no timeout in receiving updates. any idea?
I/DLTD (27219): [ 3][t 0][1596721220.316367149][Client.cpp:230][&td_requests] Begin to wait for updates with timeout 5.000000
I/DLTD (27219): [ 3][t 0][1596721220.316695213][Client.cpp:236][&td_requests] End to wait for updates, returning object 0 0x0
I/DLTD (27219): [ 3][t 0][1596721220.317265033][Client.cpp:230][&td_requests] Begin to wait for updates with timeout 5.000000
I/DLTD (27219): [ 3][t 0][1596721220.317861318][Client.cpp:236][&td_requests] End to wait for updates, returning object 0 0x0
I/DLTD (27219): [ 3][t 0][1596721220.318530082][Client.cpp:230][&td_requests] Begin to wait for updates with timeout 5.000000
I/DLTD (27219): [ 3][t 0][1596721220.318972110][Client.cpp:236][&td_requests] End to wait for updates, returning object 0 0x0
I/DLTD (27219): [ 3][t 0][1596721220.319691181][Client.cpp:230][&td_requests] Begin to wait for updates with timeout 5.000000
I/DLTD (27219): [ 3][t 0][1596721220.320070028][Client.cpp:236][&td_requests] End to wait for updates, returning object 0 0x0
I/DLTD (27219): [ 3][t 0][1596721220.320688247][Client.cpp:230][&td_requests] Begin to wait for updates with timeout 5.000000
I/DLTD (27219): [ 3][t 0][1596721220.321310043][Client.cpp:236][&td_requests] End to wait for updates, returning object 0 0x0
I/DLTD (27219): [ 3][t 0][1596721220.322070121][Client.cpp:230][&td_requests] Begin to wait for updates with timeout 5.000000
I/DLTD (27219): [ 3][t 0][1596721220.322303056][Client.cpp:236][&td_requests] End to wait for updates, returning object 0 0x0
I/DLTD (27219): [ 3][t 0][1596721220.322771072][Client.cpp:230][&td_requests] Begin to wait for updates with timeout 5.000000
I/DLTD (27219): [ 3][t 0][1596721220.323407888][Client.cpp:236][&td_requests] End to wait for updates, returning object 0 0x0
I/DLTD (27219): [ 3][t 0][1596721220.324103116][Client.cpp:230][&td_requests] Begin to wait for updates with timeout 5.000000
I/DLTD (27219): [ 3][t 0][1596721220.324512004][Client.cpp:236][&td_requests] End to wait for updates, returning object 0 0x0
I/DLTD (27219): [ 3][t 0][1596721220.325057029][Client.cpp:230][&td_requests] Begin to wait for updates with timeout 5.000000
I/DLTD (27219): [ 3][t 0][1596721220.325656175][Client.cpp:236][&td_requests] End to wait for updates, returning object 0 0x0
@i-Naji Could you set TDLib log verbosity level to 15 and send the log from app launch to @tdlib_bot in Telegram?
I prepared scripts which can be used to build all flavours of TDLib for Android. You will need Bash, cmake, ninja, C++14 compatible compiler, PHP (optional, for documentation generation), Android NDK and system JDK preinstalled. Make sure that
ANDROID_SDK_ROOTenvironment variable is correctly set before using the scripts.You can build desired TDLib version using:
libtdjni.zip - native JNI wrapper for TDLib with autogenerated Java classes.
libtdjsonandroid.zip - TDLib JSON interface built for Android. All TDLib JSON interface methods have ordinary names prefixed with undescore, for example_td_json_client_create.
libtdjsonjava.zip - JNI wrapper for TDLib JSON interface.You will need to unpack the desired archive to
td/exampledirectory. Then download the latest OpenSSL 1.1.1 source code as a .tar.gz archive from OpenSSL 1.1.1 release page and place it in thethird_party/cryptosubfolder. After that you need to adjust variablesANDROID_NDKandHOST_ARCHinthird_party/crypto/build.shand runthird_party/crypto/build-all.shscript to build OpenSSL.
After that run the scriptexport.shin the unpacked archive top-level directory to build TDLib.
can you advice please how can I use android json interface in project after build?
@marior765 In the same way as any other shared library on Android. For libtdjsonandroid JSON interface methods will have names prefixed with undescore.
@levlam sorry for a stupid questions, but all I managed to implement is this one class, but as result its throw "No implementation found" error

tdjsonandroid doesn't define any native Java methods. If you want to use JSON interface from Java, you need to use libtdjsonjava and provided by it JsonClient class. You must not rename JsonClient class or change its package. Otherwise, the native method will not be found.
Most helpful comment
Download NDK and CMake for NDK. You can do this using android studio or upload via console.
Assemble openssl and load into the appropriate folder NDK.
The hierarchy of the project has not changed much https://github.com/tdlib/td/issues/77#issuecomment-373172529
You must use the current project java. It shows an example of building the required library. You can also take from it all the necessary links for CMakeList.txt (If possible read about Boost in CMake)
Example of an assembly command
/home/user/prog/android-sdk/cmake/3.6.4111459/bin/cmake -DANDROID_ABI=armeabi-v7a -DCMAKE_BUILD_TYPE=Release -G Ninja -DCMAKE_TOOLCHAIN_FILE=/home/user/prog/android-sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_NATIVE_API_LEVEL=23 -DANDROID_TOOLCHAIN=clang -DOPENSSL_ROOT_DIR=/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/armeabi-v7a/ -DOPENSSL_INCLUDE_DIR=/home/user/prog/android-sdk/ndk-bundle/platforms/android-23/arch-arm/usr/lib/include/ -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/home/user/prog/td/jnibuild/ -DTD_ENABLE_JNI=ON -DANDROID_STL=c++_static ..Perhaps you will come across a lot of other plot events during the assembly process. Which will need to be addressed.
Let's wait for the solution of professionals.