??????????????д???SO??????????????IC??????APK????????????????м?????????????????JNI?????????????????????????
1 // ??JNI???
2 // ?????
3
4 // ????HelloWorld.java
5 class HelloWorld
6 {
7     private native void print();
8     public static void main(String[] args)
9     {
10         new HelloWorld().print();
11     }
12
13     static
14     {
15         System.loadLibrary("HelloWorld");
16     }
17 }
18 // ???print?????????????????native?????÷???????????????????????????static????ε?System.loadLibrary???????δ??????????????????????????libHelloWorld.so??
19 // ????HelloWorld.java
20 // ??????????????????????
21 javac HelloWorld.java
22 // ????????б???????HelloWorld.class??
23 // ????HelloWorld.h
24 // ??????????????????????
25 javah -jni HelloWorld
26 // ??????????л?????HelloWorld.h????HelloWorld.h?????????′???
27 /* DO NOT EDIT THIS FILE - it is machine generated */
28 #include <jni.h>
29 /* Header for class HelloWorld */
30
31 #ifndef _Included_HelloWorld
32 #define _Included_HelloWorld
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36 /*
37  * Class:     HelloWorld
38  * Method:    print
39  * Signature: ()V
40  */
41 JNIEXPORT void JNICALL Java_HelloWorld_print
42 (JNIEnv *?? jobject);
43
44 #ifdef __cplusplus
45 }
46 #endif
47 #endif
48 // ??????а????????????Java_HelloWorld_print??????????????????????????????????????潲????????????
49 // ???HelloWorld.c
50 // ????HelloWorld.c??????????μ????
51 #include <jni.h>
52 #include <stdio.h>
53 #include "HelloWorld.h"
54
55 JNIEXPORT void JNICALL
56 Java_HelloWorld_print(JNIEnv *env?? jobject obj)
57 {
58     printf("Hello World! ");
59 }
60 // ???????????jni.h????????????ж?????JNI???????????????????
61 // ??????????Java_HelloWorld_print??????????????????????????????????????????????????????????JNI?з???????
62 // env????java???????????Java?????????????c?к??????????????JVM?????????????C???????????????env???????????????
63 // obj???????????????c++??this????c???????????????????????????????????????????????ɡ?
64 // ????????libHelloWorld.so
65 // ??Linux?????????????????????????
66 cc -I/usr/lib/jvm/java-6-sun/include/linux/
67 -I/usr/lib/jvm/java-6-sun/include/
68 -fPIC -shared -o libHelloWorld.so HelloWorld.c
69 // ??????????libHelloWorld.so???????????????Java??include???????????????????趨???????Helloworld.c?а?????jni.h??
70 // ??????????????????HelloWorld.java??????LoadLibrary???????????“HelloWorld”?????????????Library???libHelloWorld??????Linux??????漲????????????????lib+????+.so???????????????????????????
71 // ????Java????HelloWorld
72 // ?????????????????????????????
73 java HelloWorld
74 // ?????????????????????????java.lang.UnsatisfiedLinkError??????????????·???????????·????
75 java -Djava.library.path='.' HelloWorld
76 // ??????????????????????·????ο?????Linux???????JNI????
77 // ????????????Υ??“Hello world!”??????