There are usually two ways to develop Android applications: ndk and eclipse, or add them directly in the android SDK. This section describes how to add an application in the android SDK environment. It involves JNI and Java calls to JNI. The JNI code file is C ++.
The first step is to establish the JNI-Layer Code. Note that the JNI code path has a great relationship with the Java code path and must be consistent.
Create the jni c ++ file android_test.cpp in the frameworks/base/CORE/JNI directory. The content is as follows:
# Define log_tag "FMC"
# Include "JNI. H"
# Include "android_runtime/androidruntime. H"
# Include <nativehelper/jnihelp. h>
# Include "utils/log. H"
Extern "C "{
Int test (void); // this function can be from C code or C library
};
Namespace Android // note that the namespace is closely related to all the paths of JNI called by Java, and The namespace cannot be used at will.
{
Static jint android_test (jnienv * ENV, jobject clazz)
{
Return test ();
}
Static jninativemethod method_table [] = {
{"My_test", "() I", (void *) android_test}, // The first parameter is a string, which is the function name seen at the Java layer;
// The second parameter is the parameter description of the function,
// The Java code uses this parameter to know the parameters of the called function;
// The third parameter is the c Function actually called in the JNI code.
}
Int register_android_test (jnienv * env) // This is the JNI registration function. Android. test is the package path seen at the Java call layer (Step 3,
// If register_android_hardware_test is used,
// The Java call layer needs to import the Android. Hardware. Test package.
{
Return androidruntime: registernativemethods (ENV, "android/test", method_table, nelem (method_table ));
/* The second parameter is associated with the path of the Java file call package at the application layer. The "android/test" string parameter and
The complete path of frameworks/base/CORE/Java/Android/test. Java corresponds to the package path anroid. Test, Android. Test. Test */
}
};
Step 2: add the JNI code registration function to the androidruntime Runtime Library. Edit the frameworks/base/CORE/JNI/androidruntime. cpp file:
Add the following two lines according to the method on the file:
..........
Extern int register_android_test (jnienv * env); // This is the registration function in the android_test.cpp file.
..........................
Static const regjnirec gregjni [] = {
.........
.........
Reg_jni (register_android_test ),
.........
.......
};
Step 3: Create a Java call layer and create the file test. Java in the frameworks/base/CORE/Java/Android/test directory. The content is as follows:
Package Android. test;
/**
* Native methods for managing FM.
*
* {@ Hide}
*/
Public class test {
Private native int my_test (); // The final code that can be called in the android application code
Public test () // Constructor
{
// Add your code here .............
}
};
Step 4: Create your Android Application in the packages/apps/test directory (the specific method is not described here). Suppose test_app.java is the main file of the application, the content is as follows:
Package com. app;
Import Android. Test; // import your own package
Use this in the Code:
Test test;
Test. my_test (); // The final call
Android sdk jni implementation, Android sdk jni c ++ code, Android calls C ++, and establishes the complete steps of JNI and Java applications under Android SDK. Android Java calls C ++ code