• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            以下代碼摘自網(wǎng)絡(luò)一片文章,我只是加入更多的說(shuō)明,方便一些入門(mén)的朋友。

            luther@gliethttp:~/jni$ vim jusbhid.java
            package gliethttp.usb.usbhid;                                           // 使用打包命令package,將jusbhid類(lèi)打包到gliethttp.usb.usbhid中.
            public class jusbhid
            {
                public native String usbhid_open(int vid, int pid);
                public native String usbhid_sendstring(String id, String command);
                static {
                    System.loadLibrary("usbhid");
                }
            }
            luther@gliethttp:~/jni$ javac jusbhid.java -d .                         // 將會(huì)在當(dāng)前目錄生成包路徑gliethttp/usb/usbhid文件夾,如果沒(méi)有定義-d .那么將直接在當(dāng)前目錄生成jusbhid.class


            //沒(méi)有實(shí)際作用,提示用
            luther@gliethttp:~/jni$ tree gliethttp
            /                                        
            gliethttp/
            `-- usb
                `-- usbhid
                    `-- jusbhid.class
            2 directories, 1 file


            //這里一定要記住要退到gliethttp根目錄上一層,如果你還在gliethttp/usb/usbhid/目錄里面的話(huà)運(yùn)行會(huì)報(bào)錯(cuò)。
            luther@gliethttp:~/jni$ cd ../../../

            luther@gliethttp:~/jni$ javah gliethttp.usb.usbhid.jusbhid              // 生成jni頭文件.h

            luther@gliethttp:~/jni$ ll gliethttp_usb_usbhid_jusbhid.h               // 頭文件名為gliethttp_usb_usbhid_jusbhid.h
            -rw-r--r-- 1 luther luther 788 2009-07-31 12:38 gliethttp_usb_usbhid_jusbhid.h

            luther@gliethttp:~/jni$ vim gliethttp_usb_usbhid_jusbhid.h              // 可以看到有如下內(nèi)容,這里來(lái)看,加入package gliethttp.usb.usbhid;
            /* DO NOT EDIT THIS FILE - it is machine generated */                   // 與直接定義public class gliethttp_usb_usbhid_jusbhid效果一樣
            #include <jni.h>                                                        // 類(lèi)名中符號(hào)'_'表示包路徑.
            /* Header for class gliethttp_usb_usbhid_jusbhid */

            #ifndef _Included_gliethttp_usb_usbhid_jusbhid
            #define _Included_gliethttp_usb_usbhid_jusbhid
            #ifdef __cplusplus
            extern "C" {
            #endif
            /*
             * Class:     gliethttp_usb_usbhid_jusbhid
             * Method:    usbhid_open
             * Signature: (II)Ljava/lang/String;
             
            */

            JNIEXPORT jstring JNICALL Java_gliethttp_usb_usbhid_jusbhid_usbhid_1open
              (JNIEnv 
            *, jobject, jint, jint);

            /*
             * Class:     gliethttp_usb_usbhid_jusbhid
             * Method:    usbhid_sendstring
             * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
             
            */

            JNIEXPORT jstring JNICALL Java_gliethttp_usb_usbhid_jusbhid_usbhid_1sendstring
              (JNIEnv 
            *, jobject, jstring, jstring);

            #ifdef __cplusplus
            }

            #endif
            #endif

            luther@gliethttp:~/jni$ vim jusbhid.c
            // [luther.gliethttp] -- 20090731
            #include <stdio.h>
            #include 
            "gliethttp_usb_usbhid_jusbhid.h"

            JNIEXPORT jstring JNICALL Java_gliethttp_usb_usbhid_jusbhid_usbhid_1open(JNIEnv 
            *env, jclass obj, jint vid, jint pid)
            {
                
            char buf[512];
                printf(
            "vid=0x%04x pid=0x%04x\n", vid, pid);
                sprintf(buf, 
            "0#1#2#3#4#5\n");
                
            return (*env)->NewStringUTF(env, buf);
            }


            JNIEXPORT jstring JNICALL Java_gliethttp_usb_usbhid_jusbhid_usbhid_1sendstring(JNIEnv 
            *env, jclass obj, jstring id, jstring command)
            {
                
            int fd;
                
            const char *idv;
                
            const char  *commands;
                idv 
            = ((*env)->GetStringUTFChars)(env, id, 0);
                commands 
            = ((*env)->GetStringUTFChars)(env, command, 0);
                fd 
            = atoi(idv);
                printf(
            "[%d] %s\n", fd, commands);
                
            return (*env)->NewStringUTF(env, "usbhid_sendstring ok!\n");
            }


            //上面創(chuàng)建好.h和.c文件后就要編譯成.so的動(dòng)態(tài)庫(kù)了
            luther@gliethttp:~/jni$ gcc -fPIC -I /home/xxx/jdk1.6.0_14/include -I /home/xxx/jdk1.6.0_14/include/linux -shared -o libusbhid.so jusbhid.c

            //如果遇到環(huán)境問(wèn)題,就看一下http://www.shnenglu.com/noswimfish/archive/2010/12/07/135662.html

            //下面我們要寫(xiě)一個(gè)java的例子來(lái)測(cè)試我們生成JNI接口
            luther@gliethttp:~/jni$ vim usbhid_jni_example.java
            import gliethttp.usb.usbhid.*;                                          // 導(dǎo)入CLASSPATH搜索路徑中,路徑為gliethttp/usb/usbhid/下的所有.class包
            public class usbhid_jni_example 
            {
                
            public static void main(String[] args)
                
            {
                    String rets;
                    jusbhid hid 
            = new jusbhid();
                    rets 
            = hid.usbhid_open(0x1234,0x5678);
                    System.out.printf(
            "%s", rets);
                    rets 
            = hid.usbhid_sendstring("88""QWS\r");
                    System.out.printf(
            "%s", rets);
                }

            }


            luther@gliethttp:~/jni$ javac usbhid_jni_example.java

            //這里可能遇到編碼問(wèn)題,你可以適當(dāng)?shù)挠孟旅娴姆绞浇鉀Q
            luther@gliethttp:~/jni$ javac -encoding gbk usbhid_jni_example.java 
            //其中具體采用哪種編碼根據(jù)的example中的例子的編碼來(lái)覺(jué)得,我只舉了一個(gè)gbk的例子,還有很多可以從網(wǎng)上查查。

            //執(zhí)行程序
            luther@gliethttp:~/jni$ java usbhid_jni_example
            vid=0x1234 pid=0x5678
            0#1#2#3#4#5
            [88] QWS
            usbhid_sendstring ok!

            //執(zhí)行可能會(huì)出一些問(wèn)題,可能找不到你之前生成 .so JNI動(dòng)態(tài)庫(kù),你可以把動(dòng)態(tài)庫(kù)拷貝到/usr/lib目錄下即可。


            久久无码一区二区三区少妇| 色噜噜狠狠先锋影音久久| 一本久久免费视频| 亚洲精品乱码久久久久久蜜桃图片| 久久免费视频6| 久久亚洲春色中文字幕久久久| 日韩AV无码久久一区二区| 99久久国产热无码精品免费久久久久| 国产精品久久久久久久久久影院| 久久久久亚洲AV片无码下载蜜桃| 久久综合久久自在自线精品自 | 久久久无码精品亚洲日韩软件| 伊人色综合久久天天人守人婷| 久久人人爽人人爽人人AV东京热| 久久香蕉国产线看观看乱码| 久久精品国产99国产精品亚洲| 2021精品国产综合久久| 狠狠色狠狠色综合久久| 久久一区二区三区免费| 久久久久国产一级毛片高清版| 亚洲七七久久精品中文国产 | 久久国产成人| 久久天堂电影网| 欧美亚洲另类久久综合| 久久成人国产精品| 人妻少妇久久中文字幕| 狠狠色丁香久久婷婷综合蜜芽五月 | A狠狠久久蜜臀婷色中文网| 久久九九久精品国产免费直播| 久久久精品午夜免费不卡| 久久人人爽爽爽人久久久| 99久久国产精品免费一区二区| 久久久久国产亚洲AV麻豆| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区| 亚洲va久久久噜噜噜久久| av色综合久久天堂av色综合在| 91精品婷婷国产综合久久| 色综合久久综合网观看| 国产精品热久久毛片| 国产精品美女久久久久av爽| 久久精品国产亚洲精品|