Java JNI Princípio
O JNI é uma função importante na plataforma padrão Java. Compensa as deficiências da importante vantagem de Java de independente da plataforma. Embora o Java seja uma plataforma cruzada, também pode interagir com bibliotecas dinâmicas de outros idiomas (como C e C ++), dando a outros idiomas a oportunidade de jogar suas vantagens.
Com o suporte da plataforma Java Standard, o modo JNI é mais fácil de implementar e usar. Aqui está um resumo do seguinte gráfico de conhecimento:
Exemplo:
Ambiente Descrição: Ubuntu 10.4.2 Sistema LTS
Lista de programas 1: src/com/magc/jni/helloworld.java
/ ** * */ pacote com.magc.jni; / ** * @author magc * */ public classe helloworld {static {System.loadlibrary ("hello"); } public nativo void DisplayHello (); / ** * @param args */ public static void main (string [] args) {new Helloworld (). DisplayHello (); }} Digite o diretório SRC e compile a classe Java.
Comando: javac ./com/magc/jni/helloworld.java
Gerar helloworld.class no diretório onde helloworld.java está localizado
Em seguida, use Javah para gerar o arquivo de cabeçalho.
Comando: javah -jni com.magc.jni.helloworld
Gere o arquivo de cabeçalho com_magc_jni_helloworld.h no diretório atual. Este arquivo é usado por programas C e C ++ para referir e implementar funções nele.
Lista de programas 2: com_magc_jni_helloworld.h
/ * Não edite este arquivo - é a máquina gerada */ #include <jni.h>/ * cabeçalho para classe com_magc_jni_helloworld */ #ifndef _included_com_magc_jni_helloworld #define _inclded_com_mag_jni_helloworld #define _inclded_com_mag_jni_helloworld #define _inclded_com_mag_jni_helloworld #define _included_com_mag_jni_helloworld #defin #endif / * * classe: com_magc_jni_helloworld * método: displayHello * assinatura: () v * / jniexport void jnicall java_com_magc_jni_helloworld_displayhello (jnienv *, job); #ifdef __cplusplus} #endif #endif
Nota: 1) Este arquivo de cabeçalho não requer compilação do usuário e é usado diretamente para referência por outros programas C e C ++.
2) O método Java_Com_Magc_Jni_Helloworld_DisplayHello (jnienv *, Jobject) neste arquivo de cabeçalho é uma interface para interagir com as bibliotecas de link dinâmicas no futuro, e o nome deve ser consistente.
Listagem 3 do programa: src/jni_helloworldimpl.cpp
#include <ni.h> #include "com_magc_jni_helloworld.h" #include <stdio.h> jniexport void jnicall java_com_magc_jni_helloworld_displayhello (jnienv *pins, jobj) {Printn Printn (Jnienv *, Jobj) {Printn Printn (Jnienv *, Jobj) {PrintF) printf ("Hello World! /n"); retornar;} Este arquivo C ++ implementa as funções no arquivo de cabeçalho acima, observe que os nomes da função de método devem ser consistentes.
Compilar e gerar biblioteca dinâmica libhello.so,
Comando: g ++ -shared -i/usr/lib/jvm/java -6 -openjdk/incluir jni_helloworldimpl.cpp -o libhello.so
Após o sucesso, o arquivo Libhello.so da Biblioteca de Link Dynamic será gerado no diretório atual.
Com a biblioteca dinâmica de implementações específicas, você pode executar o Java para chamar o método nativo da classe do programa JNI.
Comando: java -djava.library.path =. com.magc.jni.helloworld
O resultado da entrada é: de jni_helloworldimpl.cpp: Hello World!
Obrigado pela leitura, espero que isso possa ajudá -lo. Obrigado pelo seu apoio a este site!