Wie zu importieren .dll Android-java-Projekt (mit eclipse)

Java Native Interface (JNI)

Java Native Interface (JNI) ist eine der
die interessante Schnittstelle von java Durch
Verwendung von Java Native Interface (JNI) Sie
kann die Zusammenarbeit mit anderen Anwendungen
und Bibliotheken
.

JNI ist die native Programmierschnittstelle für java, die Teil des JDK. Mit JNI können Sie arbeiten mit anderen Anwendungen und Bibliotheken in einer anderen Sprache wie z.B. C,C++. Aber die grundsätzliche Frage Wann sollte ich das JNI ?

  1. Sie möchten, dass einige Plattform-spezifische Informationen und die standard-Java-Klassenbibliothek unterstützt möglicherweise nicht die Plattform-abhängigen Funktionen von Ihrer Anwendung benötigt werden.
  2. Sie haben einige library-Anwendung in einer anderen Sprache ist und Sie es verwenden möchten, in Ihre java-Anwendung.
  3. Sie wollen Java sollte die Interaktion mit einigen low-level-Programmiersprache.

Unten gegebenen Einfachen Beispiel; Sehen, dass Methoden haben 'native' Schlüsselwort:

public native void displayHelloWorld();
public native void displayOther();
private native String getLine(String prompt);

Die DLL, die wir verwenden werden ist firstJNI.DLL Diese DLL erzeugt werden kann VC++ oder borland. Die werden wir später besprechen.

//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); 
     }
}

Kompilieren Sie den obigen code mit (Was bedeutet das ?)

prompt>javac firstJNI.java

Dann erstellen header-Datei mit (Was bedeutet das ?)

prompt>javah javah -jni HelloWorld

Dadurch wird firstJNI.h-Datei. In der header-Datei, Sie werden sehen,

-------------------------------------
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);
----------------------------------------------

Nicht Bearbeiten header-Datei

Nun lassen Sie uns sehen, wie generate-DLL mit VC++, Klicken Sie auf: Datei->New->Win32Dynamic-Link Bibliothek
Geben Sie Namen und Wählen Sie
Ein einfaches DLL-Projekt
Sie haben
firstJNI.CPP Datei
Unten ist angesichts der firstJNI.cpp Datei

//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);

}

Jetzt habe ich Fragen über wie kann ich .dll-Datei, geschrieben in C++/C in meine java-Anwendung. Ich bin die Entwicklung von Anwendungen für android mit Eclipse und ich habe einige dll-Dateien, und ich habe nicht deren Quelle ... Wie kann ich Sie in meinem Projekt ???

So gelang es Ihnen, fügen Sie die dll-Dateien in Ihrem nativen android-Projekt? Ich ein bisschen drin, schau mal hier stackoverflow.com/questions/28393305/...

InformationsquelleAutor Viktor Apoyan | 2011-05-06

Schreibe einen Kommentar