diff --git a/CMakeLists.txt b/CMakeLists.txt
index 15ba011ab9526a98cfd586c3e277edb2591f4a15..64b4713342d3543b2582f42974724b7275a246f2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,10 @@
 project(cellframe-node C)
 cmake_minimum_required(VERSION 3.1)
 
+set(NODE_TARGET      "${PROJECT_NAME}"     )
+set(NODE_CLI_TARGET  "${PROJECT_NAME}-cli" )
+set(NODE_TOOL_TARGET "${PROJECT_NAME}-tool")
+
 include(scripts/OS_Detection.cmake)
 
 if(DAP_DEBUG_BUILD)
@@ -171,7 +175,9 @@ add_subdirectory(libdap-stream-ch-chain)
 add_subdirectory(libdap-stream-ch-chain-net)
 add_subdirectory(libdap-stream-ch-chain-net-srv)
 
-add_subdirectory(libdap-chain-global-db)
+#if (NOT ANDROID)
+    add_subdirectory(libdap-chain-global-db)
+#endif()
 #add_subdirectory(libdap-stream-ch-chat)
 
 if(BUILD_CELLFRAME_NODE_TESTS)
@@ -179,17 +185,40 @@ if(BUILD_CELLFRAME_NODE_TESTS)
     add_subdirectory(test)
 endif()
 
+set( NODE_SOURCES
+  sources/main.c
+  sources/sig_unix_handler.c
+)
+set( NODE_CLI_SOURCES
+  sources/main_node_cli.c
+  sources/main_node_cli_shell.c
+  sources/main_node_cli_net.c
+)
+set( NODE_TOOL_SOURCES
+  sources/main_node_tool.c
+)
+
 if(UNIX)
-  add_executable(${PROJECT_NAME} "sources/main.c" "sources/sig_unix_handler.c")
-  add_executable(${PROJECT_NAME}-cli "sources/main_node_cli.c" "sources/main_node_cli_shell.c" "sources/main_node_cli_net.c" )
-  add_executable(${PROJECT_NAME}-tool "sources/main_node_tool.c" )
+  if(ANDROID)
+    add_library(${PROJECT_NAME} SHARED
+        ${NODE_SOURCES}
+        ${NODE_CLI_SOURCES}
+        ${NODE_TOOL_SOURCES}
+        sources/cellframe_node.h
+    )
+  else()
+    add_executable(${PROJECT_NAME} ${NODE_SOURCES})
+    add_executable(${NODE_CLI_TARGET} ${NODE_CLI_SOURCES})
+    add_executable(${NODE_TOOL_TARGET} ${NODE_TOOL_SOURCES})
+  endif()
 endif()
 
 if(WIN32)
   add_executable(${PROJECT_NAME} "sources/main.c" "sources/exh_win32.c" "sources/sig_win32_handler.c")
-  add_executable(${PROJECT_NAME}-cli "sources/main_node_cli.c" "sources/main_node_cli_shell.c" "sources/main_node_cli_net.c" )
-  add_executable(${PROJECT_NAME}-tool "sources/main_node_tool.c" )
-  target_link_libraries(${PROJECT_NAME}-cli dap_chain_net
+  add_executable(${NODE_CLI_TARGET} "sources/main_node_cli.c" "sources/main_node_cli_shell.c" "sources/main_node_cli_net.c" )
+  add_executable(${NODE_TOOL_TARGET} "sources/main_node_tool.c" )
+
+  target_link_libraries(${NODE_CLI_TARGET} dap_chain_net
     ${CMAKE_CURRENT_SOURCE_DIR}/lib/[x86_64CLANG]/libjson-c[x86_64CLANG].a
     ${CMAKE_CURRENT_SOURCE_DIR}/lib/[x86_64CLANG]/libsqlite3[x86_64CLANG].a
     ${CMAKE_CURRENT_SOURCE_DIR}/lib/[x86_64CLANG]/libmongoc[x86_64CLANG].a
@@ -221,8 +250,8 @@ if(WIN32)
     Secur32
     userenv
   )
-  set_property(TARGET ${PROJECT_NAME}-cli APPEND_STRING PROPERTY LINK_FLAGS "-mconsole")
-    target_link_libraries(${PROJECT_NAME}-tool dap_core dap_crypto dap_server_core dap_enc_server dap_udp_server dap_session
+  set_property(TARGET ${NODE_CLI_TARGET} APPEND_STRING PROPERTY LINK_FLAGS "-mconsole")
+    target_link_libraries(${NODE_TOOL_TARGET} dap_core dap_crypto dap_server_core dap_enc_server dap_udp_server dap_session
     dap_enc_server dap_stream dap_stream_ch_chain dap_stream_ch_chain_net
     dap_stream_ch_chain_net_srv dap_chain dap_chain_crypto dap_client
     dap_chain_cs_dag dap_chain_cs_dag_poa dap_chain_cs_dag_pos
@@ -261,7 +290,7 @@ if(WIN32)
     Secur32
     userenv
   )
-  set_property(TARGET ${PROJECT_NAME}-tool APPEND_STRING PROPERTY LINK_FLAGS "-mconsole")
+  set_property(TARGET ${NODE_TOOL_TARGET} APPEND_STRING PROPERTY LINK_FLAGS "-mconsole")
 
   target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_server_core dap_enc_server dap_udp_server dap_session
     dap_enc_server dap_stream dap_stream_ch_chain dap_stream_ch_chain_net
@@ -311,21 +340,24 @@ endif()
 #add_executable(${PROJECT_NAME}-tool "sources/main_node_tool.c" )
 
 if(UNIX)
-    target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_crypto dap_server_core dap_enc_server dap_udp_server dap_session
+    set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY LINK_FLAGS "-D_GNU_SOURCE")
+
+    set(NODE_LIBRARIES
+        dap_core dap_crypto dap_crypto dap_server_core dap_enc_server dap_udp_server dap_session
         dap_enc_server dap_stream dap_stream_ch_chain dap_stream_ch_chain_net
         dap_stream_ch_chain_net_srv dap_chain dap_chain_crypto dap_client
         dap_chain_cs_dag dap_chain_cs_dag_poa dap_chain_cs_dag_pos
         dap_chain_net dap_chain_net_srv dap_chain_net_srv_app dap_chain_net_srv_app_db
         dap_chain_net_srv_datum dap_chain_net_srv_datum_pool dap_chain_net_srv_vpn
         dap_chain_wallet dap_chain_global_db dap_chain_mempool dap_chain_gdb m magic
-        dap_cuttdb
-        #dap_server_http_db
-    )
+        dap_cuttdb)
 
