Most Android applications are written in a high-level programming language such as Java.  Sometimes it is necessary and/or desirable to have parts of the application written in a low-level language such as C.  The Java language includes methods for running code written in low-level languages by using the Java Native Interface (JNI).  A JNI interface is composed of some Java code and some C code with bindings between them.  The interface allows function calls and data to be exchanged both ways between the Java and native C code.

The following process may be used to incorporate native C code in a Java application on Android:

  1. Define a Java interface that the Java application will use to communicate with the native library.
  2. Use an automated tool (javac) to auto-generate a C header file from the Java interface.
  3. Write C code that uses the header file and implements all of the functions defined by it.
  4. Generate a shared object (.so) file from the C code.
  5. Load the shared object into the Java application and call the methods on the interface.

Overview of JNI for Android Applications