diff --git a/CMakeLists.txt b/CMakeLists.txt
index 588cb58cdb0585d4e30c1e25e028b8e337f10624..06617e683ce703cff2edf8dc0566fc1ca652904c 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -104,6 +104,11 @@ if(DARWIN)
     target_link_libraries(${PROJECT_NAME} dap_core_darwin)
 endif()
 
+if(ANDROID)
+    add_subdirectory(src/android)
+    target_link_libraries(${PROJECT_NAME} dap_core_android)
+endif()
+
 if(BUILD_DAP_TESTS)
     enable_testing()
     add_subdirectory(test)
diff --git a/src/android/CMakeLists.txt b/src/android/CMakeLists.txt
new file mode 100755
index 0000000000000000000000000000000000000000..1e9d95846f79bcecbdddf4c3debbf0d572798269
--- /dev/null
+++ b/src/android/CMakeLists.txt
@@ -0,0 +1,14 @@
+cmake_minimum_required(VERSION 3.0)
+
+project (dap_core_android C)
+
+file(GLOB CORE_ANDROID_SRCS *.c)
+file(GLOB CORE_ANDROID_HEADERS *.h)
+
+add_library(${PROJECT_NAME} STATIC ${CORE_ANDROID_SRCS} ${CORE_ANDROID_HEADERS})
+
+#target_link_libraries(${PROJECT_NAME} dap_core pthread)
+
+target_include_directories(${PROJECT_NAME} INTERFACE .)
+
+
diff --git a/src/android/pthread_barrier.c b/src/android/pthread_barrier.c
new file mode 100755
index 0000000000000000000000000000000000000000..bc99b81bae6df1276c89920527b75a566dc6d3c2
--- /dev/null
+++ b/src/android/pthread_barrier.c
@@ -0,0 +1,54 @@
+#if __ANDROID_API__ < __ANDROID_API_N__
+#include "pthread_barrier.h"
+
+#include <errno.h>
+
+int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count)
+{
+    if(count == 0)
+    {
+        errno = EINVAL;
+        return -1;
+    }
+    if(pthread_mutex_init(&barrier->mutex, 0) < 0)
+    {
+        return -2;
+    }
+    if(pthread_cond_init(&barrier->cond, 0) < 0)
+    {
+        pthread_mutex_destroy(&barrier->mutex);
+        return -3;
+    }
+    barrier->tripCount = count;
+    barrier->count = 0;
+
+    return 0;
+}
+
+int pthread_barrier_destroy(pthread_barrier_t *barrier)
+{
+    pthread_cond_destroy(&barrier->cond);
+    pthread_mutex_destroy(&barrier->mutex);
+    return 0;
+}
+
+int pthread_barrier_wait(pthread_barrier_t *barrier)
+{
+    pthread_mutex_lock(&barrier->mutex);
+    ++(barrier->count);
+    if(barrier->count >= barrier->tripCount)
+    {
+        barrier->count = 0;
+        pthread_cond_broadcast(&barrier->cond);
+        pthread_mutex_unlock(&barrier->mutex);
+        return 1;
+    }
+    else
+    {
+        pthread_cond_wait(&barrier->cond, &(barrier->mutex));
+        pthread_mutex_unlock(&barrier->mutex);
+        return 0;
+    }
+}
+
+#endif
diff --git a/src/android/pthread_barrier.h b/src/android/pthread_barrier.h
new file mode 100755
index 0000000000000000000000000000000000000000..ef6a37581a979536130dcef4cb6ccceab41244c9
--- /dev/null
+++ b/src/android/pthread_barrier.h
@@ -0,0 +1,25 @@
+#ifndef PTHREAD_BARRIER_H
+#define PTHREAD_BARRIER_H
+
+#include <pthread.h>
+
+#if __ANDROID_API__ < __ANDROID_API_N__
+typedef int pthread_barrierattr_t;
+typedef struct
+{
+    pthread_mutex_t mutex;
+    pthread_cond_t cond;
+    int count;
+    int tripCount;
+} pthread_barrier_t;
+
+
+int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count);
+
+int pthread_barrier_destroy(pthread_barrier_t *barrier);
+
+int pthread_barrier_wait(pthread_barrier_t *barrier);
+
+
+#endif // PTHREAD_BARRIER_H
+#endif // PTHREAD_BARRIER_H
diff --git a/src/unix/CMakeLists.txt b/src/unix/CMakeLists.txt
index da6eb03154d78815fd34573db71fc5042713f538..f3234f58d01f7d58e31d47f475a336ad71e58218 100755
--- a/src/unix/CMakeLists.txt
+++ b/src/unix/CMakeLists.txt
@@ -13,7 +13,11 @@ endif()
 add_library(${PROJECT_NAME} STATIC ${CORE_UNIX_SRCS} ${CORE_UNIX_HEADERS}
     ${CORE_LINUX_SRCS} ${CORE_LINUX_HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_core pthread)
+target_link_libraries(${PROJECT_NAME} dap_core)
+
+if (NOT ANDROID)
+    target_link_libraries(${PROJECT_NAME} pthread)
+endif()
 
 target_include_directories(dap_core_unix INTERFACE .)