¡¡¡¡ÒòΪ¹¤×÷ÐèҪдһ·Ý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
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
52 #include
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Öзdz£ÖØÒª¡£
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!”Êä³öÁË¡£