title: Can't print log messages from JNI with Android Studio
body: <p>Error I'm getting:</p>
  
  <blockquote>
    <p>error: undefined reference to '__android_log_print'</p>
  </blockquote>
  
  <p>I've already added this line to my .cpp file:</p>
  
  <pre><code>#include &lt;android/log.h&gt;
  </code></pre>
  
  <p>I've tried with both: <strong>__android_log_print</strong> and <strong>__android_log_write</strong></p>
  
  <p>I've also linked against the logging library, in my Android.mk file (which I'm manually compiling).</p>
  
  <p>LOCAL_LDLIBS := -llog</p>
  
  <p>I've also tried several alternatives I found like: </p>
  
  <pre><code>LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 
  </code></pre>
  
  <p>Here's my Android.mk:</p>
  
  <pre><code>LOCAL_PATH := $(call my-dir)
  
  #used to skip re-compiling libraw
  #include $(CLEAR_VARS)
  #LOCAL_MODULE    := libraw_r
  #LOCAL_SRC_FILES := ../obj/local/armeabi/libraw_r.so
  #LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/libraw
  #include $(PREBUILT_SHARED_LIBRARY)
  
  #used for compiling libraw
  include $(CLEAR_VARS)
  LOCAL_CFLAGS += -I$(SYSROOT)/usr/lib/include/libraw -pthread -w
  LOCAL_CXXFLAGS += -I$(SYSROOT)/usr/lib/include/libraw -pthread -w
  LOCAL_MODULE     := libraw_r                    # name of your module
  LOCAL_LDLIBS     += -L$(SYSROOT)/usr/lib -lstdc++ # libraries to link against, lstdc++ is auto-linked
  
  LOCAL_SRC_FILES  :=  internal/dcraw_common.cpp internal/dcraw_fileio.cpp internal/demosaic_packs.cpp src/libraw_cxx.cpp src/libraw_c_api.cpp
  LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/libraw
  include $(BUILD_SHARED_LIBRARY)
  
  include $(CLEAR_VARS)
  LOCAL_MODULE    := armapi
  LOCAL_SRC_FILES := armapi.cpp
  LOCAL_SHARED_LIBRARIES := libraw_r
  include $(BUILD_SHARED_LIBRARY)
  
  LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
  </code></pre>
  
  <p>And here is the build.gradle file:</p>
  
  <pre><code>buildscript {
      repositories {
          mavenCentral()
      }
      dependencies {
          classpath 'com.android.tools.build:gradle:1.0.0+'
      }
  }
  apply plugin: 'android'
  
  dependencies {
      compile fileTree(dir: 'libs', include: '*.jar')
  }
  
  android {
      compileSdkVersion 21
      buildToolsVersion "21.1.2"
  
      defaultConfig {
          ndk {
              moduleName "armapi"
              ldLibs "log"
          }
      }
  
      sourceSets {
  
          main {
              manifest.srcFile 'AndroidManifest.xml'
  
              jniLibs.srcDir 'libs' // use the jni .so compiled from the manual ndk-build command
              jni.srcDirs = [] //disable automatic ndk-build call
  
              java.srcDirs = ['src']
              resources.srcDirs = ['src']
              aidl.srcDirs = ['src']
              renderscript.srcDirs = ['src']
              res.srcDirs = ['res']
              assets.srcDirs = ['assets']
  
  
          }
  
  
          // Move the tests to tests/java, tests/res, etc...
          instrumentTest.setRoot('tests')
  
          // Move the build types to build-types/&lt;type&gt;
          // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
          // This moves them out of them default location under src/&lt;type&gt;/... which would
          // conflict with src/ being used by the main source set.
          // Adding new build types or product flavors should be accompanied
          // by a similar customization.
          debug.setRoot('build-types/debug')
          release.setRoot('build-types/release')
  
  
      }
  
  }
  </code></pre>