-    target_link_libraries(${PROJECT_NAME}-cli m dap_chain_net curl dap_cuttdb )
+    set(NODE_CLI_LIBRARIES
+        m dap_chain_net curl dap_cuttdb)
 
-    target_link_libraries(${PROJECT_NAME}-tool dap_core dap_crypto dap_server_core dap_enc_server  dap_udp_server dap_session
-        dap_enc_server dap_stream dap_stream_ch_chain dap_stream_ch_chain_net
+    set(NODE_TOOL_LIBRARIES
+        dap_core dap_crypto dap_server_core dap_enc_server  dap_udp_server dap_session
+        dap_enc_server dap_stream dap_stream_ch_vpn dap_stream_ch_chain dap_stream_ch_chain_net
         dap_stream_ch_chain_net_srv dap_chain dap_chain_crypto dap_client
         dap_chain_cs_dag dap_chain_cs_dag_poa dap_chain_cs_dag_pos
         dap_chain_net dap_chain_net_srv dap_chain_net_srv_app dap_chain_net_srv_app_db
@@ -334,31 +366,33 @@ if(UNIX)
         dap_core
     )
 
-    if(NOT ANDROID)
-        target_link_libraries(${PROJECT_NAME}
-            pthread
-            dap_server_http_db_auth
-            dap_cuttdb
-            )
-        target_link_libraries(${PROJECT_NAME}-cli pthread)
-        target_link_libraries(${PROJECT_NAME}-tool pthread)
+    if(ANDROID )
+        set(ALL_LIBRARIES ${NODE_LIBRARIES} ${NODE_CLI_LIBRARIES} ${NODE_TOOL_LIBRARIES} log)
+
+        list(REMOVE_DUPLICATES ALL_LIBRARIES)
 
+        target_link_libraries(${NODE_TARGET} ${ALL_LIBRARIES})
+
+    else()
+        target_link_libraries(${NODE_TARGET}      ${NODE_LIBRARIES} pthread dap_server_http_db_auth dap_cuttdb )
+        target_link_libraries(${NODE_CLI_TARGET}  ${NODE_CLI_LIBRARIES} pthread )
+        target_link_libraries(${NODE_TOOL_TARGET} ${NODE_TOOL_LIBRARIES} pthread )
     endif()
 endif()
 
 target_include_directories(${PROJECT_NAME} INTERFACE .)
 
-if(UNIX)
-    target_include_directories(${PROJECT_NAME}-cli INTERFACE .)
-    target_include_directories(${PROJECT_NAME}-tool INTERFACE .)
+if(UNIX AND NOT ANDROID)
+    target_include_directories(${NODE_CLI_TARGET} INTERFACE .)
+    target_include_directories(${NODE_TOOL_TARGET} INTERFACE .)
 endif()
 
 INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dist/ DESTINATION ${CMAKE_INSTALL_PREFIX} FILES_MATCHING PATTERN "*"  PATTERN "*")
 INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin )
 
