diff --git a/app/src/main/jni/Android.mk b/app/src/main/jni/Android.mk
new file mode 100644
index 0000000..67d22e0
--- /dev/null
+++ b/app/src/main/jni/Android.mk
@@ -0,0 +1,8 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := nfd-example
+LOCAL_SRC_FILES := android-logger-streambuf.cpp wrappers-example.cpp
+# LOCAL_SHARED_LIBRARIES :=
+LOCAL_LDLIBS := -llog
+include $(BUILD_SHARED_LIBRARY)
diff --git a/app/src/main/jni/Application.mk b/app/src/main/jni/Application.mk
new file mode 100644
index 0000000..980d621
--- /dev/null
+++ b/app/src/main/jni/Application.mk
@@ -0,0 +1,5 @@
+APP_ABI=all
+
+APP_STL := gnustl_shared
+APP_GNUSTL_FORCE_CPP_FEATURES := exceptions rtti
+
diff --git a/app/src/main/jni/android-logger-streambuf.cpp b/app/src/main/jni/android-logger-streambuf.cpp
new file mode 100644
index 0000000..f693501
--- /dev/null
+++ b/app/src/main/jni/android-logger-streambuf.cpp
@@ -0,0 +1,60 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014-2015,  Regents of the University of California,
+ *                           Arizona Board of Regents,
+ *                           Colorado State University,
+ *                           University Pierre & Marie Curie, Sorbonne University,
+ *                           Washington University in St. Louis,
+ *                           Beijing Institute of Technology,
+ *                           The University of Memphis.
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "android-logger-streambuf.hpp"
+
+#include <android/log.h>
+
+namespace nfd_android {
+
+AndroidLoggerStreambuf::AndroidLoggerStreambuf()
+{
+  this->setp(buffer, buffer + MAX_BUF_SIZE - 1);
+}
+
+int
+AndroidLoggerStreambuf::overflow(int c)
+{
+  if (c == traits_type::eof()) {
+    *this->pptr() = traits_type::to_char_type(c);
+    this->sbumpc();
+  }
+  return this->sync()? traits_type::eof(): traits_type::not_eof(c);
+}
+
+int
+AndroidLoggerStreambuf::sync()
+{
+  int rc = 0;
+  if (this->pbase() != this->pptr()) {
+    __android_log_print(ANDROID_LOG_INFO, "Native", "%s",
+                        std::string(this->pbase(), this->pptr() - this->pbase()).c_str());
+    rc = 0;
+    this->setp(buffer, buffer + MAX_BUF_SIZE - 1);
+  }
+  return rc;
+}
+
+} // namespace nfd_android
diff --git a/app/src/main/jni/android-logger-streambuf.hpp b/app/src/main/jni/android-logger-streambuf.hpp
new file mode 100644
index 0000000..6ca2500
--- /dev/null
+++ b/app/src/main/jni/android-logger-streambuf.hpp
@@ -0,0 +1,57 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014-2015,  Regents of the University of California,
+ *                           Arizona Board of Regents,
+ *                           Colorado State University,
+ *                           University Pierre & Marie Curie, Sorbonne University,
+ *                           Washington University in St. Louis,
+ *                           Beijing Institute of Technology,
+ *                           The University of Memphis.
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NFD_ANDROID_JNI_ANDROID_LOG_HPP
+#define NFD_ANDROID_JNI_ANDROID_LOG_HPP
+
+#include <streambuf>
+
+namespace nfd_android {
+
+/**
+ * @brief Streambuf implementation to redirect to streams to Android logging facility
+ *
+ * Based on code from http://stackoverflow.com/a/8870278/2150331
+ */
+class AndroidLoggerStreambuf : public std::streambuf
+{
+public:
+  AndroidLoggerStreambuf();
+
+protected:
+  virtual int
+  overflow(int c);
+
+  virtual int
+  sync();
+
+private:
+  enum { MAX_BUF_SIZE = 1024 };
+  char buffer[MAX_BUF_SIZE];
+};
+
+} // namespace nfd_android
+
+#endif // NFD_ANDROID_JNI_ANDROID_LOG_HPP
diff --git a/app/src/main/jni/wrappers-example.cpp b/app/src/main/jni/wrappers-example.cpp
new file mode 100644
index 0000000..5553258
--- /dev/null
+++ b/app/src/main/jni/wrappers-example.cpp
@@ -0,0 +1,43 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014-2015,  Regents of the University of California,
+ *                           Arizona Board of Regents,
+ *                           Colorado State University,
+ *                           University Pierre & Marie Curie, Sorbonne University,
+ *                           Washington University in St. Louis,
+ *                           Beijing Institute of Technology,
+ *                           The University of Memphis.
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "wrappers-example.hpp"
+#include "android-logger-streambuf.hpp"
+
+#include <iostream>
+
+JNIEXPORT void JNICALL
+Java_net_named_1data_nfd_wrappers_Example_main(JNIEnv*, jclass)
+{
+  nfd_android::AndroidLoggerStreambuf newBuffer;
+  std::streambuf *backupCout = std::cout.rdbuf(&newBuffer);
+  std::streambuf *backupCerr = std::cerr.rdbuf(&newBuffer);
+
+  std::cout << "Test message to cout" << std::endl;
+  std::cerr << "Test message to cerr" << std::endl;
+
+  std::cerr.rdbuf(backupCerr);
+  std::cout.rdbuf(backupCout);
+}
diff --git a/app/src/main/jni/wrappers-example.hpp b/app/src/main/jni/wrappers-example.hpp
new file mode 100644
index 0000000..9bf11e3
--- /dev/null
+++ b/app/src/main/jni/wrappers-example.hpp
@@ -0,0 +1,46 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014-2015,  Regents of the University of California,
+ *                           Arizona Board of Regents,
+ *                           Colorado State University,
+ *                           University Pierre & Marie Curie, Sorbonne University,
+ *                           Washington University in St. Louis,
+ *                           Beijing Institute of Technology,
+ *                           The University of Memphis.
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class net_named_data_nfd_wrappers_Example */
+
+#ifndef _Included_net_named_data_nfd_wrappers_Example
+#define _Included_net_named_data_nfd_wrappers_Example
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     net_named_data_nfd_wrappers_Example
+ * Method:    main
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_net_named_1data_nfd_wrappers_Example_main
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
