title: java.lang.UnsatisfiedLinkError - NDK in android studio gradle?
body: <p>Folder structure</p>
  
  <pre><code> app 
  ---main
      ---java
      ----jni
            -----Android.mk
            -----Application.mk
            ----- hello-jni.c
      ---res
  </code></pre>
  
  <p>in build.gradle</p>
  
  <pre><code>apply plugin: 'com.android.application'
  
  android {
  compileSdkVersion 21
  buildToolsVersion "22.0.1"
  
  defaultConfig {
      applicationId "com.example.hellojni"
      minSdkVersion 17
      targetSdkVersion 21
      sourceSets.main {
          jni.srcDirs = []
          jniLibs.srcDir 'src/main/libs'
  
      }
  
      ndk {
          moduleName "hello-jni"
          cFlags "-std=c++11 -fexceptions"
          ldLibs "log"
          stl "gnustl_shared"
          abiFilter "armeabi-v7a"
      }
  
      task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') {
          destinationDir file("$buildDir/native-libs")
          baseName 'native-libs'
          extension 'jar'
          from fileTree(dir: 'libs', include: '**/*.so')
          into 'lib/'
      }
  
      tasks.withType(JavaCompile) {
          compileTask -&gt; compileTask.dependsOn(nativeLibsToJar)
      }
  
  
  
  
  
  
  
      testApplicationId "com.example.hellojni.tests"
      testInstrumentationRunner "android.test.InstrumentationTestRunner"
  }
  
  
  buildTypes {
      release {
          minifyEnabled false
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
      }
  }
  
  dependencies {
      compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
  }
  
  
  }
  </code></pre>
  
  <p>in Android.mk</p>
  
  <pre><code> LOCAL_PATH := $(call my-dir)
   include $(CLEAR_VARS)
   LOCAL_MODULE    := hello-jni
  LOCAL_SRC_FILES := hello-jni.c
  include $(BUILD_SHARED_LIBRARY)
  </code></pre>
  
  <p>in hello-jni.c</p>
  
  <pre><code>include&lt;com.example.hellojni.HelloJni.h&gt;
  
  #include &lt;string.h&gt;
   #include &lt;jni.h&gt;
  
  
  
   jstring
   Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
                                                jobject thiz )
  {
    #if defined(__arm__)
      #if defined(__ARM_ARCH_7A__)
        #if defined(__ARM_NEON__)
          #if defined(__ARM_PCS_VFP)
            #define ABI "armeabi-v7a/NEON (hard-float)"
          #else
            #define ABI "armeabi-v7a/NEON"
          #endif
            #else
             #if defined(__ARM_PCS_VFP)
          #define ABI "armeabi-v7a (hard-float)"
           #else
          #define ABI "armeabi-v7a"
         #endif
       #endif
     #else
     #define ABI "armeabi"
    #endif
   #elif defined(__i386__)
     #define ABI "x86"
    #elif defined(__x86_64__)
     #define ABI "x86_64"
    #elif defined(__mips64)  /* mips64el-* toolchain defines __mips__ too */
     #define ABI "mips64"
    #elif defined(__mips__)
     #define ABI "mips"
    #elif defined(__aarch64__)
     #define ABI "arm64-v8a"
  #else
       #define ABI "unknown"
    #endif
  
      return (*env)-&gt;NewStringUTF(env, "Hello from JNI !  Compiled with ABI " ABI ".");
  }
  </code></pre>
  
  <p>in java </p>
  
  <pre><code>  public class HelloJni extends Activity
   {
        /** Called when the activity is first created. */
        @Override
           public void onCreate(Bundle savedInstanceState)
          {
          super.onCreate(savedInstanceState);
  
  
      TextView  tv = new TextView(this);
      tv.setText( stringFromJNI() );
      setContentView(tv);
  }
  
  
  public native String  stringFromJNI();
  
  
  public native String  unimplementedStringFromJNI();
  
  
  static {
      System.loadLibrary("hello-jni");
  }
  }
  </code></pre>
  
  <p>I am getting unsatisfied error</p>
  
  <pre><code> java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.hellojni-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libhello-jni.so"
          at java.lang.Runtime.loadLibrary(Runtime.java:366)
          at java.lang.System.loadLibrary(System.java:989)
          at com.example.hellojni.HelloJni.&lt;clinit&gt;(HelloJni.java:64)
          at java.lang.reflect.Constructor.newInstance(Native Method)
          at java.lang.Class.newInstance(Class.java:1572)
          at android.app.Instrumentation.newActivity(Instrumentation.java:1088)
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2215)
          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
          at android.app.ActivityThread.access$800(ActivityThread.java:148)
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
          at android.os.Handler.dispatchMessage(Handler.java:102)
          at android.os.Looper.loop(Looper.java:135)
          at android.app.ActivityThread.main(ActivityThread.java:5312)
          at java.lang.reflect.Method.invoke(Native Method)
          at java.lang.reflect.Method.invoke(Method.java:372)
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
  </code></pre>
  
  <p>My local.properties</p>
  
  <pre><code>sdk.dir=F\:\\SDK
  ndk.dir=C\:\\NDK
  </code></pre>
  
  <p>Its not generating .so files ..</p>