Comment faire pour importer .dll Android de projet java (eclipse)

Java Native Interface (JNI)

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 ?

  1. 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.
  2. Vous avez une bibliothèque application écrite dans une autre langue et que vous voulez l'utiliser dans votre application java.
  3. 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 ???

Donc, vous avez réussi à ajouter des fichiers dll dans votre android natif de projet? J'ai un peu coincé dans ce, rendez-vous ici stackoverflow.com/questions/28393305/...

OriginalL'auteur Viktor Apoyan | 2011-05-06