歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android中JNI的調用生成頭文件步驟

Android 中通過JNI調用本地方法步驟介紹:首先是在eclipse中生成類文件

package Pag;

public class JNI {

 static{
  System.loadLibrary("hello");
 }
 public native void  printHello();
 public static void main(String[] args) {
  new JNI().printHello();
 }

}

上面的例子是java簡單的調用native方法。可以通過javac生成.class文件
 
比如上面的在D:\jni文件夾中,第一中方式是在dos命令cmd中cd d:
 
cd jni
 
cd Pag
 
javac JNI.java
 
如:C:\Users\Administrator>cd d:
 D:\jni\Pag
 C:\Users\Administrator>d:
 D:\jni\Pag>javac JNI.java
 
這樣將在當前目錄中生成class文件。或者在eclipse直接bin目錄中就會有生成好的.class文件
 
第二種是直接在dos命令cmd中javac d:\jni\Pag\JNI.java
 
如:C:\Users\Administrator>javac d:\jni\Pag\JNI.java
 

下面是生成頭文件的兩種方法:
 
第一種方法是進入相應生成的生成.class包目錄(注意是包含.class的包目錄,並不是.class目錄)。
 
例如:
 
C:\Users\Administrator>d:
 
D:\>cd workspace\JNIText\bin\Pag
 D:\workspace\JNIText\bin\Pag>javah JNI
 錯誤:無法訪問 JNI
 錯誤的類文件: .\JNI.class
 類文件包含錯誤的類: Pag.JNI
 請刪除該文件或確保該文件位於正確的類路徑子目錄中。
 com.sun.tools.javac.util.Abort
        at com.sun.tools.javac.comp.Check.completionError(Check.java:164)
        at com.sun.tools.javadoc.DocEnv.loadClass(DocEnv.java:149)
        at com.sun.tools.javadoc.RootDocImpl.<init>(RootDocImpl.java:77)
        at com.sun.tools.javadoc.JavadocTool.getRootDocImpl(JavadocTool.java:159
 )
        at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:330)
        at com.sun.tools.javadoc.Start.begin(Start.java:128)
        at com.sun.tools.javadoc.Main.execute(Main.java:66)
        at com.sun.tools.javah.Main.main(Main.java:147)
 javadoc: 錯誤 - 致命錯誤
 2 錯誤

上邊的提示是進入了.class 目錄中,並不是包目錄。接下來返回到上一個目錄中,也就是說的包目錄(D:\workspace\JNIText\bin),通過javah Pag.JNI編譯.h頭文件,將會在bin中生成
 
D:\workspace\JNIText\bin\Pag>
 D:\workspace\JNIText\bin\Pag>cd ..
 
D:\workspace\JNIText\bin>javah Pag.JNI

bin中有類包Pag,也就是說包路徑。通過javah命令實現
 
第二種方法的命令是C:\Users\Administrator>javah -classpath D:\workspace\JNIText\bin -jni Pag.JNI (直接進入cmd)中javah -classpath <包路徑> -jni <包含.class的包路徑>。
 
經過實驗測試C:\Users\Administrator>javah -classpath D:\workspace\JNIText\bin -jni Pag.JNI中,-jni可以省略不寫,但是-classpath 不能省略,否則報
 
javadoc: 錯誤 - 非法的軟件包名稱:"D:\workspace\JNIText\bin"的錯誤。

生成的文件如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Pag_JNI */

#ifndef _Included_Pag_JNI
#define _Included_Pag_JNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:    Pag_JNI
 * Method:    printHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_Pag_JNI_printHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

隨後通過C\C++編程工具實現其頭文件的方法,生成dll。

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved