keywords: [Android NDK] Link static library to your JNI library

Origin:
http://blog.marcingil.com/android-ndk-link-static-library-to-your-jni-library/

When you’re developing an application that needs to use a custom, native precompiled library (the .a file) together with your gluing JNI interface maybe you’re wondering how to link it. It’s fairly simple and you can even make it target architecture aware (separate precompiled libraries for arm, arm-v7a, x86). In your module (I’m using Android Studio) you should have a jnidirectory, like this:

project /
  + module
    + src
      + main
        + jni           # JNI source files here and other native sources here
          | Android.mk
          | Application.mk
          | Xjni.c
          + x86         # target x86 ABI directory
            | libX.a    # x86 precompiled static library
          + armeabi
            | libX.a
          + armeabi-v7a # and so forth
          + mips

Now for the contents of Android.mk:

LOCAL_PATH := $(call my-dir)
# prepare libX
include $(CLEAR_VARS)
LOCAL_MODULE    := libX
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libX.a
include $(PREBUILT_STATIC_LIBRARY)

# build JNI
include $(CLEAR_VARS)
LOCAL_STATIC_LIBRARIES := X
LOCAL_MODULE    := Xjni
LOCAL_SRC_FILES := Xjni.c
include $(BUILD_SHARED_LIBRARY)

Now from the project root folder issue a command:

NDK_PROJECT_PATH=module/src/main ndk-build 

and you’re set. In the module/src/main/libs directory you should have your compiled JNI library that will be copied by gradle assemble to your APK. For all target ABIs. Have fun!