-if(UNIX)
-    INSTALL(TARGETS ${PROJECT_NAME}-cli DESTINATION ${CMAKE_INSTALL_PREFIX}/bin )
-    INSTALL(TARGETS ${PROJECT_NAME}-tool DESTINATION ${CMAKE_INSTALL_PREFIX}/bin )
+if(UNIX AND NOT ANDROID)
+    INSTALL(TARGETS ${NODE_CLI_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin )
+    INSTALL(TARGETS ${NODE_TOOL_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin )
 endif()
 
 INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/scripts/ DESTINATION ${CMAKE_INSTALL_PREFIX}/bin FILES_MATCHING PATTERN "*"  PATTERN "*" PERMISSIONS OWNER_EXECUTE;OWNER_READ;OWNER_WRITE;WORLD_READ;GROUP_READ )
diff --git a/sources/cellframe_node.h b/sources/cellframe_node.h
new file mode 100644
index 0000000000000000000000000000000000000000..87c418f7cc94638c606a35f77e2a12431cb11c17
--- /dev/null
+++ b/sources/cellframe_node.h
@@ -0,0 +1,22 @@
+#ifndef MAIN_H
+#define MAIN_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+#ifdef __ANDROID__
+
+#define LOG_PATH
+
+int cellframe_node_Main(int argc, const char **argv);
+int cellframe_node__cli_Main(int argc, const char *argv[]);
+int cellframe_node_tool_Main(int argc, const char **argv);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // MAIN_H
diff --git a/sources/main.c b/sources/main.c
index ffe817cb7ff03db8bc89008c4b1bd60d95f2f489..2bcdecfc65b989c74095ee59feb850bced75e85e 100755
--- a/sources/main.c
+++ b/sources/main.c
@@ -124,13 +124,21 @@
 #define MEMPOOL_URL "/mempool"
 #define MAIN_URL "/"
 
+#ifdef __ANDROID__
+    #include "cellframe_node.h"
+#endif
+
 void parse_args( int argc, const char **argv );
 void exit_if_server_already_running( void );
 
 static char s_pid_file_path[MAX_PATH];
 static void s_auth_callback(enc_http_delegate_t *a_delegate, void * a_arg);
 
+#ifdef __ANDROID__
+int cellframe_node_Main(int argc, const char **argv)
+#else
 int main( int argc, const char **argv )
+#endif
 {
 	dap_server_t *l_server = NULL; // DAP Server instance
     bool l_debug_mode = true;
diff --git a/sources/main_node_cli.c b/sources/main_node_cli.c
index 590ca757dbb9a96a54ff36caca9ae377a20953d4..f0e8aa05c21c982c6e6fa94da3426d6007269409 100644
--- a/sources/main_node_cli.c
+++ b/sources/main_node_cli.c
@@ -34,6 +34,10 @@
 #include "main_node_cli_net.h"
 #include "main_node_cli_shell.h"
 
+#ifdef __ANDROID__
+    #include "cellframe_node.h"
+#endif
+
 #ifdef _WIN32
 #include "registry.h"
 #endif
@@ -181,9 +185,14 @@ int shell_reader_loop()
     return 0;
 }
 
-int main(int argc, const char * argv[])
+#ifdef __ANDROID__
+int cellframe_node__cli_Main(int argc, const char *argv[])
+#else
+
+int main(int argc, const char *argv[])
+#endif
 {
-#ifdef _WIN32
+#if defined (_WIN32)
     dap_sprintf(s_sys_dir_path, "%s/%s", regGetUsrPath(), DAP_APP_NAME);
     l_sys_dir_path_len = strlen(s_sys_dir_path);
 #endif
diff --git a/sources/main_node_tool.c b/sources/main_node_tool.c
index 404b2da0c82ddd7c87a1cdf56f81eee7d20c3326..ba50ef10dab9141fd5154e7356d81ef0355f1e44 100644
--- a/sources/main_node_tool.c
+++ b/sources/main_node_tool.c
@@ -96,13 +96,23 @@
 #define MAIN_URL "/"
 #define LOG_TAG "main_node_tool"
 
+#ifdef __ANDROID__
+    #include "cellframe_node.h"
+#endif
+
 static int s_init( int argc, const char * argv[] );
 static void s_help( );
 
 static char s_system_ca_dir[MAX_PATH];
 static const char *s_appname = "cellframe-node-tool";
 
-int main(int argc, const char **argv) {
+#ifdef __ANDROID__
+int cellframe_node_tool_Main(int argc, const char **argv)
+#else
+
+int main(int argc, const char **argv)
+#endif
+{
   int ret = s_init( argc, argv );
 
   if ( ret ) {
@@ -359,12 +369,14 @@ static int s_init( int argc, const char **argv )
 {
     char l_log_file_path[MAX_PATH];
     l_sys_dir_path_len = 0;
+
 #ifdef _WIN32
     dap_sprintf(s_sys_dir_path, "%s/%s", regGetUsrPath(), DAP_APP_NAME);
     l_sys_dir_path_len = strlen(s_sys_dir_path);
     memcpy(s_system_ca_dir, s_sys_dir_path, l_sys_dir_path_len);
     memcpy(l_log_file_path, s_sys_dir_path, l_sys_dir_path_len);
 #endif
+
     memcpy(l_log_file_path + l_sys_dir_path_len, SYSTEM_LOGS_DIR, sizeof(SYSTEM_LOGS_DIR));
     dap_sprintf(l_log_file_path + l_sys_dir_path_len + sizeof(SYSTEM_LOGS_DIR) - 1, "/%s_tool_logs.txt", DAP_APP_NAME);