Comment faire pour importer .dll Android de projet java (eclipse)
Java Native Interface (JNI) est l'un des
l'intéressant de l'interface en java Par
à l'aide de Java Native Interface (JNI), vous
peut fonctionner avec d'autres applications
et les bibliothèques.
JNI est le natif de l'interface de programmation java est une partie du JDK. En utilisant JNI vous pouvez le faire fonctionner avec d'autres applications et des bibliothèques écrites en d'autres langues comme le C,C++. Mais la question de fond se pose quand dois-je utiliser la JNI ?
- Vous voulez un peu de plate-forme spécifique de l'information et de la Java standard de la bibliothèque de la classe ne peut pas soutenir la plate-forme dépendant des fonctionnalités nécessaires à votre application.
- Vous avez une bibliothèque application écrite dans une autre langue et que vous voulez l'utiliser dans votre application java.
- Vous voulez Java doit interagir avec certains faible niveau de langage de programmation.
Ci-dessous est donnée Simple Exemple; Voir que les méthodes ont "native", mot-Clé:
public native void displayHelloWorld();
public native void displayOther();
private native String getLine(String prompt);
La DLL que nous allons utiliser est firstJNI.DLL Cette DLL peut être généré par VC++ et borland. Dont nous parlerons plus tard.
//firstJNI.java
class firstJNI
{
public native void displayHelloWorld();
public native void displayOther();
private native String getLine(String prompt);
static {
System.loadLibrary("firstJNI");//This is firstJNI.DLL
/*if generated by borland
System.loadLibrary("firstjni");//This is firstjni.dll
*/
}
public static void main(String[] args)
{
firstJNI JN=new firstJNI();
JN.displayHelloWorld();
JN.displayOther();
String input = JN.getLine("Enter Some Thing ");
System.out.println("You Entered " + input);
}
}
Compiler le code ci-dessus à l'aide de (Qu'est-ce que cela signifie ?)
prompt>javac firstJNI.java
Puis créer Fichier d'en-tête à l'aide de (Qu'est-ce que cela signifie ?)
prompt>javah javah -jni HelloWorld
Cela va créer firstJNI.h fichier. Dans le Fichier d'en-tête, vous verrez
-------------------------------------
JNIEXPORT void JNICALL Java_firstJNI_displayHelloWorld
(JNIEnv *, jobject);
/*
* Class: firstJNI
* Method: displayOther
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_firstJNI_displayOther
(JNIEnv *, jobject);
/*
* Class: firstJNI
* Method: getLine
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_firstJNI_getLine
(JNIEnv *, jobject, jstring);
----------------------------------------------
Ne pas modifier l'en-tête de Fichier
Maintenant voyons comment générer une DLL à l'aide de VC++, Cliquez sur: Fichier->New->Win32Dynamic-Lien de la Bibliothèque
Donner le nom et Sélectionnez
Un simple projet de DLL
Vous aurez
firstJNI.CPP fichier
Ci-dessous est donnée la firstJNI.cpp fichier
//MYVCDLL.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "D:\Kanad\Study\codeToad Articles\firstJNI.h"
#include "jni.h" //can copy or give full path
#include <math.h>
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
extern "C" __declspec(dllexport) int getMemorySize();
//And your function definition should look like this:
extern "C" __declspec(dllexport) int getMemorySize()
{ //do something
MEMORYSTATUS memoryStatus;
int MB=1024*1024 ;
double memSize;
memoryStatus.dwLength=sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&memoryStatus);
__int64 size= memoryStatus.dwTotalPhys;
memSize=(double)size/MB;
printf("\nTotal Memory %.0lf MB",ceil(memSize));
return 0;
}
JNIEXPORT void JNICALL
Java_firstJNI_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world! This is using VC++ DLL\n");
}
JNIEXPORT void JNICALL
Java_firstJNI_displayOther(JNIEnv *env, jobject obj)
{
printf("Hello world! This is using VC++ DLL Other Function \n");
getMemorySize();
}
JNIEXPORT jstring JNICALL
Java_firstJNI_getLine(JNIEnv *env, jobject obj, jstring enter)
{
char buf[128];
const char *str = env->GetStringUTFChars(enter, 0);
printf("\n%s", str);
env->ReleaseStringUTFChars(enter, str);
scanf("%s", buf);
return env->NewStringUTF(buf);
}
Maintenant j'ai des questions à propos de comment puis-je utiliser .de fichier dll écrites en C++/C dans mon application java. Je développe une application pour android en utilisant Eclipse et j'ai quelques fichiers dll et je n'ai pas leur source ... Comment puis-je utiliser dans mon projet ???
OriginalL'auteur Viktor Apoyan | 2011-05-06
Vous devez vous connecter pour publier un commentaire.
D'abord un avertissement, je suis un peu louche sur ce, il a été un moment depuis que j'ai utilisé de la JNI.
De nombreux JNI exemples supposons que vous possédez le code de la bibliothèque que vous voulez l'appeler, dans mon expérience, c'est rarement le cas. Dans l'exemple que vous avez vue le javah util a été utilisé pour générer un fichier d'en-tête, contre lequel le rpc mise en œuvre a été écrite, c'est pourquoi vous pouvez voir la jni fichier d'en-tête et de divers Java des mots-clés dans le fichier cpp.
Afin d'utiliser une 3ème partie de la dll, vous devez d'abord besoin de la documentation pour cette dll, sans que vous êtes mort dans l'eau. La raison vous avez besoin de la documentation, c'est que vous allez créer un wrapper dll qui, tout simplement, les délégués à la 3ème partie de dll - vous besoin de savoir comment l'appeler et comment effectuer tout type de mappings. Évidemment, c'est ce wrapper qui va contenir l'ensemble de la JNI de choses à permettre à Java pour faire l'appel à wrapper, qui appelle à son tour la 3e partie de la dll.
Il y a plusieurs façons de faire cela, mais le moyen le plus facile je sais, c'est d'utiliser SWIG, ce qui va générer tout le code C++ nécessaires pour le wrapper dll. Il est également utile d'avoir quelqu'un qui sait C++ sur la main, ils vont être précieux de l'écriture des fichiers d'interface (.je ou .gts fichiers) qui RASADE utilise pour générer le code wrapper.
OriginalL'auteur Nick Holt
Je ne suis pas un expert, mais je pense que vous devriez utiliser
System.loadLibrary("comparejni");
http://blog.jayway.com/2010/01/25/boosting-android-performance-using-jni/
Espère que cela a aidé
OriginalL'auteur PedroAGSantos
Je ne pense pas que vous allez être en mesure d'utiliser un natif de Windows (bibliothèque.dll) dans une application Android. À charge sur Android, le code devra être intégré dans une ..
OK disons que j'ai .si la bibliothèque que j'ai compilé sous linux et j'ai de la documentation ou de code source. Ce que je dois faire pour la mettre en œuvre dans eclipse ?
OriginalL'auteur sudocode
Cet Article est pour Java Simple pas pour Android:
Appel de Dll à partir de Java
L'appel de C/C++ Dll à partir de Java
Introduction
Dans cette procédure pas à pas, nous allons vous montrer comment code C/C++ compilé dans une DLL de Windows peut être appelée à partir de Java à l'aide de J/Invoke.
Nous serons à l'aide de Microsoft Visual Studio 2005 pour créer une DLL en C++ des fonctions, et l'écriture de code Java à l'aide de l'IDE Eclipse Java. Les étapes pour les autres IDEs seront similaires. Nous vous encourageons à pied " cet exercice avec nous, même si vous n'êtes pas très familier avec Visual Studio ou Eclipse, il est facile, et c'est amusant!
Pour exécuter cet exemple, vous devez exécuter Windows 2000, XP ou 2003.
J/Invoke nécessite Java SE de la trousse de développeur. Comme il utilise des annotations Java, JDK version 5.0 ou supérieure est nécessaire. Obtenir Java ici.
Continuer La Lecture ...
OriginalL'auteur Viktor Apoyan